本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon Nova 型号进行加固微调 (RFT)
概述
什么是 RFT?
强化微调 (RFT) 通过训练反馈信号(可衡量的分数或表示模型表现的奖励)而不是精确的正确答案来提高模型性能。与从输入输出对中学习的监督微调不同,RFT 使用奖励函数来评估模型响应,并迭代优化模型以最大限度地提高这些奖励。当定义准确的正确输出具有挑战性时,这种方法非常出色,但您可以可靠地测量响应质量。
何时使用 RFT
当您可以定义清晰、可衡量的成功标准,但难以为培训提供准确正确的输出时,请使用 RFT。它非常适合:
-
质量是主观或多方面的任务(创意写作、代码优化、复杂推理)
-
有多种有效解决方案的场景,其中一些解决方案明显优于其他解决方案
-
需要迭代改进、个性化或遵守复杂业务规则的应用程序
-
收集带有标签的高质量样本昂贵或不切实际的情况
最佳用例
在可以客观测量输出质量但很难预先定义最佳响应的领域,RFT 表现出色:
-
数学问题解决和代码生成
-
科学推理和结构化数据分析
-
需要 step-by-step推理或多轮解决问题的任务
-
平衡多个目标(准确性、效率、风格)的应用程序
-
可以通过执行结果或性能指标以编程方式验证成功的场景
支持的模型
新星精简版 2.0
数据格式概述
RFT 训练数据必须遵循 OpenAI 强化微调格式。
-
包含对话轮流使用
system和user角色的messages数组 -
包含预期产出或奖励计算评估标准的
reference_answer字段
目前的局限性
-
仅文本
数据格式示例
每个示例都应在 JSONL 文件中的一行上,每行一个 JSON 对象。
该reference_answer字段包含您的奖励函数用来对模型的响应进行评分的预期输出或评估标准。它不仅限于结构化输出,还可以包含任何有助于您的奖励功能评估质量的格式。
数据集大小建议
起点
-
至少 100 个训练示例
-
至少 100 个评估示例
评价为先的方法
在投资大规模 RFT 训练之前,请评估模型的基线性能:
-
高性能(> 95% 的奖励)— 可能没必要 RFT — 你的模型已经表现不错了
-
表现非常差(奖励为0%)— 首先切换到SFT以建立基本能力
-
性能适中 — RFT 可能是合适的
从一个小数据集开始,您可以:
-
验证你的奖励功能没有错误
-
确认 RFT 是适合您的用例的方法
-
尽早发现并修复问题
-
在扩大规模之前测试工作流程
经过验证后,您可以扩展到更大的数据集以进一步提高性能。
有效训练数据的特征
清晰度和一致性
好的RFT示例需要清晰、明确的输入数据,以便能够对不同的模型输出进行准确的奖励计算。避免数据中的噪音,包括:
-
格式不一致
-
相互矛盾的标签或说明
-
提示含糊不清
-
相互矛盾的参考答案
任何歧义都会误导训练过程并导致模型学习意外行为。
多样性
您的数据集应捕获各种各样的生产用例,以确保强大的现实世界性能。Include:
-
不同的输入格式和边缘情况
-
根据日志和用户分析绘制实际生产使用模式
-
按用户类型、地理区域和季节变化进行采样
-
包括从简单到复杂问题的难度级别
奖励功能注意事项
设计奖励功能以实现高效训练:
-
在几秒钟内执行(不是几分钟)
-
使用 Lambda 进行有效的并行化
-
返回一致、可靠的分数
-
优雅地处理不同类型的模型输出
快速、可扩展的奖励功能可实现快速迭代和具有成本效益的实验。
其它属性
RFT 数据格式支持超出核心架构要求的自定义字段(messages和reference_answer)。这种灵活性使您可以添加奖励功能所需的任何其他数据,以进行适当的评估。
注意
您无需在配方中对此进行配置——数据格式本质上支持其他字段。只需将它们包含在您的训练数据 JSON 中,它们就会传递给您的metadata现场奖励函数。
常见的附加属性
元数据字段示例:
-
task_id— 用于跟踪的唯一标识符 -
difficulty_level— 问题复杂度指标 -
domain— 主题领域或类别 -
expected_reasoning_steps— 解决方案中的步骤数
带有其他属性的示例
{ "messages": [ { "role": "system", "content": "You are a math tutor" }, { "role": "user", "content": "Solve: 2x + 5 = 13" } ], "reference_answer": { "solution": "x = 4", "steps": ["2x = 13 - 5", "2x = 8", "x = 4"] }, "task_id": "algebra_001", "difficulty_level": "easy", "domain": "algebra", "expected_reasoning_steps": 3 }
这些额外字段将在评估期间传递给您的奖励函数,从而实现针对您的特定用例量身定制的复杂评分逻辑。
训练配置
示例食谱
# Note: # This recipe can run on p5.48xlarge and p5en.48xlarge instance types. run: name: "my-rft-run" # Unique run name (appears in logs/artifacts). model_type: amazon.nova-2-lite-v1:0:256k model_name_or_path: nova-lite-2/prod data_s3_path: s3://<bucket>/<data file> # Training dataset in JSONL; replicas: 4 reward_lambda_arn: "" ## SMTJ GRPO Training specific configs training_config: max_length: 8192 # Context window (tokens) for inputs+prompt; global_batch_size: 16 # Total samples per optimizer step across all replicas (16/32/64/128/256). reasoning_effort: high # Enables reasoning mode high / low / or null for non-reasoning rollout: # How responses are generated for GRPO/advantage calc. advantage_strategy: number_generation: 2 # N samples per prompt to estimate advantages (variance vs cost). generator: max_new_tokens: 6000 # Cap on tokens generated per sample set_random_seed: true # Seed generation for reproducibility across runs. temperature: 1 # Softmax temperature; top_k: 1 # Sample only from top-K logits rewards: preset_reward_function: null # Usage of reward functions built into Verl [exact_match, code_executions, math_answers] api_endpoint: lambda_arn: "" lambda_concurrency_limit: 12 # Max concurrent Lambda invocations (throughput vs. throttling). trainer: max_steps: 2 # Steps to train for. One Step = global_batch_size save_steps: 5 test_steps: 1 save_top_k: 5 # RL parameters ent_coeff: 0.0 # A bonus added to the policy loss that rewards higher-output entropy. kl_loss_coef: 0.001 # Weight on the KL penalty between the actor (trainable policy) and a frozen reference model optim_config: # Optimizer settings lr: 7e-7 # Learning rate weight_decay: 0.0 # L2 regularization strength (0.0–1.0) adam_beta1: 0.9 adam_beta2: 0.95 peft: # Parameter-efficient fine-tuning (LoRA) peft_scheme: "lora" # Enable LoRA for PEFT lora_tuning: alpha: 32 lora_plus_lr_ratio: 64.0 # LoRA+ learning rate scaling factor (0.0–100.0)
使用法学硕士作为评委进行RFT培训
概述
大型语言模型 (LLMs) 越来越多地被用作强化微调 (RFT) 工作流程中的评判,它提供了指导模型优化的自动奖励信号。在这种方法中,法学硕士根据指定的标准(无论是评估正确性、质量、风格依从性还是语义等效性)评估模型输出,并分配推动强化学习过程的奖励。
这对于难以以编程方式定义传统奖励函数的任务特别有价值,例如确定不同的表示形式(例如 “1/3”、“0.333” 和 “三分之一”)在语义上是否相同,或者评估连贯性和相关性等细微差别的品质。通过使用基于LLM的评委作为奖励函数,您可以将RFT扩展到复杂的领域,而无需大量的人工注释,从而可以在不同的用例中快速迭代和持续改进模型,而不仅仅是传统的对齐问题。
推理模式选择
可用模式
-
无 — 没有推理(省略 reasing_efforts 字段)
-
low — 最小的推理开销
-
high — 最大推理能力(指定 reasing_effort 时为默认值)
注意
RFT 没有中等选项。如果您的配置中没有 reasing_effort 字段,则会禁用推理。启用推理后,应设置为 32768 max_new_tokens 以适应扩展推理输出。
何时使用每种模式
使用高度推理来实现:
-
复杂的分析任务
-
解决数学问题
-
多步逻辑推导
-
step-by-step思考可以增加价值的任务
使用 none(省略 reasining_effort)或低推理:
-
简单的事实查询
-
直接分类
-
速度和成本优化
-
直截了当的问题回答
成本和性能权衡取舍
更高的推理模式会增加:
-
培训时间和成本
-
推理延迟和成本
-
复杂推理任务的模型能力
验证你的法学硕士评委
在生产环境 LLM-as-a-judge中部署之前,请验证评判模型的评估是否与人类判断一致。这涉及:
-
衡量法学硕士评委和人工评估人员之间对你的任务的代表性样本的同意率
-
确保法学硕士与人类的协议达到或超过人与人之间的协议率
-
识别评判模型中的潜在偏差
-
树立信心,即奖励信号会引导您的模型朝着预期的方向前进
此验证步骤有助于确保自动评估过程能够生成符合您的生产质量标准的模型。
法学硕士评委的 Lambda 配置
使用法学硕士作为评委是使用 Lambda 函数进行具有可验证奖励的强化学习 (RLVR) 的延伸。在 Lambda 函数中,您可以调用 Amazon Bedrock 中托管的其中一个模型。
重要的配置要求:
| 配置 | 要求 | Details |
|---|---|---|
| Amazon 基岩吞吐量 | 配额充足 | 确保所使用的 Amazon Bedrock 模型的吞吐量配额足以应付您的训练工作负载 |
| Lambda 超时 | 超时时间延长 | 将您的 Lambda 函数超时配置为最长 15 分钟。默认设置为 3 秒,这对于亚马逊 Bedrock 模型的响应来说是不够的 |
| Lambda 并发 | 提高并发度 | Lambda 在训练期间会并行调用。增加并发以最大限度地提高可用吞吐量 |
| 配方配置 | 匹配 Lambda 设置 | 必须在您的配方中配置并发限制 |
创建和运行作业
开始训练作业
使用 SageMaker AI Training Job 笔记本模板:https://docs.amazonaws.cn/sagemaker/latest/dg/nova-fine-tuning-training-job.html#nova-model-training-jobs-notebook
实例要求
该容器同时支持全等级和 LoRa 训练:
-
LoRa 训练 — 2/4/6/8 × p5.48xlarge 或 p5en.48xlarge 实例
-
完整等级训练 — 2/4/6/8 × p5.48xlarge 实例(必填)
监控训练
训练日志包括每个步骤的全面指标。关键指标类别:
奖励指标
-
critic/rewards/mean,critic/rewards/max,critic/rewards/min— 奖励分配 -
val-score/rewards/mean@1— 验证奖励
模型行为
-
actor/entropy— 政策差异(越高 = 探索性越强)
训练健康
-
actor/pg_loss— 保单梯度损失 -
actor/pg_clipfrac— 剪辑更新的频率 -
actor/grad_norm— 梯度幅度
响应特征
-
prompt_length/mean,prompt_length/max,prompt_length/min— 输入代币统计信息 -
response_length/mean,response_length/max,response_length/min— 输出代币统计信息 -
response/aborted_ratio— 未完成生成率(0 = 全部完成)
性能
-
perf/throughput— 训练吞吐量 -
perf/time_per_step— 每个训练步骤的时间 -
timing_per_token_ms/*— 每个令牌的处理时间
资源使用情况
-
perf/max_memory_allocated_gb,perf/max_memory_reserved_gb— GPU 内存 -
perf/cpu_memory_used_gb— CPU 内存
使用经过微调的模型
训练完成后,最终的模型检查点将保存到您指定的输出位置。检查点路径可在以下版本中找到:
-
训练日志
-
manifest.json文件存储在输出 Amazon S3 位置(由您的笔记本output_s3_uri中定义)
限制和最佳实践
限制
-
Lambda 超时 — 奖励功能必须在 15 分钟内完成(防止流程失控并管理成本)
-
仅限单回合 — 不支持多回合对话
-
数据要求 — 需要足够的多样性;为奖励稀少而苦苦挣扎(<5%的正面例子)
-
计算成本 — 比监督微调更昂贵
-
没有多模态数据-仅支持文本数据类型
最佳实践
从小处着手
-
从 100-200 个示例开始
-
验证奖励功能的正确性
-
根据结果逐步扩大规模
训练前评估
-
在 RFT 之前测试基准模型性能
-
如果奖励始终为0%,请先使用SFT来建立基本能力
-
如果奖励大于 95%,则可能没有必要 RFT
监控训练
-
跟踪平均奖励分数和分配
-
注意是否过度拟合(训练奖励增加,而验证奖励减少)
-
寻找相关的模式:
-
奖励停留在 0.15 以下
-
随着时间的推移,奖励差异越来越大
-
验证性能下降
-
优化奖励功能
-
在几秒钟内执行(不是几分钟)
-
尽量减少外部 API 调用
-
使用高效的算法
-
实施正确的错误处理
-
利用 Lambda 的并行扩展
迭代策略
如果奖励没有改善:
-
调整奖励功能设计
-
增加数据集的多样性
-
添加更多具有代表性的示例
-
验证奖励信号是否清晰一致
高级能力:Nova Forge
对于需要超出标准 RFT 限制的高级功能的用户,Nova Forge 可作为付费订阅服务提供,提供:
-
多回合对话支持
-
执行时间 >15 分钟的奖励函数
-
其他算法和调整选项
-
自定义训练配方修改
-
State-of-the-art 人工智能技术
Nova Forge 基于 SageMaker 人工智能 HyperPod 运行,旨在支持企业客户构建自己的前沿模型。
有用的命令和提示
可观测性脚本
可用的脚本有:
-
为培训作业状态更新启用电子邮件通知
-
根据作业配置获取训练时间估算值
-
获取正在进行的工作预计培训需要多长时间的近似值
安装
注意
在使用以下任何脚本之前,请务必刷新您的Amazon凭据。
pip install boto3 git clone https://github.com/aws-samples/amazon-nova-samples.git cd amazon-nova-samples/customization/SageMakerUilts/SageMakerJobsMonitoring/
基本用法
# Enabling email notifications for training job status updates python enable_sagemaker_job_notifs.py --email test@amazon.com test2@gmail.com --region us-east-1 --platform SMTJ Creating resources........ Please check your email for a subscription confirmation email, and click 'Confirm subscription' to start receiving job status email notifications! You'll receive the confirmation email within a few minutes.
# Obtaining training time estimates based on job configurations python get_training_time_estimate.py
# Obtaining approximations for how long training is expected to take for in-progress jobs python get-training-job-progress.py --region us-east-1 --job-name my-training-job --num-dataset-samples 1000
有关更多详细信息和示例,请参阅此处