RFT 評估 - Amazon SageMaker AI

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

RFT 評估

什麼是 RFT 評估?

RFT 評估可讓您在強化學習訓練之前、期間或之後,使用自訂獎勵函數評估模型的效能。與使用預先定義指標的標準評估不同,RFT 評估可讓您透過 Lambda 函數定義自己的成功條件,該函數會根據您的特定需求對模型輸出進行評分。

為什麼使用 RFT 評估 ?

評估對於判斷 RL 微調程序是否具有下列項目至關重要:

  • 改善模型與特定使用案例和人力值的一致性

  • 維護或改善關鍵任務的模型功能

  • 避免意外的副作用,例如事實性降低、詳細程度增加或其他任務的效能降低

  • 符合獎勵函數定義的自訂成功條件

何時使用 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>

預設獎勵函數

來自開放原始碼 verl 程式庫的兩個預設獎勵函數 (prime_codeprime_math) 可作為 Lambda 層使用,以便與您的 RFT Lambda 函數輕鬆整合。

概觀

這些預設函數提供out-of-the-box評估功能:

  • prime_code – 程式碼產生和正確性評估

  • prime_math – 數學推理和問題解決評估

快速設定

  1. nova-custom-eval-sdk 版本下載 Lambda layer。

  2. 使用 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
  3. 在 AWS 管理主控台中將圖層新增至 Lambda 函數 (從自訂圖層選取preset-function-layer,並針對凹凸相依性新增 AWSSDKPandas-Python312)。

  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 –「指標」(用於報告) 或「獎勵」(用於訓練)

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 訓練期間使用的指標

  • 解譯:較高的值通常表示效能更好 (除非您設計反向指標)

效能基準

什麼構成「良好」效能取決於您的使用案例:

分數範圍 解譯 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 訓練反覆運算

  • 持續監控:使用新資料定期重新評估