

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

# RFT 評估
<a name="nova-rft-evaluation"></a>

## 什麼是 RFT 評估？
<a name="nova-rft-eval-what-is"></a>

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

## 為什麼使用 RFT 評估 ？
<a name="nova-rft-eval-why"></a>

評估對於判斷 RL 微調程序是否具有下列項目至關重要：
+ 改善模型與特定使用案例和人力值的一致性
+ 維護或改善關鍵任務的模型功能
+ 避免意外的副作用，例如事實性降低、詳細程度增加或其他任務的效能降低
+ 符合獎勵函數定義的自訂成功條件

## 何時使用 RFT 評估
<a name="nova-rft-eval-when"></a>

在這些案例中使用 RFT 評估：
+ RFT 訓練之前：在您的評估資料集上建立基準指標
+ 在 RFT 訓練期間：使用中繼檢查點監控訓練進度
+ RFT 訓練後：驗證最終模型是否符合您的需求
+ 比較模型：使用一致的獎勵條件評估多個模型版本

**注意**  
當您需要自訂的網域特定指標時，請使用 RFT 評估。對於一般用途評估 （準確性、複雜度、BLEU)，請使用標準評估方法。

## 資料格式要求
<a name="nova-rft-eval-data-format"></a>

### 輸入資料結構
<a name="nova-rft-eval-input-structure"></a>

RFT 評估輸入資料必須遵循 OpenAI 強化微調格式。每個範例都是 JSON 物件，其中包含：
+ `messages` – 具有 `system`和 `user`角色的對話轉場陣列
+ `reference_answer` – 獎勵函數用於評分的預期輸出或 Ground Truth 資料

### 資料格式範例
<a name="nova-rft-eval-data-example"></a>

```
{  
  "messages": [  
    {  
      "role": "user",  
      "content": [  
        {  
          "type": "text",  
          "text": "Solve for x. Return only JSON like {\"x\": <number>}. Equation: 2x + 5 = 13"  
        }  
      ]  
    }  
  ],  
  "reference_answer": {  
    "x": 4  
  }  
}
```

### 目前限制
<a name="nova-rft-eval-limitations"></a>
+ 僅限文字：不支援多模態輸入 （影像、音訊、視訊）
+ 單轉對話：僅支援單一使用者訊息 （無多轉對話）
+ JSON 格式：輸入資料必須是 JSONL 格式 （每行一個 JSON 物件）
+ 模型輸出：在從指定模型產生的完成時執行評估

## 準備您的評估配方
<a name="nova-rft-eval-recipe"></a>

### 範例筆記本
<a name="nova-rft-eval-sample-notebook"></a>

如需完整範例，請參閱[評估筆記本](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-model-evaluation.html#nova-model-evaluation-notebook)。

### 範例配方組態
<a name="nova-rft-eval-sample-recipe"></a>

```
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>
```

## 預設獎勵函數
<a name="nova-rft-eval-preset-functions"></a>

兩個預設獎勵函數 (`prime_code` 和 `prime_math`) 可作為 Lambda 層使用，以便與您的 RFT Lambda 函數輕鬆整合。

### 概觀
<a name="nova-rft-eval-preset-overview"></a>

這些預設函數提供out-of-the-box評估功能：
+ `prime_code` – 程式碼產生和正確性評估
+ `prime_math` – 數學推理和問題解決評估

### 快速設定
<a name="nova-rft-eval-preset-setup"></a>

1. 從 [nova-custom-eval-sdk 版本](https://github.com/aws/nova-custom-eval-sdk/releases)下載 Lambda layer。

1. 使用 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
   ```

1. 在 AWS 管理主控台中將 layer 新增至 Lambda 函數 （從自訂 layer 選取 preset-function-layer，並針對凹凸相依性新增 AWSSDKPandas-Python312)。

1. 在 Lambda 程式碼中匯入和使用 ：

   ```
   from prime_code import compute_score  # For code evaluation
   from prime_math import compute_score  # For math evaluation
   ```

### prime\_code 函數
<a name="nova-rft-eval-preset-code"></a>

對測試案例執行程式碼並測量正確性，藉此評估 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 函數
<a name="nova-rft-eval-preset-math"></a>

使用符號數學支援評估數學推理和問題解決功能。

**輸入格式**

```
{"messages":[{"role":"user","content":"What is the derivative of x^2 + 3x?."}],"reference_answer":"2*x + 3"}
```

**主要功能**
+ 使用 SymPy 的符號數學評估
+ 多重答案格式 (LaTeX、純文字、符號）
+ 數學相等性檢查
+ 表達式標準化和簡化

### 資料格式要求
<a name="nova-rft-eval-preset-data-format"></a>

**用於程式碼評估**
+ 輸入：函數引數陣列 （屬性類型：整數、字串等）
+ 輸出：預期傳回值的陣列 （屬性類型：布林值、數字等）
+ 程式碼：必須是具有清晰函數定義的 Python

**用於數學評估**
+ 參考答案：數學表達式或數值
+ 回應：可以是 LaTeX、純文字或符號表示法
+ 對等：以符號方式檢查，而不只是字串比對

### 最佳實務
<a name="nova-rft-eval-preset-best-practices"></a>
+ 在測試案例中使用適當的資料類型 （整數與字串、布林值與 "True")
+ 在程式碼問題中提供明確的函數簽章
+ 在測試輸入中包含邊緣案例 （零、負數、空輸入）
+ 在參考答案中一致地格式化數學表達式
+ 在部署之前，使用範例資料測試獎勵函數

### 錯誤處理
<a name="nova-rft-eval-preset-error-handling"></a>

這兩個函數都包含強大的錯誤處理功能：
+ 產生的程式碼中的編譯錯誤
+ 執行期間的執行時間例外狀況
+ 格式不正確的輸入資料
+ 無限迴圈的逾時案例
+ 無效的數學表達式

## 建立獎勵函數
<a name="nova-rft-eval-custom-reward"></a>

### Lambda ARN 要求
<a name="nova-rft-eval-lambda-arn"></a>

您的 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 請求格式
<a name="nova-rft-eval-lambda-request"></a>

您的 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 回應格式
<a name="nova-rft-eval-lambda-response"></a>

您的 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 許可
<a name="nova-rft-eval-iam"></a>

### 所需的許可
<a name="nova-rft-eval-iam-required"></a>

您的 SageMaker 執行角色必須具有叫用 Lambda 函數的許可。將此政策新增至 SageMaker 執行角色：

```
{  
  "Version": "2012-10-17",		 	 	   
  "Statement": [  
    {  
      "Effect": "Allow",  
      "Action": [  
        "lambda:InvokeFunction"  
      ],  
      "Resource": "arn:aws:lambda:region:account-id:function:function-name"  
    }  
  ]  
}
```

### Lambda 執行角色
<a name="nova-rft-eval-iam-lambda"></a>

您的 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 執行角色。

## 執行評估任務
<a name="nova-rft-eval-execute"></a>

1. **準備您的資料** – 根據資料格式要求格式化評估資料，並將您的 JSONL 檔案上傳至 S3： `s3://your-bucket/eval-data/eval_data.jsonl`

1. **設定您的配方** – 使用您的組態更新範例配方：
   + `model_name_or_path` 設定為您的模型位置
   + `lambda_arn` 設定為您的獎勵函數 ARN
   + `output_s3_path` 設定為您想要的輸出位置
   + 視需要調整`inference`參數

   將配方儲存為 `rft_eval_recipe.yaml`

1. **執行評估** – 使用提供的筆記本執行評估任務：[評估筆記本](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-model-evaluation.html#nova-model-evaluation-notebook)

1. **監控進度** – 透過下列方式監控您的評估任務：
   + SageMaker 主控台：檢查任務狀態和日誌
   + CloudWatch Logs：檢視詳細的執行日誌
   + Lambda 日誌：偵錯獎勵函數問題

## 了解評估結果
<a name="nova-rft-eval-results"></a>

### 輸出格式
<a name="nova-rft-eval-output-format"></a>

評估任務會以 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 函數的回應，確保獎勵計算與最終結果之間的一致性。

### 解譯結果
<a name="nova-rft-eval-interpret"></a>

**彙總獎勵分數**
+ 範圍：通常為 0.0 （最差） 到 1.0 （最佳），但取決於您的實作
+ 目的：總結整體效能的單一數字
+ 用量：比較模型，追蹤訓練的改善

**個別指標**
+ 指標類型：分析的資訊指標
+ 獎勵類型：RFT 訓練期間使用的指標
+ 解譯：較高的值通常表示效能更好 （除非您設計反向指標）

### 效能基準
<a name="nova-rft-eval-benchmarks"></a>

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


| 分數範圍 | 解譯 | Action | 
| --- | --- | --- | 
| 0.8 - 1.0 | 卓越 | 模型已準備好進行部署 | 
| 0.6 - 0.8 | 好 | 次要改善可能有益 | 
| 0.4 - 0.6 | 公平 | 需要大幅改善 | 
| 0.0 - 0.4 | 不佳 | 檢閱訓練資料和獎勵函數 | 

**重要**  
這些是一般準則。根據業務需求、基準模型效能、領域特定限制，以及進一步訓練的成本利益分析，定義您自己的閾值。

## 疑難排解
<a name="nova-rft-eval-troubleshooting"></a>

### 常見問題
<a name="nova-rft-eval-common-issues"></a>


| 問題 | 原因 | 解決方案 | 
| --- | --- | --- | 
| Lambda 逾時 | 複雜的獎勵計算 | 增加 Lambda 逾時或最佳化函數 | 
| 許可遭拒 | 缺少 IAM 許可 | 驗證 SageMaker 角色可以叫用 Lambda | 
| 不一致的分數 | 非確定性獎勵函數 | 使用固定種子或確定性邏輯 | 
| 缺少結果 | 未攔截 Lambda 錯誤 | 在 Lambda 中新增全面的錯誤處理 | 

### 除錯檢查清單
<a name="nova-rft-eval-debug-checklist"></a>
+ 使用巢狀內容陣列，確認輸入資料遵循正確的格式
+ 確認 Lambda ARN 正確且函數已部署
+ 檢查 SageMaker 的 IAM 許可 → Lambda 調用
+ 檢閱 CloudWatch 日誌是否有 Lambda 錯誤
+ 驗證 Lambda 回應符合預期的格式

## 最佳實務
<a name="nova-rft-eval-best-practices-section"></a>
+ 啟動簡單：從基本獎勵函數開始並反覆運算
+ 分別測試 Lambda：在完整評估之前使用 Lambda 測試事件
+ 在小型資料集上驗證：在完整資料集之前對子集執行評估
+ 版本控制：追蹤獎勵函數版本與模型版本
+ 監控成本：Lambda 調用和運算時間會影響成本
+ Log Extensively：使用 Lambda 中的列印陳述式進行偵錯
+ 適當設定逾時：在耐心與成本之間取得平衡
+ 文件指標：明確定義每個指標的指標

## 後續步驟
<a name="nova-rft-eval-next-steps"></a>

完成 RFT 評估後：
+ 如果結果令人滿意：將模型部署到生產環境
+ 如果需要改進：
  + 調整獎勵函數
  + 收集更多訓練資料
  + 修改訓練超參數
  + 執行額外的 RFT 訓練反覆運算
+ 持續監控：使用新資料定期重新評估