本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
RFT 評估
什麼是 RFT 評估?
RFT 評估可讓您在強化學習訓練之前、期間或之後,使用自訂獎勵函數評估模型的效能。與使用預先定義指標的標準評估不同,RFT 評估可讓您透過 Lambda 函數定義自己的成功條件,該函數會根據您的特定需求對模型輸出進行評分。
為什麼使用 RFT 評估 ?
評估對於判斷 RL 微調程序是否具有下列項目至關重要:
-
改善模型與特定使用案例和人力值的一致性
-
維護或改善關鍵任務的模型功能
-
避免意外的副作用,例如事實性降低、詳細程度增加或其他任務的效能降低
-
符合獎勵函數定義的自訂成功條件
何時使用 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>
預設獎勵函數
來自開放原始碼 verl 程式庫的兩個預設獎勵函數 (prime_code 和 prime_math) 可作為 Lambda 層使用,以便與您的 RFT Lambda 函數輕鬆整合。
概觀
這些預設函數提供out-of-the-box評估功能:
-
prime_code– 程式碼產生和正確性評估 -
prime_math– 數學推理和問題解決評估
快速設定
-
從 nova-custom-eval-sdk 版本
下載 Lambda layer。 -
使用 AWS 命令列界面 () 發佈 Lambda 層AWS 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 -
在 AWS 管理主控台中將圖層新增至 Lambda 函數 (從自訂圖層選取preset-function-layer,並針對凹凸相依性新增 AWSSDKPandas-Python312)。
-
在 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–「指標」(用於報告) 或「獎勵」(用於訓練)
-
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 訓練期間使用的指標
-
解譯:較高的值通常表示效能更好 (除非您設計反向指標)
效能基準
什麼構成「良好」效能取決於您的使用案例:
| 分數範圍 | 解譯 | Action |
|---|---|---|
| 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 的 IAM 許可 → Lambda 調用
-
檢閱 CloudWatch 日誌是否有 Lambda 錯誤
-
驗證 Lambda 回應符合預期的格式
最佳實務
-
啟動簡單:從基本獎勵函數開始並反覆運算
-
分別測試 Lambda:在完整評估之前使用 Lambda 測試事件
-
在小型資料集上驗證:在完整資料集之前對子集執行評估
-
版本控制:追蹤獎勵函數版本與模型版本
-
監控成本:Lambda 調用和運算時間會影響成本
-
Log Extensively:使用 Lambda 中的列印陳述式進行偵錯
-
適當設定逾時:在耐心與成本之間取得平衡
-
文件指標:明確定義每個指標的指標
後續步驟
完成 RFT 評估後:
-
如果結果令人滿意:將模型部署到生產環境
-
如果需要改進:
-
調整獎勵函數
-
收集更多訓練資料
-
修改訓練超參數
-
執行額外的 RFT 訓練反覆運算
-
-
持續監控:使用新資料定期重新評估