RFT 评测
什么是 RFT 评测?
RFT 评测支持您在强化学习微调的训练前、训练中及训练后,通过自定义奖励函数评测模型性能。与采用预定义指标的标准评测不同,RFT 评测支持通过 Lambda 函数自定义成功标准,并依据您的具体需求对模型输出进行评分。
为什么要使用 RFT 进行评测?
评测对于判断强化微调过程是否实现以下目标至关重要:
-
提升模型与您特定使用案例及人类价值偏好的对齐程度
-
维持或提升模型在核心任务上的能力
-
避免产生非预期副作用,例如事实准确性下降、内容冗余度增加或其他任务性能退化
-
满足由奖励函数定义的自定义成功标准
何时使用 RFT 评测
在以下场景中使用 RFT 评测:
-
RFT 训练之前:在评测数据集上建立基线指标
-
RFT 训练期间:使用中间检查点监控训练进度
-
RFT 训练之后:验证最终模型是否符合您的要求
-
模型对比:采用一致的奖励标准对多个模型版本进行评测
注意
如需领域专属的自定义评估指标,请使用 RFT 评测。对于通用评测(准确率、困惑度、BLEU),请使用标准评测方法。
数据格式要求
输入数据结构
RFT 评测输入数据必须遵循 OpenAI 强化微调格式。每个样本都是一个 JSON 对象,其中包含:
-
messages:包含system和user角色的对话轮次数组 -
reference_answer:奖励函数用于评分的预期输出或真实值数据
数据格式示例
{ "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Solve for x. Return only JSON like {\"x\": <number>}. Equation: 2x + 5 = 13" } ] } ], "reference_answer": { "x": 4 } }
目前的局限性
-
纯文本模式:不支持多模态输入(图像、音频、视频)
-
单轮对话:仅支持单条用户消息(不支持多轮对话)
-
JSON 格式:输入数据必须为 JSONL 格式(每行一个 JSON 对象)
-
模型输出:根据指定模型生成的补全进行评测
准备评测配方
示例笔记本
有关完整示例,请参阅评测笔记本。
示例配方配置
run: name: nova-lite-rft-eval-job model_type: amazon.nova-lite-v1:0:300k model_name_or_path: s3://escrow_bucket/model_location # [MODIFIABLE] S3 path to your model or model identifier replicas: 1 # [MODIFIABLE] For SageMaker Training jobs only; fixed for HyperPod jobs data_s3_path: "" # [REQUIRED FOR HYPERPOD] Leave empty for SageMaker Training jobs and use TrainingInput in sagemaker python SDK output_s3_path: "" # [REQUIRED] Output artifact S3 path for evaluation results evaluation: task: rft_eval # [FIXED] Do not modify strategy: rft_eval # [FIXED] Do not modify metric: all # [FIXED] Do not modify # Inference Configuration inference: max_new_tokens: 8192 # [MODIFIABLE] Maximum tokens to generate top_k: -1 # [MODIFIABLE] Top-k sampling parameter top_p: 1.0 # [MODIFIABLE] Nucleus sampling parameter temperature: 0 # [MODIFIABLE] Sampling temperature (0 = deterministic) top_logprobs: 0 # [MODIFIABLE] Set between 1-20 to enable logprobs output # ============================================================================= # Bring Your Own Reinforcement Learning Environment # ============================================================================= rl_env: reward_lambda_arn: arn:aws:lambda:<region>:<account_id>:function:<reward-function-name>
预设奖励函数
两个预设的奖励函数(prime_code 和 prime_math)可用作 Lambda 层,以便与 RFT Lambda 函数集成。
概述
这些预设函数提供开箱即用的评测能力,适用于:
-
prime_code:代码生成和正确性评测 -
prime_math:数学推理和问题求解评测
快速设置
-
从 nova-custom-eval-sdk 版本
页面下载 Lambda 层。 -
使用 AWS 命令行界面(AWS CLI)发布 Lambda 层:
aws lambda publish-layer-version \ --layer-name preset-function-layer \ --description "Preset reward function layer with dependencies" \ --zip-file fileb://universal_reward_layer.zip \ --compatible-runtimes python3.9 python3.10 python3.11 python3.12 \ --compatible-architectures x86_64 arm64 -
在 AWS 管理控制台中将该层添加到 Lambda 函数(从自定义层中选择 preset-function-layer,并添加 AWSSDKPandas-Python312 以获取 numpy 依赖项)。
-
在 Lambda 代码中导入并使用:
from prime_code import compute_score # For code evaluation from prime_math import compute_score # For math evaluation
prime_code 函数
通过针对测试用例执行代码并衡量正确性来评测 Python 代码生成任务。
输入数据集格式示例
{"messages":[{"role":"user","content":"Write a function that returns the sum of two numbers."}],"reference_answer":{"inputs":["3\n5","10\n-2","0\n0"],"outputs":["8","8","0"]}} {"messages":[{"role":"user","content":"Write a function to check if a number is even."}],"reference_answer":{"inputs":["4","7","0","-2"],"outputs":["True","False","True","True"]}}
主要特征
-
从 Markdown 代码块中自动提取代码
-
函数检测与基于调用的测试
-
带超时保护的测试用例执行
-
语法验证与编译检查
-
包含回溯信息的详细错误报告
prime_math 函数
依托符号计算能力,评测模型的数学推理与问题求解水平。
输入格式
{"messages":[{"role":"user","content":"What is the derivative of x^2 + 3x?."}],"reference_answer":"2*x + 3"}
主要特征
-
使用 SymPy 进行符号计算评测
-
支持多种答案格式(LaTeX、纯文本、符号)
-
数学等价性检查
-
表达式归一化与化简
数据格式要求
评测代码
-
输入:函数参数数组(类型正确:整数、字符串等)
-
输出:预期返回值数组(类型正确:布尔值、数字等)
-
代码:必须使用 Python 编写,并包含清晰的函数定义
数学评测
-
参考答案:数学表达式或数值
-
响应:可为 LaTeX、纯文本或符号表达式
-
等效:通过符号方式检查,而不仅仅是字符串匹配
最佳实践
-
在测试用例中使用正确的数据类型(整数与字符串、布尔值与 True)
-
在代码问题中提供清晰的函数签名
-
在测试输入中包括边缘情况(零、负数、空输入)
-
在参考答案中统一设置数学表达式的格式
-
在部署前使用样本数据测试奖励函数
错误处理
这两个函数都包含针对以下情况的强大错误处理能力:
-
生成的代码中存在编译错误
-
执行过程中出现运行时异常
-
输入数据格式错误
-
超时场景无限循环
-
数学表达式无效
创建奖励函数
Lambda ARN 要求
Lambda ARN 必须采用以下格式:
"arn:aws:lambda:*:*:function:*SageMaker*"
如果 Lambda 不遵循此命名方案,作业将失败并显示以下错误:
[ERROR] Unexpected error: lambda_arn must contain one of: ['SageMaker', 'sagemaker', 'Sagemaker'] when running on SMHP platform (Key: lambda_arn)
Lambda 请求格式
Lambda 函数接收以下格式的数据:
[ { "id": "sample-001", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Do you have a dedicated security team?" } ] }, { "role": "nova_assistant", "content": [ { "type": "text", "text": "As an AI developed by Company, I don't have a dedicated security team..." } ] } ], "reference_answer": { "compliant": "No", "explanation": "As an AI developed by Company, I do not have a traditional security team..." } } ]
注意
消息结构包含嵌套的 content 数组,与输入数据格式相匹配。角色为 nova_assistant 的最后一条消息包含模型生成的响应。
Lambda 响应格式
Lambda 函数必须按以下格式返回数据:
[ { "id": "sample-001", "aggregate_reward_score": 0.75, "metrics_list": [ { "name": "accuracy", "value": 0.85, "type": "Metric" }, { "name": "fluency", "value": 0.90, "type": "Reward" } ] } ]
响应字段
-
id:必须与输入样本 ID 匹配 -
aggregate_reward_score:总体得分(通常为 0.0 到 1.0) -
metrics_list:各项指标组成的数组,包含以下字段:-
name:指标标识符(例如 accuracy、fluency) -
value:指标得分(通常为 0.0 到 1.0) -
type:Metric(用于报告)或 Reward(用于训练)
-
IAM 权限
所需的权限
SageMaker 执行角色必须具备调用 Lambda 函数的权限。将此策略添加到 SageMaker 执行角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:region:account-id:function:function-name" } ] }
Lambda 执行角色
Lambda 函数的执行角色需要基本的 Lambda 执行权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" } ] }
如果 Lambda 函数访问其他 AWS 服务(例如用于参考数据的 S3、用于日志记录的 DynamoDB),请将这些权限添加到 Lambda 执行角色。
执行评测作业
-
准备数据 – 根据数据格式要求格式化评测数据,并将 JSONL 文件上传到 S3:
s3://your-bucket/eval-data/eval_data.jsonl -
配置配方 – 使用您的配置更新示例配方:
-
将
model_name_or_path设置为模型路径 -
将
lambda_arn设置为奖励函数 ARN -
将
output_s3_path设置为目标输出位置 -
根据需要调整
inference参数
将配方另存为
rft_eval_recipe.yaml -
-
运行评测 – 使用提供的笔记本执行评测工作:评测笔记本
-
监控进度 – 通过以下方式监控评测作业:
-
SageMaker 控制台:检查作业状态与日志
-
CloudWatch Logs:查看详细执行日志
-
Lambda 日志:调试奖励函数相关问题
-
了解评测结果
输出格式
评测作业会以 JSONL 格式将结果输出到指定的 S3 位置。每行包含一个样本的评测结果:
{ "id": "sample-001", "aggregate_reward_score": 0.75, "metrics_list": [ { "name": "accuracy", "value": 0.85, "type": "Metric" }, { "name": "fluency", "value": 0.90, "type": "Reward" } ] }
注意
RFT 评测作业输出格式与 Lambda 响应格式完全一致。评测服务会原样透传 Lambda 函数的响应,确保奖励计算结果与最终输出保持一致。
解析结果
奖励总分
-
取值范围:通常为 0.0(最差)到 1.0(最佳),具体取决于实现逻辑
-
用途:以单一数值概括整体性能
-
应用场景:模型对比、跟踪训练过程中的效果提升
各项指标
-
指标类型:用于分析的参考性指标
-
奖励类型:RFT 训练过程中使用的指标
-
结果解读:数值越高通常表示性能越好(除非设计了反向指标)
性能基准
何种表现为“良好”取决于实际使用案例:
| 分数区间 | 评估结果 | 处理建议 |
|---|---|---|
| 0.8 – 1.0 | 优秀 | 模型可直接部署 |
| 0.6 – 0.8 | 良好 | 可进行小幅优化 |
| 0.4 – 0.6 | 一般 | 需大幅优化提升 |
| 0.0 – 0.4 | 较差 | 检查训练数据和奖励函数 |
重要
以上仅为通用准则。请根据业务需求、基线模型性能、领域特定约束以及进一步训练的成本效益分析,自行定义阈值。
问题排查
常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Lambda 超时 | 奖励计算复杂 | 延长 Lambda 超时时间或优化函数逻辑 |
| 权限被拒绝 | 缺少 IAM 权限 | 验证 SageMaker 角色是否可调用 Lambda |
| 评分不一致 | 非确定性奖励函数 | 使用固定种子或确定性逻辑 |
| 结果缺失 | Lambda 错误未被捕获 | 在 Lambda 中添加完善的错误处理机制 |
调试检查清单
-
验证输入数据格式是否正确(带有嵌套的内容数组)
-
确认 Lambda ARN 正确且函数已部署
-
检查 SageMaker → Lambda 调用的 IAM 权限
-
查看 CloudWatch 日志中的 Lambda 错误
-
验证 Lambda 响应符合预期格式
最佳实践
-
从简入手:先实现基础奖励函数,再逐步迭代优化
-
单独测试 Lambda:全面评测前先使用 Lambda 测试事件
-
小规模数据集验证:完整数据集评测前,先对数据子集执行评测
-
版本控制:同步追踪奖励函数与模型版本
-
成本监控:Lambda 调用次数与计算时长会影响成本
-
全面日志记录:在 Lambda 中使用打印语句便于调试
-
合理设置超时:在执行时长与成本之间取得平衡
-
指标文档化:明确定义各项指标的衡量标准
后续步骤
完成 RFT 评测后:
-
如果结果令人满意:将模型部署到生产环境
-
如果需要改进:
-
调整奖励函数
-
收集更多训练数据
-
修改训练超参数
-
运行额外的 RFT 训练迭代
-
-
持续监控:定期使用新数据重新评测