

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

# 建立和管理 Amazon Nova 模型的微調任務
<a name="rft-submit-job"></a>

您可以使用 Amazon Bedrock 主控台或 API 建立強化微調 (RFT) 任務。RFT 任務可能需要幾個小時的時間，取決於訓練資料的大小、epoch 數量，以及獎勵函數的複雜性。

## 先決條件
<a name="rft-prerequisites"></a>
+ 建立具有所需許可的 IAM 服務角色。如需完整的安全性和許可資訊，包括 RFT 特定許可，請參閱 [Amazon Nova 模型的存取和安全性](rft-access-security.md)。
+ （選用） 加密輸入和輸出資料、RFT 任務或對自訂模型提出的推論請求。如需詳細資訊，請參閱[加密自訂模型](https://docs.aws.amazon.com/bedrock/latest/userguide/encryption-custom-job.html)。

## 建立 RFT 任務
<a name="rft-submit-job-how-to"></a>

選擇您偏好方法的索引標籤，然後遵循下列步驟：

------
#### [ Console ]

若要在 主控台中提交 RFT 任務，請執行下列步驟：

1. 開啟 Amazon Bedrock 主控台，並在**調校**下導覽至**自訂模型**。

1. 選擇**建立**，然後選擇**建立強化微調任務**。

1. 在**模型詳細資訊**區段中，選擇 **Amazon Nova 2 Lite** 作為基礎模型。

1. 在**自訂詳細資訊**區段中，輸入自訂名稱。

1. 在**訓練資料**區段中，選擇您的資料來源。從存放在 Amazon S3 中的可用調用日誌中選取，或選取訓練資料集檔案的 Amazon S3 位置，或直接從您的裝置上傳檔案。
**注意**  
您的訓練資料集應該是 OpenAI 聊天完成資料格式。如果您以 Amazon Bedrock 調用或轉換格式提供調用日誌，Amazon Bedrock 會自動將其轉換為聊天完成格式。

1. 在**獎勵函數**區段中，設定您的獎勵機制：
   + **模型作為判斷 (RLAIF)** - 選取 Bedrock 託管基礎模型作為判斷，並設定評估指示。將此用於主觀任務，例如內容管制。
**注意**  
主控台的 **Model as judge** 選項會在訓練期間自動將您的組態轉換為 Lambda 函數。
   + **自訂程式碼 (RLVR)** - 使用透過 Lambda 函數執行的 Python 程式碼建立自訂獎勵函數。將此用於程式碼產生等目標任務。

   如需詳細資訊，請參閱[設定 Amazon Nova 模型的獎勵函數](reward-functions.md)。

1. （選用） 在**超參數**區段中，調整訓練參數或使用預設值。

1. 在**輸出資料**區段中，輸入 Amazon Bedrock 應儲存任務輸出的 Amazon S3 位置。

1. 在**角色組態**區段中，從下拉式清單中選擇現有角色，或輸入要建立之服務角色的名稱。

1. （選用） **在其他組態**區段中，指向 Amazon S3 儲存貯體、KMS 加密設定，以及任務和模型標籤來設定驗證資料。

1. 選擇**建立強化微調任務**以開始任務。

------
#### [ API ]

傳送 CreateModelCustomizationJob 請求，並將 `customizationType`設定為 `REINFORCEMENT_FINE_TUNING`。

**必要欄位：**`roleArn`、`baseModelIdentifier`、`customModelName`、`jobName`、`trainingDataConfig`、`outputDataConfig`、 `rftConfig`

**請求範例：**

```
{
    "roleArn": "arn:aws:iam::123456789012:role/BedrockRFTRole",
    "baseModelIdentifier": "amazon.nova-2.0",
    "customModelName": "my-rft-model",
    "jobName": "my-rft-job",
    "customizationType": "REINFORCEMENT_FINE_TUNING",
    "trainingDataConfig": {
        "s3Uri": "s3://my-bucket/training-data.jsonl"
    },
    "customizationConfig": {
        "rftConfig" : {
            "graderConfig": {
                "lambdaGrader": {
                    "lambdaArn": "arn:aws:lambda:us-east-1:123456789012:function:function-name"
                }
            },
            "hyperParameters": {
                "batchSize": 64,
                "epochCount": 2,
                "evalInterval": 10,
                "inferenceMaxTokens": 8192,
                "learningRate": 0.00001,
                "maxPromptLength": 4096,
                "reasoningEffort": "high",
                "trainingSamplePerPrompt": 4
            }
        }
    },
    "outputDataConfig": {
        "s3Uri": "s3://my-bucket/rft-output/"
    }
}
```

**Python API 範例請求：**

```
import boto3

bedrock = boto3.client(service_name='bedrock')
    
# Set parameters
customizationType = "REINFORCEMENT_FINE_TUNING"
baseModelIdentifier = "arn:aws:bedrock:us-east-1::foundation-model/amazon.nova-2-lite-v1:0:256k"
roleArn = "${your-customization-role-arn}"
jobName = "MyFineTuningJob"
customModelName = "MyCustomModel"

customizationConfig = {
    'rftConfig' : {
        'graderConfig': {
            'lambdaGrader': {
                'lambdaArn': 'arn:aws:lambda:us-east-1:123456789012:function:function-name'
            }
        },
        'hyperParameters': {
            'batchSize': 64,
            'epochCount': 2,
            'evalInterval': 10,
            'inferenceMaxTokens': 8192,
            'learningRate':0.00001,
            'maxPromptLength': 4096,
            'reasoningEffort': 'high',
            'trainingSamplePerPrompt':4
        }
    }
}

trainingDataConfig = {"s3Uri": "s3://${training-bucket}/myInputData/train.jsonl"}
outputDataConfig = {"s3Uri": "s3://${output-bucket}/myOutputData"}

# Create job
response_ft = bedrock.create_model_customization_job(
    jobName=jobName, 
    customModelName=customModelName,
    roleArn=roleArn,
    baseModelIdentifier=baseModelIdentifier,
    customizationConfig=customizationConfig,
    trainingDataConfig=trainingDataConfig,
    outputDataConfig=outputDataConfig,
    customizationType=customizationType
)

jobArn = response_ft['jobArn']
```

------

## 監控 RFT 訓練任務
<a name="rft-monitor-job"></a>

Amazon Bedrock 會在 RFT 訓練期間，使用視覺化圖形和指標提供即時監控。這些指標可協助您了解模型是否正確收斂，以及獎勵函數是否有效引導學習程序。

### 任務狀態追蹤
<a name="rft-job-status"></a>

您可以透過 Amazon Bedrock 主控台中的驗證和訓練階段來監控 RFT 任務狀態。

**完成指標：**
+ 當訓練成功完成時，任務狀態會變更為**已完成** 
+ 自訂模型 ARN 可用於部署
+ 訓練指標達到收斂閾值

### 即時訓練指標
<a name="rft-real-time-metrics"></a>

Amazon Bedrock 在 RFT 訓練期間提供即時監控，並顯示訓練和驗證指標的視覺化圖形。

#### 核心訓練指標
<a name="rft-core-metrics"></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="rft-progress-visualization"></a>

主控台會顯示互動式圖形，隨著 RFT 任務的進行而即時更新。這些視覺化效果可協助您：
+ 追蹤收斂以獲得最佳效能
+ 及早識別潛在的訓練問題
+ 確定最佳停止點
+ 比較不同 epoch 的效能

## 設定推論
<a name="rft-setup-inference"></a>

任務完成後，部署 RFT 模型以進行隨需推論，或使用佈建輸送量以獲得一致的效能。如需設定推論，請參閱 [為自訂模型設定推論](model-customization-use.md)。

在**遊樂場中使用測試**來評估和比較回應與基礎模型。如需評估您已完成的 RFT 模型，請參閱 [評估您的 RFT 模型](rft-evaluate-model.md)。