模型定制化能够让开发者将通用模型调整适配到特定用例、领域和语言等场景。

然而,定制化过程面临诸多挑战:需要相应的基础设施、技术专业知识以及特定工作流程所需的软件,还需要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`的格式调用定制化后的模型,也可以直接从训练仪表板下载适配器文件。

NVIDIA