NVIDIA 于 2026-07-23 发布的 官方教程(核验于 2026-07-24)用 Prime Intellect Lab 对 Nemotron 3 Nano 进行 100 步强化学习,再用同一组 32 道留出题复测;官方记录的答对题数从 7 道提高到 29 道。要判断提升是否来自训练,基线和复测必须使用相同的测试题、环境和采样参数。
按同一口径复现,需要固定 prime==0.6.17、math-python@0.1.10 和 Nano BF16 模型。先跑 32 题基线(baseline),再做 100 步可验证奖励强化学习(RLVR),最后只替换模型标识符复测。训练产物是 LoRA 适配器,不会改写整套基础模型权重。
开始前,Prime Intellect 账号必须开通托管训练(Hosted Training)并配置账单,任务还必须配有能自动判定结果的验证器或奖励函数。若当前只能把目标写成“回答更好”,应先设计评测规则,不要启动训练。官方结果只适用于 math-python,客服、检索、中文或其他语言、高风险任务必须换成自己的训练集、测试集和验证器。
先固定 NVIDIA 示例的四个复现条件
复现官方结果时,以下四项必须保持一致;其中模型可用性和价格仍以命令行工具(CLI)的实时目录为准。
| 对象 | NVIDIA 示例固定值 |
|---|---|
| Python | 3.13 |
| Prime CLI | 0.6.17 |
| 基础模型 | nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16 |
| 训练环境 | primeintellect/math-python@0.1.10 |
执行 prime train models 和 prime inference models 后,只有在输出里看到上述 Nano 模型并确认当前训练、输入和输出价格,才继续运行。静态文章中的“低于 5 美元”是 NVIDIA 当次实验的总花费,不是长期报价。
初次实验只使用公开或合成数据。生产隐私数据、医疗/法律/金融决策以及没有独立测试集的任务不应直接进入这条训练流程。只需要临时推理服务时,可改用 vLLM on Hugging Face Jobs。
用原始 Nano 跑 32 题基线
先安装 NVIDIA 示例固定的 CLI 版本、初始化 Lab 工作区,并检查环境包。企业环境如果禁止 curl | sh,应改用组织批准的 uv 安装方式。
curl -LsSf https://astral.sh/uv/install.sh | sh
uv python install 3.13
uv tool install --python 3.13 --force "prime==0.6.17"
prime --version
prime login
mkdir -p nemotron-customization
cd nemotron-customization
prime lab setup
prime env info primeintellect/math-python --version 0.1.10
prime env inspect primeintellect/math-python@0.1.10 README.md
uv add "math_python==0.1.10" \
--index https://hub.primeintellect.ai/primeintellect/simple/
uv lock --check
prime train models
prime inference models
把评测命令保存成脚本,基线和复测只传不同的模型标识符。脚本留在工作区,换终端后仍可复用,也不会因手工复制而改动评测参数。
mkdir -p scripts
cat > scripts/run-math-eval.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
eval_model="${1:?用法:scripts/run-math-eval.sh <model-id>}"
math_eval_args='{"dataset_name":"math","dataset_split":"test","num_train_examples":-1,"max_turns":5,"sandbox_client_max_workers":8}'
math_sampling='{"max_tokens":2048,"temperature":1.0,"extra_body":{"chat_template_kwargs":{"enable_thinking":false}}}'
prime eval run math-python \
--provider prime \
--model "$eval_model" \
--num-examples 32 \
--rollouts-per-example 1 \
--max-concurrent 8 \
--env-args "$math_eval_args" \
--sampling-args "$math_sampling" \
--timeout 300 \
--max-retries 2 \
--save-results \
--disable-tui \
--abbreviated-summary
EOF
chmod +x scripts/run-math-eval.sh
export BASE_MODEL="nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16"
scripts/run-math-eval.sh "$BASE_MODEL"
--save-results 会生成评测结果文件。记录基线文件的实际路径,复测时保留另一份结果;之后按样例逐题比较,不能只依赖摘要分数。
math-python 要求模型使用 Python、NumPy、SymPy 或 SciPy 计算,并把最终答案写进 \boxed{}。本次示例把每条采样轨迹(rollout)限制为 5 个助手回合;反复调用工具却不给最终答案,会因为耗尽回合或缺少 \boxed{} 得到 0 分。
NVIDIA 公布的基线输出是平均奖励 0.219、标准差 0.413。该环境的奖励是二元值:1 表示答案正确,0 表示答案错误或缺失,因此 0.219 对应 7/32,即 21.9%。运行结果至少保存单题成败和完整轨迹;生成长度与截断状态单独记录,不能只记平均值。来源:NVIDIA 官方教程
用 100 步 RLVR 训练 Nano 的 LoRA
创建 configs/rl/nemotron-3-nano-math-python-100step.toml。训练集使用 dataset_split = "train",与上一节的 test 拆分开;关闭思考模式,每条轨迹最多 5 个助手回合,每回合最多生成 2,048 个词元,与基线配置一致。
name = "nemotron-3-nano-math-python-100step"
model = "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16"
loss = "rl"
max_steps = 100
batch_size = 32
rollouts_per_example = 8
max_inflight_rollouts = 32
learning_rate = 2e-5
lora_alpha = 16
[sampling]
max_tokens = 2048
temperature = 1.0
enable_thinking = false
[adapters]
interval = 0
keep_last = 1
[[env]]
id = "primeintellect/math-python@0.1.10"
args = { dataset_name = "math", dataset_split = "train", num_train_examples = -1, max_turns = 5 }
为与 NVIDIA 的 prime==0.6.17 固定版本示例保持一致,这里省略 run:
prime train configs/rl/nemotron-3-nano-math-python-100step.toml
该版本也兼容当前文档展示的 prime train run <config>;两种写法最终启动同一个训练流程。复现固定示例时使用上述省略形式。升级 CLI 前先运行 prime train --help,再按 Prime Intellect 托管训练文档 调整。
启动前先核对模型 ID 和 math-python@0.1.10 环境。命令输出还必须显示可接受的实时价格,并确认环境动作检查(CLI 显示为 action check)成功;随后保存运行 ID 和控制台链接。
export RUN_ID="<run-id>"
# 终端 A:持续跟随日志;训练结束或按 Ctrl-C 后返回
prime train logs "$RUN_ID" --follow
# 终端 B:需要持续查看费用时运行;按 Ctrl-C 后返回
prime train usage "$RUN_ID" --watch
# 任一终端:查看进度和奖励分布
prime train progress "$RUN_ID"
prime train distributions "$RUN_ID" --type rewards
# 任一终端:查询选定训练步的采样轨迹
export STEP="<step>"
prime train rollouts "$RUN_ID" --step "$STEP"
这些监控命令不是顺序脚本;持续日志和费用监控应放在不同终端。先用 progress 确认可查询的训练步,再用 distributions 检查奖励是否拉开,然后设置 STEP 抽查对应轨迹。高分必须真的答对题目,低分要区分计算错误、格式错误和工具调用失败。如果所有尝试都得同一分数,训练器缺少比较信号,应先调整环境或题目,而不是增加训练步数。奖励上升但解题方式退化时,要检查训练/测试泄漏、截断和奖励投机(reward hacking)。
部署最终适配器,只改模型标识符复测
训练进程结束后,先确认最终检查点(checkpoint)已生成 READY 状态的 LoRA 适配器。训练进程已经停止但没有 READY 适配器时,训练产物仍未完成。
export RUN_ID="<run-id>"
prime train checkpoints "$RUN_ID" --status READY
prime deployments list
export ADAPTER_ID="<adapter-id>"
export BASE_MODEL="nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16"
export ADAPTED_MODEL="$BASE_MODEL:$ADAPTER_ID"
prime deployments create "$ADAPTER_ID" --plain
COLUMNS=300 NO_COLOR=1 prime deployments list --plain
状态变成 DEPLOYED 后,用工作区里的同一个脚本复测,只传入新的模型标识符。测试集、环境和采样设置已经固定在脚本中,不要另复制一份命令。
scripts/run-math-eval.sh "$ADAPTED_MODEL"
NVIDIA 报告的二元评测中,平均奖励等于准确率。从 21.9% 提高到 90.6%,增加约 68.7 个百分点,不是 68.7% 的相对增幅。
| 指标 | 原始 Nano | LoRA 适配后 |
|---|---|---|
| 答对题数 | 7/32 | 29/32 |
| 平均奖励 / 准确率 | 21.9% | 90.6% |
| 标准差 | 0.413 | 0.291 |
| 结果发生变化的题 | — | 23 题改进、1 题退步 |
这次 100 步官方运行的总花费低于 5 美元,只证明该固定版本的数学实验跑通。它不能预测其他数据集的提升幅度,也不能替代业务评测。来源:NVIDIA 官方教程
推理部署会继续计费。实验结束后卸载不再使用的适配器:
export ADAPTER_ID="<adapter-id>"
prime deployments delete "$ADAPTER_ID" --plain
prime deployments list
delete 在这里卸载推理服务,但保留适配器文件;以后仍可重新部署。状态应从 DEPLOYED 进入 UNLOADING,最终回到 NOT_DEPLOYED。来源:Prime Intellect LoRA 部署文档
Nano 跑通后再决定是否换 Super 或 Ultra
不要直接把 Nano 的配置和成本复制给更大模型。NVIDIA 教程给出了另外两个模型标识符,但要求每次都先重新运行 prime train models,确认账号权限、实时价格和硬件可用性。
| 模型 | 官方示例标识符 |
|---|---|
| Nemotron 3 Super | nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16 |
| Nemotron 3 Ultra | nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-NVFP4 |
先用 Nano 验证环境、奖励和复测闭环。错误分析排除验证器错误、数据泄漏和截断后,如果 Nano 仍在同一高难任务组上重复失败,再考虑是否受模型容量限制。运行 Super 或 Ultra 前先写下成本上限和最低改进幅度,再用同配置的小样本基线验证;没有达到预设幅度就停止。模型可见但训练权限不足时,也不要用其他模型 ID 猜测替代。
把数学示例迁移到业务任务前,先重做验证器
RLVR 适合能由程序或规则判定结果的任务,例如数学题、代码测试、结构化数据转换和带结构定义(schema)校验的 SQL。引用检查只能验证“引用是否来自指定材料”,不能自动证明结论质量;客服语气、开放式文案和高风险建议不适合作为首次迁移的 RLVR 任务。
迁移时按以下顺序重建实验:
- 把业务成功条件写成可执行验证器,并列出允许失败的边界。
- 分离训练集、开发集和从未参与调参的最终测试集。
- 在原始模型上重复跑基线,确认分数既不全为 0,也没有接近满分。
- 训练后按任务分组比较退步、成本和输出长度,再决定是否继续。
有高质量输入—答案示例但没有可靠验证器时,优先做监督微调(SFT),不要先跑 RLVR。两者都需要独立测试集;训练奖励或训练损失不能代替上线验收。
正式流量前先写下可判定的放行标准
NVIDIA 的 32 题结果只能证明示例跑通。业务上线前应冻结测试集,并在查看复测结果之前写下最低总分、关键任务组下限、允许退步数量和每日推理预算。以下标准是本站建议,不是 NVIDIA 或 Prime Intellect 的官方上线结论。
| 检查项 | 放行条件 |
|---|---|
| 复现与回归 | 同一适配器至少独立复测 3 次,每次达到预设总分;高风险任务组不得退步,其他退步不超过预设数量 |
| 数据 | 训练和评测数据及其日志通过隐私、许可与内部留存检查 |
| 运行 | 已实际演练切回原始模型,费用告警生效,不使用的推理部署能够卸载 |
任何一项未验证,就把适配器留在实验环境。平均分上升不能覆盖高风险样例退步,也不能证明中文或其他语言、长上下文、多工具任务同步改善。
结果异常时按症状排查
| 症状 | 先检查什么 |
|---|---|
| 基线全为 0 | 先确认模型与环境可用,再从失败轨迹判断是答案格式、回合耗尽还是题目过难 |
| 训练奖励上涨,复测不涨 | 是否只看了训练集、评测参数是否变化、是否发生奖励投机 |
| 平均分上涨但关键题退步 | 按业务风险给测试题分组,不要用总平均值覆盖关键失败 |
| 实验结束后仍计费 | prime deployments list 是否最终显示 NOT_DEPLOYED;仍处于其他状态,尤其是 UNLOADING 或 UNLOAD_FAILED,都视为尚未完成清理 |