

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

# 使用 Amazon Nova 模型強化微調 (RFT)
<a name="nova-reinforcement-fine-tuning"></a>

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

**什麼是 RFT？**

強化微調 (RFT) 透過訓練意見回饋訊號來改善模型效能，這些訊號是可測量的分數或獎勵，指出模型的效能，而不是確切的正確答案。與從輸入輸出對中學習的監督式微調 (SFT) 不同，RFT 使用獎勵函數來評估模型回應，並反覆最佳化模型以最大化這些獎勵。此方法在定義確切的正確輸出具有挑戰性時表現卓越，但您可以可靠地測量回應品質。

**何時使用 RFT**

當您可以定義清晰、可衡量的成功條件，但難以提供確切正確的訓練輸出時，請使用 RFT。RFT 非常適合：
+ 品質是主觀或多面向的任務 （創造性寫入、程式碼最佳化、複雜推理）
+ 具有多個有效解決方案的案例，其中有些解決方案明顯優於其他解決方案
+ 需要反覆改進、個人化或遵守複雜業務規則的應用程式
+ 收集高品質標籤範例昂貴或不切實際的案例

**最佳使用案例**

RFT 在可以客觀測量輸出品質，但難以預先定義最佳回應的網域中表現卓越：
+ 數學問題解決和程式碼產生
+ 科學推理和結構化資料分析
+ 需要step-by-step推理或多迴轉問題解決的任務
+ 應用程式平衡多個目標 （準確性、效率、風格）
+ 可透過執行結果或效能指標以程式設計方式驗證成功的案例

**支援的模型**

Nova Lite 2.0

## 資料格式概觀
<a name="nova-rft-data-format"></a>

RFT 訓練資料必須遵循 OpenAI 強化微調[格式](https://platform.openai.com/docs/api-reference/fine-tuning/reinforcement-input)。每個訓練範例都是 JSON 物件，其中包含：
+ 使用 `system`和 `user`角色進行對話輪換的`messages`陣列
+ `reference_answer` 包含預期輸出或評估條件的欄位，以進行獎勵計算

**目前限制**
+ 僅文字

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

每個範例應該位於 JSONL 檔案中的單一行上，每行一個 JSON 物件。

------
#### [ Chemistry problem ]

```
{
  "id": "chem-01",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful chemistry assistant"
    },
    {
      "role": "user",
      "content": "Calculate the molecular weight of caffeine (C8H10N4O2)"
    }
  ],
  "reference_answer": {
    "molecular_weight": 194.19,
    "unit": "g/mol",
    "calculation": "8(12.01) + 10(1.008) + 4(14.01) + 2(16.00) = 194.19"
  }
}
```

------
#### [ Math problem ]

```
{
  "id": "sample-001",  // Optional
  "messages": [
    {
      "role": "system",
      "content": "You are a math tutor"
    },
    {
      "role": "user",
      "content": "Solve: 2x + 5 = 13"
    }
  ],
  "reference_answer": {
    "solution": "x = 4",
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]
  }
}
```

------
#### [ Code problem ]

```
{
  "id": "code-002",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful programming assistant"
    },
    {
      "role": "user",
      "content": "Write a Python function that reverses a string without using built-in reverse methods"
    }
  ],
  "reference_answer": {
    "code": "def reverse_string(s):  \n    result = ''  \n    for i in range(len(s) - 1, -1, -1):  \n        result += s[i]  \n    return result",
    "test_cases": [
      {
        "input": "hello",
        "expected_output": "olleh"
      },
      {
        "input": "",
        "expected_output": ""
      },
      {
        "input": "a",
        "expected_output": "a"
      },
      {
        "input": "Python123",
        "expected_output": "321nohtyP"
      }
    ],
    "all_tests_pass": true
  }
}
```

------

`reference_answer` 欄位包含預期輸出或評估條件，您的獎勵函數會用來對模型的回應進行評分。它不限於結構化輸出，它可以包含任何格式，協助您的獎勵函數評估品質。

## 資料集大小建議
<a name="nova-rft-dataset-size"></a>

**起點**
+ 最少 100 個訓練範例
+ 最少 100 個評估範例

**評估優先方法**

投資大規模 RFT 訓練之前，請評估模型的基準效能：
+ **高效能 (>95% 獎勵）** – RFT 可能不必要，您的模型已表現良好
+ **效能非常差 (0% 獎勵）** – 首先切換到 SFT 以建立基本功能
+ **中等效能** – RFT 可能是適當的

從小型資料集開始，您可以：
+ 驗證您的獎勵函數沒有錯誤
+ 確認 RFT 是適合您使用案例的正確方法
+ 及早識別和修正問題
+ 在向上擴展之前測試工作流程

驗證後，您可以擴展到更大的資料集，以進一步改善效能。

## 有效訓練資料的特性
<a name="nova-rft-effective-data"></a>

**清晰度和一致性**

良好的 RFT 範例需要清晰、不明確的輸入資料，以便在不同的模型輸出間進行準確的獎勵計算。避免資料中的雜訊，包括：
+ 不一致的格式
+ 矛盾的標籤或指示
+ 模棱兩可的提示
+ 衝突的參考答案

任何模棱兩可的情況都會誤導訓練程序，並導致模型學習非預期的行為。

**多樣性**

您的資料集應擷取生產使用案例的完整多樣性，以確保強大的實際效能。包括：
+ 不同的輸入格式和邊緣案例
+ 從日誌和使用者分析映射實際的生產使用模式
+ 跨使用者類型、地理區域和季節性變化的範例
+ 包含從簡單到複雜問題的難度等級

**獎勵函數考量事項**

設計您的獎勵函數以進行高效訓練：
+ 在幾秒鐘內執行 （非分鐘）
+ 使用 Lambda 有效平行化
+ 傳回一致、可靠的分數
+ 正常處理不同類型的模型輸出

快速、可擴展的獎勵函數可實現快速迭代和經濟實惠的實驗。

## 其他屬性
<a name="nova-rft-additional-properties"></a>

RFT 資料格式支援核心結構描述需求之外的自訂欄位 (`messages` 和 `reference_answer`)。此彈性可讓您新增獎勵函數進行適當評估所需的任何其他資料。

**注意**  
您不需要在配方中設定 - 資料格式本質上支援其他欄位。只要將它們包含在訓練資料 JSON 中，它們就會在 `metadata` 欄位中傳遞給您的獎勵函數。

**常見的其他屬性**

中繼資料欄位範例：
+ `task_id` – 用於追蹤的唯一識別符
+ `difficulty_level` – 問題複雜性指標
+ `domain` – 主題區域或類別
+ `expected_reasoning_steps` – 解決方案中的步驟數量

**具有其他屬性的範例**

```
{
  "messages": [
    {
      "role": "system",
      "content": "You are a math tutor"
    },
    {
      "role": "user",
      "content": "Solve: 2x + 5 = 13"
    }
  ],
  "reference_answer": {
    "solution": "x = 4",
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]
  },
  "task_id": "algebra_001",
  "difficulty_level": "easy",
  "domain": "algebra",
  "expected_reasoning_steps": 3
}
```

這些額外的欄位會在評估期間傳遞給您的獎勵函數，以根據您的特定使用案例量身打造複雜的評分邏輯。

## 訓練組態
<a name="nova-rft-training-config"></a>

**範例配方**

```
# Note:
# This recipe can run on p5.48xlarge, p5e.48xlarge, and p5en.48xlarge instance types.
run:
  name: "my-rft-run"                           # Unique run name (appears in logs and artifacts).
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  data_s3_path: s3://<bucket>/<data-file>      # Training dataset in JSONL format.
  replicas: 4                                   # Number of total training instances.
  generation_replicas: 2                        # Number of total instances dedicated to response generation.
  reward_lambda_arn: arn:aws:lambda:<region>:<account-id>:function:<function-name>

  ## MLFlow configs
  mlflow_tracking_uri: "" # Required for MLFlow
  mlflow_experiment_name: "my-rft-experiment" # Optional for MLFlow. Note: leave this field non-empty
  mlflow_run_name: "my-rft-run" # Optional for MLFlow. Note: leave this field non-empty

## SMTJ RFT training configs
training_config:
  max_length: 8192                              # Context window (tokens) for inputs and prompt.
  global_batch_size: 32                         # Total samples per optimizer step across all replicas (16/32/64/128/256).
  reasoning_effort: high                        # Reasoning mode: high, low, or null for non-reasoning.

  data:
    shuffle: true                               # Shuffle training data each epoch.

  rollout:                                      # Controls how responses are generated for advantage calculation.
    rollout_strategy:
      type: off_policy_async                    # Asynchronous rollout for higher throughput.
      age_tolerance: 2                          # Maximum policy age before regeneration.
    advantage_strategy:
      number_generation: 4                      # Samples per prompt to estimate advantages (higher = lower variance but higher cost).
    generator:
      max_new_tokens: 6000                      # Cap on tokens generated per sample.
      set_random_seed: true                     # Seed generation for reproducibility across runs.
      temperature: 1                            # Softmax temperature for sampling.
    rewards:
      preset_reward_function: null              # Preset reward functions: exact_match or null for custom.
      api_endpoint:
        lambda_arn: arn:aws:lambda:<region>:<account-id>:function:<function-name>
        lambda_concurrency_limit: 12             # Max concurrent Lambda invocations (throughput vs. throttling).
        lambda_batch_size: 128                  # Number of samples per Lambda invocation.

  trainer:
    max_steps: 2                                # Steps to train for. One step = global_batch_size samples.
    save_steps: 5                               # Save a checkpoint every N steps.
    test_steps: 1                               # Run validation every N reference model updates.
    refit_freq: 4                               # Frequency of reference model updates.
    clip_ratio_high: 0.2                        # PPO clip ratio for policy updates.
    loss_scale: 1.0                             # Scaling factor for the policy loss.

    # RL parameters
    ent_coeff: 0.0                              # Entropy bonus added to the policy loss (higher = more exploration).
    kl_loss_coef: 0.0                           # Weight on the KL penalty between the current and reference policy.

    optim_config:                               # Optimizer settings.
        lr: 1e-6                                # Learning rate.
        weight_decay: 0.0                       # L2 regularization strength (0.0 to 1.0).
        adam_beta1: 0.9
        adam_beta2: 0.95

    peft:                                       # Parameter-efficient fine-tuning (LoRA).
        peft_scheme: "lora"                     # Enable LoRA for PEFT.
        lora_tuning:
            alpha: 64                           # LoRA scaling factor.
            lora_plus_lr_ratio: 64.0            # LoRA+ learning rate scaling factor (0.0 to 100.0).
```

## 使用 LLM 做為判斷的 RFT 訓練
<a name="nova-rft-llm-judge"></a>

### 概觀
<a name="nova-rft-llm-judge-overview"></a>

大型語言模型 LLMs) 在強化微調 (RFT) 工作流程中逐漸被用作判斷，提供引導模型最佳化的自動獎勵訊號。在此方法中，LLM 會根據指定的條件評估模型輸出，無論是評估正確性、品質、風格遵循或語意相等性，並指派推動強化學習程序的獎勵。

這對於傳統獎勵函數難以以程式設計方式定義的任務特別有用，例如判斷不同的表示法 （例如 "1/3"、"0.333" 和 "1/3") 是否在語義上相等，或評估一致性和相關性等細微品質。透過使用以 LLM 為基礎的判斷做為獎勵函數，您可以將 RFT 擴展到複雜的網域，而不需要大量的人工註釋，因此除了傳統對齊問題之外，可在各種使用案例中快速迭代和持續改善模型。

### 合理模式選擇
<a name="nova-rft-reasoning-mode"></a>

**可用模式**
+ none – 無推理 （省略 reasoning\_effort 欄位）
+ 低 - 最低推理開銷
+ 高 – 最大推理功能 （指定 reasoning\_effort 時預設為預設值）

**注意**  
RFT 沒有媒體選項。如果組態中沒有 reasoning\_effort 欄位，則會停用推理。啟用推理時，您應該將 `max_new_tokens`設定為 32768，以容納延伸推理輸出。

**何時使用每個模式**

使用高推理：
+ 複雜的分析任務
+ 數學問題解決
+ 多步驟邏輯扣除
+ step-by-step思考可增加價值的任務

不使用 （省略 reasoning\_effort) 或低推理：
+ 簡單事實查詢
+ 直接分類
+ 速度和成本最佳化
+ 直接的問答

**成本和效能權衡**

較高的推理模式會增加：
+ 訓練時間和成本
+ 推論延遲和成本
+ 複雜推理任務的模型功能

### 驗證您的 LLM 判斷
<a name="nova-rft-validating-judge"></a>

在生產環境中部署 LLM-as-a-judge 之前，請驗證判斷模型的評估是否符合人類判斷。這包括：
+ 針對任務的代表性範例，測量 LLM 判斷者與人工評估者之間的協議率
+ 確保 LLM 與人類的協議符合或超過人際協議費率
+ 識別判斷模型中的潛在偏差
+ 建立獎勵訊號引導模型朝預期方向的可信度

此驗證步驟有助於確保自動化評估程序會產生符合您生產品質標準的模型。

### LLM 判斷的 Lambda 組態
<a name="nova-rft-lambda-config"></a>

使用 LLM 做為判斷，是使用 Lambda 函數進行強化學習與可驗證獎勵 (RLVR) 的延伸。在 Lambda 函數中，您可以呼叫 Amazon Bedrock 中託管的其中一個模型。

**重要組態需求：**


| Configuration | 需求 | 詳細資訊 | 
| --- | --- | --- | 
| Amazon Bedrock 輸送量 | 足夠的配額 | 確保所使用的 Amazon Bedrock 模型的輸送量配額足以滿足您的訓練工作負載 | 
| Lambda 逾時 | 延長逾時 | 設定 Lambda 函數逾時，最長可達 15 分鐘。預設設定為 3 秒，這不足以回應 Amazon Bedrock 模型 | 
| Lambda 並行 | 增加並行 | Lambda 會在訓練期間平行叫用。增加並行以最大化可用輸送量 | 
| 配方組態 | 比對 Lambda 設定 | 必須在配方中設定並行限制 | 

## 建立和執行任務
<a name="nova-rft-creating-jobs"></a>

**啟動訓練任務**

使用 SageMaker 訓練任務筆記本範本： [https://docs.aws.amazon.com/sagemaker/latest/dg/nova-fine-tuning-training-job.html#nova-model-training-jobs-notebook](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-fine-tuning-training-job.html#nova-model-training-jobs-notebook)

**執行個體需求**

容器同時支援 Full-Rank 和 LoRA 訓練：
+ **LoRA 訓練** – 2/4/6/8 × p5.48xlarge 或 p5en.48xlarge 執行個體
+ **全執行訓練** – 2/4/6/8 × p5.48xlarge 執行個體 （必要）

## 監控訓練
<a name="nova-rft-monitoring"></a>

訓練日誌包含每個步驟的全方位指標。金鑰指標類別：

**獎勵指標**
+ `critic/rewards/mean`、`critic/rewards/max`、 `critic/rewards/min` – 獎勵分佈
+ `val-score/rewards/mean@1` – 驗證獎勵

**模型行為**
+ `actor/entropy` – 政策變化 （較高 = 更探索性）

**訓練運作狀態**
+ `actor/pg_loss` – 政策梯度損失
+ `actor/pg_clipfrac` – 剪輯更新的頻率
+ `actor/grad_norm` – 漸層大小

**回應特性**
+ `prompt_length/mean`、`prompt_length/max`、 `prompt_length/min` – 輸入字符統計資料
+ `response_length/mean`、`response_length/max`、 `response_length/min` – 輸出字符統計資料
+ `response/aborted_ratio` – 產生率不完整 (0 = 全部完成）

**效能**
+ `perf/throughput` – 訓練輸送量
+ `perf/time_per_step` – 每個訓練步驟的時間
+ `timing_per_token_ms/*` – 每個金鑰的處理時間

**資源用量**
+ `perf/max_memory_allocated_gb`、 `perf/max_memory_reserved_gb` – GPU 記憶體
+ `perf/cpu_memory_used_gb` – CPU 記憶體

## 使用微調的模型
<a name="nova-rft-using-models"></a>

訓練完成後，最終模型檢查點會儲存到您指定的輸出位置。檢查點路徑可用於：
+ 訓練日誌
+ `manifest.json` 輸出 Amazon S3 位置中的 檔案 （由 在您的筆記本`output_s3_uri`中定義）

## 限制和最佳實務
<a name="nova-rft-limitations"></a>

**限制**
+ **Lambda 逾時** – 獎勵函數必須在 15 分鐘內完成 （防止失控程序和管理成本）
+ **僅限單轉** – 不支援多轉對話
+ **資料需求** – 需要足夠的多樣性；難以獲得稀疏獎勵 (<5% 正面範例）
+ **運算成本** – 比監督式微調更昂貴
+ **無多模態資料** – 僅支援文字資料類型

**最佳實務**

**從小開始**
+ 從 100-200 個範例開始
+ 驗證獎勵函數正確性
+ 根據結果逐步擴展

**訓練前評估**
+ RFT 之前的測試基準模型效能
+ 如果獎勵持續為 0%，請先使用 SFT 建立基本功能
+ 如果獎勵 >95%，RFT 可能不必要

**監控訓練**
+ 追蹤平均獎勵分數和分佈
+ 注意過度擬合 （訓練獎勵增加，同時驗證獎勵減少）
+ 尋找相關的模式：
  + 獎勵穩定低於 0.15
  + 隨時間增加獎勵差異
  + 降低驗證效能

**最佳化獎勵函數**
+ 在幾秒鐘內執行 （非分鐘）
+ 將外部 API 呼叫降至最低
+ 使用有效率的演算法
+ 實作適當的錯誤處理
+ 利用 Lambda 的平行擴展

**反覆運算策略**

如果獎勵未改善：
+ 調整獎勵函數設計
+ 增加資料集多樣性
+ 新增更多代表性範例
+ 驗證獎勵訊號是否清晰且一致

## 自適應課程學習
<a name="nova-rft-adaptive-curriculum"></a>

自適應課程學習是一項選用功能，可動態選取要在 RFT 期間向模型呈現的訓練提示。訓練人員會使用模型本身來預測提示困難，並在生產困難範圍內選取提示，而不是對所有提示進行統一訓練，因為模型有時會成功，有時會失敗。這可最大限度地提高每個 GRPO 推展群組中結果的差異，透過減少來自過簡單或過硬提示的雜訊梯度更新，產生更高的優勢訊號、更快收斂並改善 RL 訓練穩定性。

### 自適應課程的運作方式
<a name="nova-rft-adaptive-curriculum-how"></a>

啟用自適應課程時，訓練迴圈會在每個推展步驟之前新增預測和選擇階段：

1. **預測** — 模型會使用少量的預測格式，預測每個候選提示的通過率 （或獎勵分散）。上一個訓練步驟的三個範例 （一個簡單、一個中、一個硬式） 提供校正內容。

1. **選擇** — 依其預測難度與選擇目標的接近程度來排名提示 （預設值：50% 通過率）。最佳提示已核准推展；其餘提示會捨棄，而不會耗用推展運算。

1. **訓練** — 標準 GRPO 訓練會繼續執行選取的提示。

1. **意見回饋** - 推展的實際傳遞率會與預測進行比較。選擇目標會自動校正，以更正系統性預測偏差。REINFORCE 梯度會訓練預測器，以改善未來的預測。

### 何時使用自適應課程
<a name="nova-rft-adaptive-curriculum-when"></a>

在下列案例中，適應性課程最有效：
+ 您想要透過確保每個訓練批次包含具有有意義的獎勵差異的提示來改善 RL 訓練穩定性，以減少可取消穩定學習的雜訊梯度更新。
+ 您已確認基本 RFT 可改善您的目標指標。
+ 您想要將訓練運算專注於最具生產力的提示，以加速收斂。
+ 您的資料集很大 (5，000\+ 個提示），其中包含生產力困難範圍之外的許多提示，否則會浪費運算。

### 設定自適應課程
<a name="nova-rft-adaptive-curriculum-config"></a>

在配方`trainer`中新增 下的 `adaptive_curriculum` 區塊，以啟用自適應課程學習：

```
training_config:
  trainer:
    adaptive_curriculum:
      enable: true                               # Enable adaptive curriculum prompt selection.
      selection_pool_multiplier: 8               # Score 8 x global_batch_size candidates, keep best global_batch_size.
      prediction_mode: pass_rate                 # "pass_rate" for discrete rewards; "spread" for continuous rewards.
      exemplar_history_steps: 1                  # Previous training steps kept in the rolling exemplar history buffer.
      reinforce_coef: 0.01                       # Scale factor for the REINFORCE loss that trains the predictor (0 disables).
      predictor_prompt_column: predictor_prompt  # Dataset field with clean problem text used by the predictor.
      selection_lookahead_steps: 4               # Future training batches pre-approved per curriculum screening pass.
```

下表說明每個自適應課程參數：


| 參數 | Type | 預設 | 說明 | 
| --- | --- | --- | --- | 
| enable | Boolean | false | 是否啟用自適應課程提示選取。 | 
| selection\_pool\_multiplier | 整數 (1–32) | 8 | 控制相對於訓練批次大小的候選提示分數。值為 8 表示會評分 8 個global\_batch\_size提示，並global\_batch\_size選取最佳。值越高，選擇品質越好，但推論運算成本越高。 | 
| prediction\_mode | String | pass\_rate | 用於提示難度估算的預測模式。pass\_rate 用於離散獎勵任務 （例如正確性檢查），其中預測器估計正確回答的機率。spread 用於持續獎勵任務，其中預測器預估跨推展分佈的最大/最小獎勵。 | 
| exemplar\_history\_steps | 整數 ( ≥1) | 1 | 用於範例選取之滾動歷史記錄緩衝區中要保留的先前訓練步驟數目。預測器會使用此歷史記錄中的範例來校正其少量的預測。 | 
| reinforce\_coef | 數字 (≥0) | 0.01 | 訓練傳遞速率預測器之 REINFORCE 遺失的縮放係數。這可讓閉環學習，其中預測器會在訓練過程中改善其準確性。設為 0 可停用預測器訓練。 | 
| predictor\_prompt\_column | String | predictor\_prompt | 資料集中的欄位名稱，其中包含用作預測器提示的乾淨問題文字。這應該是問題的簡潔版本，無需系統提示或格式化，因此預測器可以快速評估難度。 | 
| selection\_lookahead\_steps | 整數 (1–16) | 4 | 每個步驟在單一課程篩選通過中預先核准的未來訓練批次數量。每個傳遞會為每個步驟計算selection\_pool\_multiplier × global\_batch\_size候選項目分數；較高的selection\_lookahead\_steps重複值會傳遞多次，以建立已核准提示的佇列，從而減少短提示資料集上的每個步驟預測器額外負荷。對於預測器本身昂貴的長內容資料集 （請參閱建議區段），請將此設定為 1，讓預測器每個步驟只會執行一次。 | 

### 長內容資料集的建議
<a name="nova-rft-adaptive-curriculum-long-context"></a>

自適應課程的運作方式是在候選提示集區上執行輕量傳遞速率預測器，並選取要推展的最有生產力批次。當 `max_prompt_length` 很短 （數千個權杖或更少） 時，預測器會在每次篩選通過數秒內執行，而且課程額外負荷可忽略。當提示長度增加時，預測器推論時間大約會四分之一 （注意序列長度為 O(n2))，因此篩選可以在提示超過大約 8，000 個字符的資料集上主導步進時間。

**注意**  
`max_prompt_length` 最多支援 32，768 個字符 (32K) 的自適應課程。不支援在超過此長度的資料集上啟用它；在訓練之前停用適應性課程或縮短提示。

下列設定可在長內容資料集上保持適應性課程的可用性和成本效益。將它們一起套用；它們解決了篩選成本的不同元件。


| 典型 `max_prompt_length` | 建議的自適應課程設定 | 
| --- | --- | 
| 高達 8K 權杖 | 使用預設值：selection\_pool\_multiplier: 8、selection\_lookahead\_steps: 4。篩選開銷很小，不需要調校。 | 
| 超過 8K 和高達 16K 權杖 | 設定 selection\_lookahead\_steps: 2。這將每個步驟通過的預測器數量減半，同時在佇列中保留足夠的預先核准提示，以避免推展匱乏。 | 
| 超過 16K 和高達 24K 權杖 | 保持 selection\_lookahead\_steps: 2並降低selection\_pool\_multiplier至 4。較小的集區會以一定成本將預測器批次大小減半，以選擇品質；這些集區會同時保持每個步驟的篩選時間限制。 | 
| 超過 24K 和高達 32K 權杖 | 搭配 selection\_lookahead\_steps: 1 使用 selection\_pool\_multiplier: 4。預測器會在最小大小的集區上執行每個訓練步驟一次。這是最積極支援的設定；不支援超過 32K。 | 

針對長內容資料集調校的範例組態 （大約 24K–32K 字符提示）：

```
training_config:
  max_length: 32768
  global_batch_size: 32

  trainer:
    adaptive_curriculum:
      enable: true
      selection_pool_multiplier: 4        # Smaller pool keeps predictor prefill bounded.
      selection_lookahead_steps: 1        # Predictor runs once per training step.
      prediction_mode: pass_rate
      exemplar_history_steps: 1
      reinforce_coef: 0.01
      predictor_prompt_column: predictor_prompt
```

### 適應性課程的資料準備
<a name="nova-rft-adaptive-curriculum-data"></a>

使用自適應課程時，您的訓練資料應包含`predictor_prompt`一個欄位 （或 中指定的欄位名稱`predictor_prompt_column`)，其中包含簡潔版本的問題文字。通過率預測器會使用此欄位，快速評估提示難度，而無需處理完整的對話內容。

具有預測器提示的範例 JSONL 項目：

```
{
  "messages": [
    {
      "role": "system",
      "content": "You are a math tutor. Show your work step by step."
    },
    {
      "role": "user",
      "content": "A train travels 120 miles in 2 hours. If it then increases speed by 50%, how far will it travel in the next 3 hours?"
    }
  ],
  "reference_answer": "270 miles",
  "predictor_prompt": "A train travels 120 miles in 2 hours. Speed increases 50%. Distance in next 3 hours?"
}
```

如果 `predictor_prompt` 欄位不存在，系統會使用 `messages` 欄位的完整提示回到 。

### 具有自適應課程的完整配方範例
<a name="nova-rft-adaptive-curriculum-example"></a>

下列範例顯示啟用自適應課程的完整 LoRA RFT 配方：

```
run:
  name: "my-rft-adaptive-curriculum"
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  data_s3_path: s3://<bucket>/<data-file>
  replicas: 4
  generation_replicas: 2
  reward_lambda_arn: arn:aws:lambda:<region>:<account-id>:function:<function-name>

training_config:
  max_length: 8192
  global_batch_size: 32
  reasoning_effort: null                        # Non-reasoning mode.

  data:
    shuffle: true

  rollout:
    rollout_strategy:
      type: off_policy_async
      age_tolerance: 2
    advantage_strategy:
      number_generation: 16                     # Higher n for better advantage estimates.
    generator:
      max_new_tokens: 6000
      temperature: 1.0
    rewards:
      preset_reward_function: exact_match       # Or null for custom Lambda reward.
      api_endpoint:
        lambda_arn: ${oc.select:run.reward_lambda_arn}   # Reuse the top-level run.reward_lambda_arn so the two stay in sync.
        lambda_concurrency_limit: 12
        lambda_batch_size: 128

  trainer:
    max_steps: 500
    save_steps: 50
    test_steps: 25
    refit_freq: 4
    clip_ratio_high: 0.2
    ent_coeff: 0.0
    kl_loss_coef: 0.0

    optim_config:
      lr: 1e-6
      weight_decay: 0.0

    peft:
      peft_scheme: "lora"
      lora_tuning:
        alpha: 64
        lora_plus_lr_ratio: 64.0

    adaptive_curriculum:
      enable: true
      selection_pool_multiplier: 8
      prediction_mode: pass_rate
      exemplar_history_steps: 1
      reinforce_coef: 0.01
      predictor_prompt_column: predictor_prompt
```

### 監控自適應課程
<a name="nova-rft-adaptive-curriculum-monitoring"></a>

啟用自適應課程時，每個訓練步驟都會記錄其他指標：
+ **預測與實際通過率** — 與推展後觀察到的實際通過率相比，所選提示的平均預測通過率。較大的間隙表示預測器需要更多校正時間。
+ **選擇目標** — 目前的自動校正選擇目標。這會從 0.5 開始，並根據預測準確性進行調整。
+ **主要篩選條件計數** — 因為模型一直掌握提示而排除的提示數目。

**注意**  
前 1 到 2 個訓練步驟在沒有適應性選擇的情況下執行 （預測器需要至少一個歷史步驟才能建置範例）。完全自適應選擇從步驟 3 開始。

## 進階功能：Nova Forge
<a name="nova-rft-advanced"></a>

對於需要超出標準 RFT 限制之進階功能的使用者，Nova Forge 可作為付費訂閱服務方案使用：
+ 多迴轉對話支援
+ 以 >15 分鐘的執行時間獎勵函數
+ 其他演算法和調校選項
+ 自訂訓練配方修改
+ State-of-the-art技術

Nova Forge 在 SageMaker HyperPod 上執行，旨在支援企業客戶建置自己的前沿模型。

## 有用的命令和秘訣
<a name="nova-rft-useful-commands"></a>

提供[可觀測性指令碼](https://github.com/aws-samples/amazon-nova-samples/tree/main/customization/SageMakerUilts/SageMakerJobsMonitoring)的集合，以協助監控訓練任務的狀態和進度。

可用的指令碼包括：
+ 啟用電子郵件通知以進行訓練任務狀態更新
+ 根據任務組態取得訓練時間預估
+ 針對進行中的任務，取得預期訓練需要多久的近似值

**安裝**

**注意**  
在使用下列任何指令碼之前，請務必重新整理您的 AWS 登入資料。

```
pip install boto3
git clone https://github.com/aws-samples/amazon-nova-samples.git
cd amazon-nova-samples/customization/SageMakerUilts/SageMakerJobsMonitoring/
```

**基本用量**

```
# Enabling email notifications for training job status updates
python enable_sagemaker_job_notifs.py --email test@amazon.com test2@gmail.com --region us-east-1 --platform SMTJ

Creating resources........
Please check your email for a subscription confirmation email, and click 'Confirm subscription' to start receiving job status email notifications!
You'll receive the confirmation email within a few minutes.
```

```
# Obtaining training time estimates based on job configurations
python get_training_time_estimate.py
```

```
# Obtaining approximations for how long training is expected to take for in-progress jobs
python get-training-job-progress.py --region us-east-1 --job-name my-training-job --num-dataset-samples 1000
```

如需其他詳細資訊和範例，請參閱 [Amazon Nova Samples 監控指令碼 README](https://github.com/aws-samples/amazon-nova-samples/blob/main/customization/SageMakerUilts/SageMakerJobsMonitoring/README.md)。