模型定制化能够让开发者将通用模型调整适配到特定用例、领域和语言等场景。
然而,定制化过程面临诸多挑战:需要相应的基础设施、技术专业知识以及特定工作流程所需的软件,还需要GPU等计算资源及有效使用这些资源的能力。此外,还依赖专业领域知识——应该使用哪种算法?应该使用哪种环境?如何判断模型是否真正完成了学习?
定制化看起来令人望而生畏。
借助NVIDIA Nemotron 3系列等开放模型——包括Nano、Super和Ultra版本——再结合Prime Intellect Lab这类提供训练即服务的平台,完整的定制化流程变得更加易于实现。在本教程中,您将使用Prime Intellect Lab通过托管强化学习来定制NVIDIA Nemotron 3 Nano,并生成可下载的LoRA适配器。
本地环境配置大约只需五分钟。
读完本文,您将了解两件事:
定制化比以往任何时候都更容易实现。
开始使用开放模型比以往任何时候都更简单。
本教程将遵循以下简单流程:基准评测、训练、再评测——全程使用Nemotron 3 Nano——最终得到一个针对特定任务的定制化模型。为了展示使用这些强大定制化工具入门有多简单,我们将采用标准的"Hello World"示例:Python数学。
本教程同样适用于Nemotron 3 Super和Nemotron 3 Ultra。
什么是定制化?
定制化是指对模型进行修改或调整其可训练参数,使其更有可能成功完成您希望它完成的任务。
实现方式多种多样。根据具体问题,您可以使用监督微调、参数高效微调、偏好优化、强化学习,或多种技术的组合。更全面的介绍可参阅《大语言模型定制化技术选择》一文。
本教程重点介绍在Python数学环境中使用可验证奖励的强化学习(RLVR)。该环境的基本思路很简单:使用Python工具(Python、numpy、sympy和scipy)来进行数学计算。以下是一个提示示例:
系统提示:所有计算均使用Python完成,将答案填写在\boxed{}中。除Python标准库外,您还可以使用:numpy、sympy、scipy。
用户提问:如果^8=4^x$,x的值是多少?
注意:该环境默认最多100轮对话。在本实验中,每次推演最多限制为5轮助手发言。直接回答算1轮,工具调用加最终回答合计算2轮(共5轮中的2轮)。如果模型反复调用工具却不给出最终答案,将受到严重惩罚。
如需深入了解智能体强化学习,请参阅《掌握智能体技术:AI智能体强化学习》一文。
NVIDIA Nemotron 3开放资源
开放权重是整体方案的重要组成部分,但并非全部。数据、评估代码和训练方案同样决定了您能够理解、复现和部署哪些内容。NVIDIA Nemotron 3系列提供了开放的模型资源,包括权重、数据和训练方案。您可以访问NVIDIA Nemotron开发者资源,阅读《深入解析NVIDIA Nemotron 3》,并查阅NVIDIA Nemotron代码仓库。
这些资源能让您更好地了解Nemotron的构建和后训练方式、所使用的数据与环境类型,以及您自己的定制化应该在哪些方面有所不同。
前提条件
本教程需要以下条件:
安装了curl和支持版本Python 3的开发环境。
拥有可访问托管训练功能并已配置计费的Prime Intellect账号。
用于访问Prime CLI、环境包、托管模型和适配器部署的网络连接。
大约5至15分钟的时间。
Prime Intellect负责托管推演、训练和推理基础设施,您无需自行管理本地GPU集群。
注意:模型可用性和定价会随时间变化。请以实时CLI目录为准,而非参考静态文章中的标识符或价格。
步骤1:设置工作区
首先,安装Prime CLI,完成身份验证,并创建Prime Intellect Lab工作区:
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"
uv --version
prime --version
prime login
mkdir -p nemotron-customization
cd nemotron-customization
prime lab setup
uv run python --version
Prime Intellect Lab会创建工作区结构并安装验证工具。接下来是耗时较长的评估和训练步骤。
在使用环境之前,先进行检查:
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
检查点:仅当输出中包含nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16,并显示当前训练、输入和输出价格时,才继续进行。
步骤2:评估基准模型
使用以下命令快速获取任务基准,以便在训练后对比模型是否有所提升:
export NANO="nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16"
export MATH_EVAL_ARGS='{"dataset_name":"math","dataset_split":"test","num_train_examples":-1,"max_turns":5,"sandbox_client_max_workers":8}'
export MATH_SAMPLING='{"max_tokens":2048,"temperature":1.0,"extra_body":{"chat_template_kwargs":{"enable_thinking":false}}}'
prime eval run math-python \
--provider prime \
--model "$NANO" \
--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
结果应与以下内容类似,表明模型初始表现较差,准确率相当低:
--- All ---
Rewards: reward: avg - 0.219, std - 0.413
以下是基准模型的一个失败案例,模型在五轮中反复调用不支持的工具,未能给出带方框的答案:
系统提示:所有计算均使用Python完成,将答案填写在\boxed{}中。除Python标准库外,您还可以使用:numpy、sympy、scipy。
用户提问:如果^8=4^x$,x的值是多少?
助手回复:[[空回复]]
奖励是二元的:1表示模型给出了正确答案,0表示模型给出了错误或缺失的答案。
步骤3:配置训练任务
要开始定制Nemotron 3 Nano,首先创建configs/rl/nemotron-3-nano-math-python-100step.toml:
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 }
该配置定义了模型的训练方式。训练器对每个选定任务采样8次尝试,在每个推演组内提供比较信号。4个组构成32个样本的批次,并对本次小规模运行中并发组装的推演数量进行上限控制。
启动训练:
prime train configs/rl/nemotron-3-nano-math-python-100step.toml
Prime会打印解析后的配置、当前价格和环境操作状态,然后请求确认。确认后,CLI返回运行ID和仪表板URL,评估与训练随即继续进行。
检查点:保存运行ID。启动输出应显示Nano模型、已固定版本的Math Python环境、实时定价,以及环境操作检查通过的信息。
步骤4:监控训练过程
仪表板会显示奖励曲线、奖励分布和单次推演详情。CLI也提供相同的信息:
export RUN_ID="<run-id>"
export STEP="<step>"
prime train logs "$RUN_ID" --follow
prime train progress "$RUN_ID"
prime train distributions "$RUN_ID" --type rewards
prime train usage "$RUN_ID" --watch
prime train rollouts "$RUN_ID" --step "$STEP"
prime train checkpoints "$RUN_ID"
在实验时,建议从小幅调整开始。如果每次尝试得到的分数都相同,训练器可获得的信号就很少。接着,检查高、中、低奖励的推演样本,判断得分是否真实反映了更好的数学解题能力。最后,关注Token使用量和截断等因素,确保配置没有干扰训练信号。
奖励曲线告诉我们模型获得了更多还是更少的奖励,而推演样本则帮助我们理解其中的原因。
步骤5:部署并评估定制化模型
训练奖励就像衡量模型在作业上的表现,只有通过考试才算真正检验。
训练成功完成后,Prime Intellect Lab会上传最终的LoRA适配器。确认训练产物已就绪,然后查看其部署状态:
prime deployments list
已就绪但尚未服务的适配器可能显示为NOT_DEPLOYED。请求部署后,其服务状态会从DEPLOYING变为DEPLOYED。
检查点:仅在最终适配器存在且已准备好部署后继续。训练进程完成但没有可用适配器,不是本教程所承诺的交付产物。
您可以从训练仪表板下载适配器。如需通过托管推理进行查询,请部署该适配器:
prime deployments list
prime train checkpoints "$RUN_ID" --status READY
export ADAPTER_ID="<adapter-id>"
export ADAPTED_MODEL="$NANO:$ADAPTER_ID"
prime deployments create "$ADAPTER_ID" --plain
COLUMNS=300 NO_COLOR=1 prime deployments list --plain
部署会创建一个计费的推理端点。状态变为DEPLOYED后,模型标识符将Nano与适配器ID组合:
nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16:<adapter-id>
现在重复基准测试命令,仅更改模型标识符。保持环境、任务数量、推演次数、采样设置和奖励不变,改变更多变量会使对比结果更难解读。
# 仅在适配器报告DEPLOYED后继续
prime eval run math-python \
--provider prime \
--model "$ADAPTED_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
结果应包含以下内容,表明在相同评估配置下,与基准模型相比平均奖励有所提升——这说明我们的模型在该任务上已取得了显著进步:
--- All ---
Rewards: reward: avg - 0.906, std - 0.291
以下是初始模型无法正确求解的同一道题,定制化后的模型给出了正确答案:
系统提示:所有计算均使用Python完成,将答案填写在\boxed{}中。除Python标准库外,您还可以使用:numpy、sympy、scipy。
用户提问:如果^8=4^x$,x的值是多少?
助手工具调用:sp.solve(sp.Eq(2**8, 4**x), x)
助手回复:我们可以用相同的底数改写方程式。
^8 = 4^x \Longrightarrow 2^8 = (2^2)^x = 2^{2x}$
由于底数相等,指数必然相等:
= 2x \Rightarrow x = \frac{8}{2} = 4$
$\boxed{4}$
在相同的32道保留题目上,准确率从21.9%(7/32)提升至90.6%(29/32),绝对提升幅度为68.75个百分点。在基准模型和最终模型结果不同的24道题中,23道得到改善,1道出现退步。此外,Nemotron 3 Nano完成此次任务的总花费不足5美元。
如需移除适配器部署,可执行以下清理命令:
prime deployments delete "$ADAPTER_ID" --plain
如需了解部署状态和兼容OpenAI的推理示例,请参阅Prime Intellect LoRA适配器推理部署指南。
扩展至更大规模的模型
在了解了如何使用Prime Intellect Lab对Nemotron 3 Nano进行短期训练之后,您可能会问:"如果想训练更大的模型,会复杂很多吗?"答案是:完全不会。得益于托管训练的便利性,我们只需修改模型标识符,即可使用完全相同的工作流程。
使用Nemotron 3 Super
再次运行实时目录检查:
prime train models
确认可用性和当前定价,然后将配置文件中的模型行替换为:
model = "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16"
保持相同的实验规范:先建立基准,检查奖励变化,再训练,并在不变设置下重新测试。
使用Nemotron 3 Ultra
Nemotron 3 Ultra是该系列中的高容量选项,Prime Intellect已支持在NVIDIA Blackwell基础设施上对Ultra进行托管强化学习训练。使用以下命令验证您是否有权访问Ultra的托管训练:
prime train models
如果可以看到该模型,将模型行替换为:
model = "nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-NVFP4"
总结
定制化是针对特定用例量身打造AI的关键手段。没有定制化,我们只能使用模型开箱即用的能力,可能为一个更通用的模型支付过高费用,而实际上一个成本更低的模型经过适配就能胜任我们所需的任务。
NVIDIA Nemotron 3等开放模型与Prime Intellect Lab等托管训练平台相结合,使整个定制化流程的启动变得更加简单。其中最有价值的部分,不仅仅是权重可以获取或基础设施已经托管,而是整个改进循环都可以被检验和重复。
如需入门资源,请访问Nemotron开发者页面。在Hugging Face上探索Nemotron开放模型和数据集,在build.nvidia.com上查看蓝图方案。
欢迎通过NVIDIA论坛和Discord上的Nemotron频道参与Nemotron直播、教程及开发者社区交流。
订阅NVIDIA新闻,并在LinkedIn、X、Discord和YouTube上关注NVIDIA AI,获取NVIDIA Nemotron的最新动态。
Q&A
Q1:RLVR(可验证奖励强化学习)在Nemotron 3 Nano定制化中是如何工作的?
A:RLVR的核心思路是让模型在特定环境中反复尝试任务,并根据结果获得奖励信号。在本教程中,模型使用Python工具解答数学题,每次推演最多5轮对话。奖励是二元的:给出正确答案得1分,答案错误或缺失得0分。训练器对每道题采样8次尝试,通过组内比较信号引导模型学习,最终使准确率从21.9%提升至90.6%。
Q2:Prime Intellect Lab托管训练和本地训练有什么区别?
A:使用Prime Intellect Lab托管训练,开发者无需自行管理GPU集群或配置复杂的训练基础设施。平台负责处理推演、训练和推理的全部基础设施,用户只需在本地安装Prime CLI(约5分钟),编写配置文件并提交任务即可。相比之下,本地训练需要自行准备GPU资源、搭建训练环境,技术门槛和硬件成本都更高。
Q3:LoRA适配器是什么?训练完成后如何使用?
A:LoRA(低秩适配)是一种参数高效微调技术,训练时只更新少量额外参数,而非修改原始模型的全部权重。训练完成后,Prime Intellect Lab会自动上传最终的LoRA适配器。用户可以通过`prime deployments create`命令将其部署为推理端点,使用时以`原始模型名称:适配器ID`的格式调用定制化后的模型,也可以直接从训练仪表板下载适配器文件。
