本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
进行评估和解释结果
执行评估作业
第 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:运行评估
使用提供的笔记本执行评估作业:评估笔记本
评估容器
708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-evaluation-repo:SM-TJ-Eval-V2-latest
步骤 4:监控进度
通过以下方式监控您的评估工作:
-
SageMaker 控制台:检查任务状态和日志
-
CloudWatch 日志:查看详细的执行日志
-
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 训练期间使用的指标
-
解释:值越高通常表示性能越好(除非您设计反向指标)
性能基准
什么构成 “良好” 性能取决于您的用例:
| 分数范围 | 口译 | Action |
|---|---|---|
| 0.8-1.0 | 太棒了 | 模型已准备好部署 |
| 0.6-0.8 | 好 | 稍微的改进可能会有好处 |
| 0.4-0.6 | 一般 | 需要重大改进 |
| 0.0-0.4 | 可怜的 | 查看训练数据和奖励功能 |
重要
这些是一般指导方针。根据以下内容定义自己的阈值:
-
业务需求
-
基准模型性能
-
特定于域的限制
-
继续培训的成本效益分析
分析结果
计算汇总统计数据
import json import numpy as np scores = [] with open('evaluation_results.jsonl', 'r') as f: for line in f: result = json.loads(line) scores.append(result['aggregate_reward_score']) print(f"Mean: {np.mean(scores):.3f}") print(f"Median: {np.median(scores):.3f}") print(f"Std Dev: {np.std(scores):.3f}") print(f"Min: {np.min(scores):.3f}") print(f"Max: {np.max(scores):.3f}")
-
识别失败案例:查看分数较低的样本以了解弱点
-
比较指标:分析不同指标之间的相关性以确定权衡取舍
-
随时间推移的跟踪:比较不同训练迭代的评估结果
问题排查
常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Lambda 超时 | 复杂的奖励计算 | 增加 Lambda 超时时间或优化函数 |
| 权限被拒绝 | 缺少 IAM 权限 | 验证 SageMaker 角色是否可以调用 Lambda |
| 分数不一致 | 非确定性奖励函数 | 使用固定种子或确定性逻辑 |
| 缺少结果 | 未捕获 Lambda 错误 | 在 Lambda 中添加全面的错误处理功能 |
调试清单
-
使用嵌套内容数组验证输入数据是否遵循正确的格式
-
确认 Lambda ARN 正确且函数已部署
-
检查 IAM 权限以获取 SageMaker → Lambda 调用
-
查看 CloudWatch 日志中是否有 Lambda 错误
-
验证 Lambda 响应是否符合预期的格式
最佳实践
-
从简单开始:从基本的奖励功能开始,然后迭代
-
单独测试 Lambda:在进行全面评估之前使用 Lambda 测试事件
-
对小型数据集进行验证:在完整数据集之前对子集进行评估
-
版本控制:跟踪奖励功能版本和模型版本
-
监控成本:Lambda 调用和计算时间会影响成本
-
广泛记录:在 Lambda 中使用打印语句进行调试
-
适当设置超时:在耐心和成本之间取得平衡
-
文档指标:明确定义每个指标的衡量标准
后续步骤
完成 RFT 评估后:
-
如果结果令人满意:将模型部署到生产环境
-
如果需要改进:
-
调整奖励功能
-
收集更多训练数据
-
修改训练超参数
-
运行其他 RFT 训练迭代
-
-
持续监控:定期使用新数据重新评估
预设奖励功能
来自开源 verl 库的两个预设奖励函数(prime_code、prime_math)在 Lambda 层中可用
概述
这些预设函数为以下各项提供了 out-of-the-box评估功能:
-
prime_code — 代码生成和正确性评估
-
prime_math — 数学推理和问题解决评估
快速设置
-
使用以下方法发布 Lambda 层:Amazon CLI
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 -
将该层添加到您的 Lambda 函数中Amazon Web Services 管理控制台( preset-function-layer从自定义层中选择,还要为 numpy 依赖项添加 AWSSDKPandas-Python 312)
-
导入并在您的 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、纯文本、符号)
-
数学等效性检查
-
表达式规范化和简化
数据格式要求
用于代码评估
-
In puts — 函数参数数组(正确的类型:整数、字符串等)
-
输出-预期返回值数组(正确的类型:布尔值、数字等)
-
代码 — 必须使用 Python 并具有清晰的函数定义
用于数学评估
-
参考答案-数学表达式或数值
-
响应-可以是 LaTe X、纯文本或符号表示法
-
等价性 — 以符号方式检查,而不仅仅是字符串匹配
最佳实践
-
在测试用例中使用正确的数据类型(整数与字符串、布尔值与 “True”)
-
在代码问题中提供清晰的函数签名
-
在测试输入中包括边缘情况(零、负数、空输入)
-
在参考答案中统一设置数学表达式的格式
-
部署前使用示例数据测试您的奖励功能
错误处理
这两个函数都包含强大的错误处理功能,可用于:
-
生成的代码中存在编译错误
-
执行期间的运行时异常
-
输入数据格式错误
-
无限循环的超时场景
-
无效的数学表达式