View a markdown version of this page

RFT 评测 - Amazon Nova

RFT 评测

什么是 RFT 评测?

RFT 评测支持您在强化学习微调的训练前、训练中及训练后,通过自定义奖励函数评测模型性能。与采用预定义指标的标准评测不同,RFT 评测支持通过 Lambda 函数自定义成功标准,并依据您的具体需求对模型输出进行评分。

为什么要使用 RFT 进行评测?

评测对于判断强化微调过程是否实现以下目标至关重要:

  • 提升模型与您特定使用案例及人类价值偏好的对齐程度

  • 维持或提升模型在核心任务上的能力

  • 避免产生非预期副作用,例如事实准确性下降、内容冗余度增加或其他任务性能退化

  • 满足由奖励函数定义的自定义成功标准

何时使用 RFT 评测

在以下场景中使用 RFT 评测:

  • RFT 训练之前:在评测数据集上建立基线指标

  • RFT 训练期间:使用中间检查点监控训练进度

  • RFT 训练之后:验证最终模型是否符合您的要求

  • 模型对比:采用一致的奖励标准对多个模型版本进行评测

注意

如需领域专属的自定义评估指标,请使用 RFT 评测。对于通用评测(准确率、困惑度、BLEU),请使用标准评测方法。

数据格式要求

输入数据结构

RFT 评测输入数据必须遵循 OpenAI 强化微调格式。每个样本都是一个 JSON 对象,其中包含:

  • messages:包含 systemuser 角色的对话轮次数组

  • 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_codeprime_math)可用作 Lambda 层,以便与 RFT Lambda 函数集成。

概述

这些预设函数提供开箱即用的评测能力,适用于:

  • prime_code:代码生成和正确性评测

  • prime_math:数学推理和问题求解评测

快速设置

  1. nova-custom-eval-sdk 版本页面下载 Lambda 层。

  2. 使用 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
  3. 在 AWS 管理控制台中将该层添加到 Lambda 函数(从自定义层中选择 preset-function-layer,并添加 AWSSDKPandas-Python312 以获取 numpy 依赖项)。

  4. 在 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 执行角色。

执行评测作业

  1. 准备数据 – 根据数据格式要求格式化评测数据,并将 JSONL 文件上传到 S3:s3://your-bucket/eval-data/eval_data.jsonl

  2. 配置配方 – 使用您的配置更新示例配方:

    • model_name_or_path 设置为模型路径

    • lambda_arn 设置为奖励函数 ARN

    • output_s3_path 设置为目标输出位置

    • 根据需要调整 inference 参数

    将配方另存为 rft_eval_recipe.yaml

  3. 运行评测 – 使用提供的笔记本执行评测工作:评测笔记本

  4. 监控进度 – 通过以下方式监控评测作业:

    • 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 训练迭代

  • 持续监控:定期使用新数据重新评测