

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

# 在 SageMaker HyperPod 上微調 Amazon Nova 模型
<a name="nova-hp-fine-tune"></a>

下列技術說明如何在 SageMaker HyperPod 上微調 Amazon Nova 2 模型。

**Topics**
+ [監督式微調 (SFT)](nova-fine-tune.md)
+ [直接偏好最佳化 (DPO)](nova-dpo.md)
+ [近端政策最佳化 (PPO)](nova-ppo.md)

# 監督式微調 (SFT)
<a name="nova-fine-tune"></a>

SFT 訓練程序包含兩個主要階段：
+ **資料準備**：遵循已建立的指導方針，將資料集建立、清除或重新格式化為所需的結構。確定輸入、輸出和輔助資訊 （例如推理追蹤或中繼資料） 已正確對齊並格式化。
+ **訓練組態**：定義模型的訓練方式。使用 時，此組態會寫入 YAML 配方檔案中，其中包含：
  + 資料來源路徑 （訓練和驗證資料集）
  + 金鑰超參數 (epoch、學習率、批次大小）
  + 選用元件 （分散式訓練參數等）

## Nova 模型比較和選擇
<a name="nova-model-comparison"></a>

Amazon Nova 2.0 是在比 Amazon Nova 1.0 更大且更多樣化的資料集上訓練的模型。主要改進包括：
+ 支援明確**推理模式的增強推理功能** 
+ 跨其他語言**的更廣泛多語言效能** 
+ **改善複雜任務的效能**，包括編碼和工具使用
+ **在較長的內容長度下，以更高的準確性和穩定性進行延伸的內容處理** 

## 何時使用 Nova 1.0 與 Nova 2.0
<a name="nova-model-selection"></a>

在下列情況下選擇 Amazon Nova 1.0：
+ 使用案例需要標準語言理解，無需進階推理
+ 已在 Amazon Nova 1.0 上驗證效能，不需要其他功能

# 新版本 1.0 上的 SFT
<a name="nova-sft-1"></a>

監督式微調 (SFT) 是一種過程，過程中會將提示-回應配對集合提供給基礎模型，以改善特定任務的預先訓練基礎模型效能。帶有標籤的範例的格式會設定為提示-回應配對，並依照指示的用詞表達。此微調程序會改變模型的權重。

當您的特定網域資料需要提供特定提示-回應配對，以獲得最佳結果時，您應該使用 SFT。

請注意，您的訓練和驗證輸入資料集必須位於客戶擁有的儲存貯體中，而不是位於委付或服務受管的 S3 儲存貯體中。

## 資料要求
<a name="nova-sft-1-data-requirements"></a>

對於全秩 SFT 和低秩適應器 (LoRA) SFT，資料應遵循 [Amazon Bedrock Converse 操作格式](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html)。如需此格式的範例和限制條件，請參閱[準備資料以微調理解模型](https://docs.aws.amazon.com/nova/latest/userguide/fine-tune-prepare-data-understanding.html)。

若要在提交之前驗證您的資料集格式，我們建議您使用 [Amazon Bedrock 樣本儲存庫中的驗證指令碼](https://github.com/aws-samples/amazon-nova-samples/blob/main/customization/bedrock-finetuning/understanding/dataset_validation/nova_ft_dataset_validator.py)。此驗證工具有助於確保您的 JSONL 檔案符合所需的格式規格，並在提交微調任務之前找出任何潛在問題。

可使用 SFT 進行調校的 Amazon Nova 參數如下所示：
+ **執行組態**
  + `name`：訓練任務的描述性名稱。這有助於在 中識別您的任務 AWS 管理主控台。
  + `model_type`：要使用的 Amazon Nova 模型變體。可用的選項為 `amazon.nova-micro-v1:0:128k`、`amazon.nova-lite-v1:0:300k` 或 `amazon.nova-pro-v1:0:300k`。
  + `model_name_or_path`：用於訓練的基本模型路徑。從 `nova-micro/prod`、`nova-pro/prod`、`nova-lite/prod` 或 S3 路徑中選取要用於訓練後檢查點 (`s3://<escrow bucket>/<job id>/outputs/checkpoints`) 的模型。
  + `replicas`：分散式訓練中要使用的運算執行個體數目。可用的值會根據選擇的模型而有所不同。Amazon Nova Micro 支援 2、4 或 8 個複本。Amazon Nova Lite 支援 4、8、16 或 32 個複本。Amazon Nova Pro 支援 6、12 或 24 個複本。
  + `data_s3_path`：訓練資料集的 S3 位置，這是 JSONL 檔案。此檔案必須位於與叢集相同的 AWS 帳戶 和 區域。所提供 S3 路徑內的所有 S3 位置都必須位於相同的帳戶和區域中。
  + `validation_data_s3_path`：(選用) 驗證資料集的 S3 位置，這是 JSONL 檔案。此檔案必須位於與叢集相同的帳戶和區域中。所提供 S3 路徑內的所有 S3 位置都必須位於相同的帳戶和區域中。
  + `output_s3_path`：存放資訊清單和 TensorBoard 日誌的 S3 位置。所提供 S3 路徑內的所有 S3 位置都必須位於相同的帳戶和區域中。
+ **訓練組態**
  + `max_length`：記號中的序列長度上限。這會決定訓練的內容範圍大小。SFT 的最大支援值為 65,536 個記號。

    序列越長，越能提高訓練效率，但代價是需要增加記憶體。建議您將 `max_length` 參數與資料分佈配對。
+ **訓練器設定**
  + `max_epochs`：完整通過訓練資料集的次數。

    一般而言，較大的資料集需要較少的 epoch 才能收斂，而較小的資料集則需要較多 epoch 才能收斂。建議您根據資料大小調整 epoch 的數目。
+ **模型設定**
  + `hidden_dropout`：捨棄隱藏狀態輸出的機率。將此值增加約 0.0-0.2 可減少對較小資料集的過度擬合。有效值介於 0-1 (含) 之間。
  + `attention_dropout`：捨棄注意力權重的機率。此參數可協助進行一般化。有效值介於 0-1 (含) 之間。
  + `ffn_dropout`：捨棄前饋網路輸出的機率。有效值介於 0-1 (含) 之間。
+ **最佳化工具組態**
  + `lr`：學習率，在最佳化期間會控制步驟大小。有效值介於 1e-6-1e-3 (含) 之間。我們建議使用介於 1e-6-1e-4 之間的值，以獲得良好的效能。
  + `name`：最佳化工具演算法。目前僅支援 `distributed_fused_adam`。
  + `weight_decay`：L2 正規化強度。較高的值 (介於 0.01-0.1 之間) 會增加正規化。
  + `warmup_steps`：逐步提高學習率的步驟數目。這可改善訓練穩定性。有效值介於 1-20 (含) 之間。
  + `min_lr`：衰減結束時的最低學習率。有效值介於 0-1 (含) 之間，但必須小於學習率。

## 全秩 SFT 配方快速入門
<a name="nova-sft-1-quick-start"></a>

以下是完整排名 SFT 的配方，旨在讓您快速在 SageMaker HyperPod 叢集上啟動 SFT 任務。此配方也假設您已使用正確的 AWS 登入資料連線至 SageMaker HyperPod 叢集。

```
run:
  name: "my-sft-micro-job" # gets appended with a unique ID for HP jobs
  model_type: "amazon.nova-micro-v1:0:128k"
  model_name_or_path: "nova-micro/prod"
  replicas: 2
  data_s3_path: s3:Replace with your S3 bucket name/input.jsonl
  validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl
  output_s3_path: [S3_PATH_TO_STORE_MANIFEST]

## training specific configs
training_config:
  max_length: 32768
  save_steps: 100000
  replicas: ${recipes.run.replicas}
  micro_batch_size: 1
  task_type: sft
  global_batch_size: 64
  weights_only: True
  allow_percentage_invalid_samples: 10

  exp_manager:
    exp_dir: null
    create_wandb_logger: False
    create_tensorboard_logger: True
      project: null
      name: null
    checkpoint_callback_params:
      monitor: step
      save_top_k: 10
      mode: max
      every_n_train_steps: ${recipes.training_config.save_steps}
      save_last: True
    create_early_stopping_callback: True
    early_stopping_callback_params:
      min_delta: 0.001
      mode: min
      monitor: "val_loss"
      patience: 2

  trainer:
    log_every_n_steps: 1
    max_epochs: -1
    max_steps: 16
    limit_test_batches: 0
    gradient_clip_val: 1.0
    num_nodes: ${recipes.training_config.replicas}

  model:
    hidden_dropout: 0.0 # Dropout probability for hidden state transformer.
    attention_dropout: 0.0 # Dropout probability in the attention layer.
    ffn_dropout: 0.0 # Dropout probability in the feed-forward layer.
    sequence_parallel: True
    optim:
      lr: 1e-5
      name: distributed_fused_adam
      bucket_cap_mb: 10
      contiguous_grad_buffer: False
      overlap_param_sync: False
      contiguous_param_buffer: False
      overlap_grad_sync: False
      adam_w_mode: true
      eps: 1e-06
      weight_decay: 0.0
      betas:
        - 0.9
        - 0.999
      sched:
        name: CosineAnnealing
        warmup_steps: 10
        constant_steps: 0
        min_lr: 1e-6

    mm_cfg:
      llm:
        freeze: false
      image_projector:
        freeze: true
        require_newline: true
      video_projector:
        freeze: true
        require_newline: false

    peft:
      peft_scheme: null

    training_validation:
      loader:
        args:
          data_loader_workers: 1
          prefetch_factor: 2
      collator:
        args:
          force_image_at_turn_beginning: false
```

## 全秩配方範例
<a name="nova-sft-1-sample-recipe"></a>

以下是已正確設定所有元件的 SFT 全秩配方範例。

```
## Run config
run:
    name: "my-sft-run"              # A descriptive name for your training job
    model_type: "amazon.nova-lite-v1:0:300k"  # Model variant specification
    model_name_or_path: "nova-lite/prod"      # Base model path
    replicas: 4                     # Number of compute instances for training
    data_s3_path: s3:Replace with your S3 bucket name/input.jsonl
    validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl
    output_s3_path: [S3_PATH_TO_STORE_MANIFEST]

## Training specific configs
training_config:
    max_length: 32768               # Maximum context window size (tokens)

    trainer:
        max_epochs: 2               # Number of training epochs

    model:
        hidden_dropout: 0.0          # Dropout for hidden states
        attention_dropout: 0.0       # Dropout for attention weights
        ffn_dropout: 0.0             # Dropout for feed-forward networks

        optim:
            lr: 1e-5                 # Learning rate
            name: distributed_fused_adam  # Optimizer algorithm
            adam_w_mode: true        # Enable AdamW mode
            eps: 1e-06               # Epsilon for numerical stability
            weight_decay: 0.0        # L2 regularization strength
            betas:                   # Adam optimizer betas
                - 0.9
                - 0.999
            sched:
                warmup_steps: 10     # Learning rate warmup steps
                constant_steps: 0    # Steps at constant learning rate
                min_lr: 1e-6         # Minimum learning rate

        peft:
            peft_scheme: null        # Set to null for full-parameter fine-tuning
```

## 限制
<a name="nova-sft-1-limitations"></a>

不支援將指標發佈至 Weights & Biases。

若要調整超參數，請遵循[選取超參數](https://docs.aws.amazon.com/nova/latest/userguide/customize-fine-tune-hyperparameters.html)中的指引。

## 參數效率微調 (PEFT)
<a name="nova-fine-tune-peft"></a>

參數效率微調 (PEFT) 涉及重新訓練少量的額外權重，以根據新任務或網域調整基礎模型。具體而言，低秩適應器 (LoRA) PEFT 透過將低秩可訓練權重矩陣引入特定模型層，來有效率地微調基礎模型，從而減少可訓練參數的數量，同時維持模型品質。

LoRA PEFT 適應器透過整合輕量型適應器層，來增強基礎模型，適應器層會在推論期間修改模型的權重，同時保持原始模型參數不變。此方法也視為最具成本效益的微調技術之一。如需詳細資訊，請參閱[使用適應器推論元件微調模型](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-adapt.html)。

您應該在下列案例中使用 LoRA PEFT：
+ 您想要從快速訓練程序開始。
+ 基本模型的效能已令人滿意。在這種情況下，LoRA PEFT 的目標是增強其跨多個相關任務的功能，例如文字摘要或語言翻譯。LoRA PEFT 的正規化屬性有助於防止過度擬合，並降低模型「忘記」來源網域的風險。這可確保模型保持多樣化，且可適應各種應用程式。
+ 您想要使用相對較小的資料集執行指令微調案例。LoRA PEFT 使用較小型、特定任務的資料集時的效能比更廣、更大的資料集佳。
+ 您有大型、已標記的資料集，超過 Amazon Bedrock 自訂資料限制。在這種情況下，您可以在 SageMaker AI 上使用 LoRA PEFT 來產生更好的結果。
+ 如果您已透過 Amazon Bedrock 微調達到滿意的結果，SageMaker AI 中的 LoRA PEFT 可協助進一步最佳化模型超參數。

適用於 LoRA PEFT 的 Amazon Nova 參數包括：
+ **執行組態**
  + `name`：訓練任務的描述性名稱。這有助於在 中識別您的任務 AWS 管理主控台。
  + `model_type`：要使用的 Nova 模型變體。可用的選項為 `amazon.nova-micro-v1:0:128k`、`amazon.nova-lite-v1:0:300k` 或 `amazon.nova-pro-v1:0:300k`。
  + `model_name_or_path`：用於訓練的基本模型路徑。選取要使用的模型。可用的選項為 `nova-micro/prod`、`nova-lite/prod`、`nova-pro/prod`，或訓練後檢查點的 S3 路徑 (`s3://<escrow bucket>/<job id>/outputs/checkpoints`)。
  + `replicas`：分散式訓練中要使用的運算執行個體數目。可用的值會根據您使用的模型而有所不同。Amazon Nova Micro 支援 2、4 或 8 個複本。Amazon Nova Lite 支援 4、8、16 或 32 個複本。Amazon Nova Pro 支援 6、12 或 24 個複本。
  + `output_s3_path`：存放資訊清單和 TensorBoard 日誌的 S3 位置。所提供 S3 路徑內的所有 S3 位置都必須位於相同的帳戶和區域中。
+ **訓練組態**
  + `max_length`：記號中的序列長度上限。這會決定訓練的內容範圍大小。LoRA PEFT 的最大支援值為 65,536 個記號。

    序列越長，越能提高訓練效率，但代價是需要增加記憶體。建議您將 `max_length` 參數與資料分佈配對。
+ **訓練器設定**
  + `max_epochs`：完整通過訓練資料集的次數。您可以設定 `max_steps` 或 `max_epochs`，但不建議同時設定兩者。最大值為 5。

    一般而言，較大的資料集需要較少的 epoch 才能收斂，而較小的資料集則需要較多 epoch 才能收斂。建議您根據資料大小調整 epoch 的數目。
+ **模型設定**
  + `hidden_dropout`：捨棄隱藏狀態輸出的機率。將此值增加約 0.0-0.2 可減少對較小資料集的過度擬合。有效值介於 0-1 (含) 之間。
  + `attention_dropout`：捨棄注意力權重的機率。此參數可協助進行一般化。有效值介於 0-1 (含) 之間。
  + `ffn_dropout`：捨棄前饋網路輸出的機率。有效值介於 0-1 (含) 之間。
+ **最佳化工具組態**
  + `lr`：學習率，在最佳化期間會控制步驟大小。我們建議使用介於 1e-6-1e-4 之間的值，以獲得良好的效能。有效值介於 0-1 (含) 之間。
  + `name`：最佳化工具演算法。目前僅支援 `distributed_fused_adam`。
  + `weight_decay`：L2 正規化強度。較高的值 (介於 0.01-0.1 之間) 會增加正規化。
  + `warmup_steps`：逐步提高學習率的步驟數目。這可改善訓練穩定性。有效值介於 1-20 (含) 之間。
  + `min_lr`：衰減結束時的最低學習率。有效值介於 0-1 (含) 之間，但必須小於學習率。
+ **LoRA 組態參數**
  + `peft_scheme`：設定為 `lora` 以啟用低秩適應。
  + `alpha`：LoRA 權重的擴展係數。這通常設定為與 `adapter_dim` 相同的值。
  + `adaptor_dropout`：LoRA 的正規化參數。

### PEFT 配方
<a name="nova-sft-1-peft-recipe"></a>

以下是 LoRA PEFT 的配方。

```
## Run config
run:
    name: "my-lora-run"             # A descriptive name for your training job
    model_type: "amazon.nova-lite-v1:0:300k"  # Model variant specification
    model_name_or_path: "nova-lite/prod"      # Base model path
    replicas: 4                     # Number of compute instances for training
    output_s3_path: [S3_PATH_TO_STORE_MANIFEST]

## Training specific configs
training_config:
    max_length: 32768               # Maximum context window size (tokens)

    trainer:
        max_epochs: 2               # Number of training epochs

    model:
        hidden_dropout: 0.0          # Dropout for hidden states
        attention_dropout: 0.0       # Dropout for attention weights
        ffn_dropout: 0.0             # Dropout for feed-forward networks

        optim:
            lr: 1e-5                 # Learning rate
            name: distributed_fused_adam  # Optimizer algorithm
            adam_w_mode: true        # Enable AdamW mode
            eps: 1e-06               # Epsilon for numerical stability
            weight_decay: 0.0        # L2 regularization strength
            betas:                   # Adam optimizer betas
                - 0.9
                - 0.999
            sched:
                warmup_steps: 10     # Learning rate warmup steps
                constant_steps: 0    # Steps at constant learning rate
                min_lr: 1e-6         # Minimum learning rate

        peft:
            peft_scheme: "lora"      # Enable LoRA for parameter-efficient fine-tuning
            lora_tuning:
                loraplus_lr_ratio: 8.0  # LoRA+ learning rate scaling factor
                alpha: 32            # Scaling factor for LoRA weights
                adapter_dropout: 0.01  # Regularization for LoRA parameters
```

### 疑難排解
<a name="nova-sft-1-troubleshooting"></a>

使用以下資訊來協助解決您可能遇到的問題：
+ 用於訓練和驗證的輸入資料集必須位於客戶擁有的儲存貯體中，而不是位於委付或服務受管的 S3 儲存貯體中。
+ 如果您在 中收到找不到的區域錯誤 AWS CLI，請使用在 start-job 命令前面的區域重新提交任務。例如：`AWS_REGION=us-east-1 hyperpod start-job ...Job Parameters`。
+ 若要調整超參數，請遵循[選取超參數](https://docs.aws.amazon.com/nova/latest/userguide/customize-fine-tune-hyperparameters.html)中的指引。

# 直接偏好最佳化 (DPO)
<a name="nova-dpo"></a>

直接偏好最佳化 (DPO) 是基礎模型的有效微調方法，使用配對比較資料讓模型輸出與人類偏好保持一致。這種方法可根據回應較理想的人類意見回饋，直接最佳化模型行為。

提供全秩 DPO 和低秩適應器 (LoRA) DPO。

**資料格式要求**  
對於全秩和 LoRA DPO，訓練資料格式要求類似於 SFT。不過，對於 DPO，最後一回合需要有偏好配對。以下是 DPO 資料格式的範例：

```
// N-1 turns same as SFT format
{
    "role": "assistant",
    "candidates": [
        {
            "content": [
                {
                    "text": "..."
                } // content list can contain multiple 'text' objects
            ],
            "preferenceLabel": "preferred"
        },
        {
            "content": [
                {
                    "text": "..."
                } // content list can contain multiple 'text' objects
            ],
            "preferenceLabel": "non-preferred"
        }
    ]
}
```

以下是另一個完整的 DPO 文字範例：

```
{
    "system": [
        {
            "text": "..."
        }
    ],
    "messages":[
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "assistant",
            "candidates": [
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "preferred"
                },
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "non-preferred"
                }
            ]
        }
    ],
}
```

以下是完整的 DPO 映像範例：

```
{
    "system": [
        {
            "text": "..."
        }
    ],
    "messages":[
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                },
                {
                    "text": "..."
                },
                {
                    "image": {
                        "format": "jpeg",
                        "source": {
                            "s3Location": {
                                "uri": "s3://your-bucket/your-path/your-image.jpg",
                                "bucketOwner": "your-aws-account-id"
                            }
                        }
                    }
                } // "content" can have multiple "text" and "image" objects.
                 // max image count is 10
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "text": "..."
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "text": "..."
                },
                {
                    "text": "..."
                },
                {
                    "image": {
                        "format": "jpeg",
                        "source": {
                            "s3Location": {
                                "uri": "s3://your-bucket/your-path/your-image.jpg",
                                "bucketOwner": "your-aws-account-id"
                            }
                        }
                    }
                } // "content" can have multiple "text" and "image" objects.
                 // max image count is 10
            ]
        },
        {
            "role": "assistant",
            "candidates": [
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "preferred"
                },
                {
                    "content": [
                        {
                            "text": "..."
                        }
                    ],
                    "preferenceLabel": "non-preferred"
                }
            ]
        }
    ],
}
```

輸入資料集的其他限制條件適用。如需詳細資訊，請參閱[資料集限制條件](https://docs.aws.amazon.com/nova/latest/userguide/fine-tune-prepare-data-understanding.html#custom-fine-tune-constraints)。我們建議您至少包含 1,000 個偏好配對，以便進行有效的訓練。高品質的偏好資料可產生更有效率的結果。

在下列情況中，我們會建議使用 DPO：
+ 針對需要與特定人類偏好一致的主觀輸出進行最佳化。
+ 調整模型的色調、風格或內容特性，以符合所需的回應模式。
+ 根據使用者意見回饋和錯誤分析，對現有模型進行針對性的改善。
+ 在不同使用案例之間維持一致的輸出品質。
+ 透過偏好的回應模式實作安全防護機制。
+ 使用無獎勵強化學習進行訓練。
+ 僅使用偏好資料，而非分級或標記的資料。
+ 在細微的對齊任務中改善模型，例如幫助性、無害性或誠實性。

## 全秩 DPO
<a name="customize-fine-tune-hyperpod-dpo-fr"></a>

適用於全秩 DPO 的 Amazon Nova 參數如下所示：
+ **執行組態**
  + `name`：訓練任務的描述性名稱。這有助於在 中識別您的任務 AWS 管理主控台。
  + `model_type`：要使用的 Nova 模型變體。可用的選項為 `amazon.nova-micro-v1:0:128k`、`amazon.nova-lite-v1:0:300k` 或 `amazon.nova-pro-v1:0:300k`。
  + `model_name_or_path`：基本模型的路徑。從 `nova-micro/prod`、`nova-pro/prod`、`nova-lite/prod` 或 S3 路徑中選取要用於訓練後檢查點 (`s3://<escrow bucket>/<job id>/outputs/checkpoints`) 的模型。
  + `replicas`：分散式訓練中要使用的運算執行個體數目。可用的值會根據選擇的模型而有所不同。Amazon Nova Micro 支援 2、4 或 8 個複本。Amazon Nova Lite 支援 4、8、16 或 32 個複本。Amazon Nova Pro 支援 6、12 或 24 個複本。
  + `data_s3_path`：訓練資料集的 S3 位置，這是 JSONL 檔案。此檔案必須位於與叢集相同的帳戶和區域中。提供的所有 S3 位置都必須位於相同的帳戶和區域中。
  + `validation_data_s3_path`：驗證資料集的 S3 位置，這是 JSONL 檔案。此檔案必須位於與叢集相同的 AWS 帳戶 和區域中。提供的所有 S3 位置都必須位於相同的帳戶和區域中。
+ **訓練組態**
  + `max_length`：記號中的序列長度上限。這會決定訓練的內容範圍大小。DPO 的最大支援值為 32,768 個記號。

    序列越長，越能提高訓練效率，但代價是需要增加記憶體。建議您將 `max_length` 參數與資料分佈配對。
+ **訓練器設定**
  + `max_epochs`：完整通過訓練資料集的次數。

    一般而言，較大的資料集需要較少的 epoch 才能收斂，而較小的資料集則需要較多 epoch 才能收斂。建議您根據資料大小調整 epoch 的數目。
+ **模型設定**
  + `hidden_dropout`：捨棄隱藏狀態輸出的機率。將此值增加約 0.0-0.2 可減少對較小資料集的過度擬合。有效值介於 0-1 (含) 之間。
  + `attention_dropout`：捨棄注意力權重的機率。此參數可協助進行一般化。有效值介於 0-1 (含) 之間。
  + `ffn_dropout`：捨棄前饋網路輸出的機率。有效值介於 0-1 (含) 之間。
+ **最佳化工具組態**
  + `lr`：學習率，在最佳化期間會控制步驟大小。我們建議使用介於 1e-6-1e-4 之間的值，以獲得良好的效能。有效值介於 0-1 (含) 之間。
  + `name`：最佳化工具演算法。目前僅支援 `distributed_fused_adam`。
  + `weight_decay`：L2 正規化強度。較高的值 (介於 0.01-0.1 之間) 會增加正規化。
  + `warmup_steps`：逐步提高學習率的步驟數目。這可改善訓練穩定性。有效值介於 1-20 (含) 之間。
  + `min_lr`：衰減結束時的最低學習率。有效值介於 0-1 (含) 之間，但必須小於學習率。
+ **DPO 組態**
  + `beta`：決定模型應該與訓練資料或原始模型的擬合程度。有效值介於 0.001-0.5 (含) 之間。

    指定較大的值 (例如 0.5) 可保留更多的參考模型行為，但學習新偏好的速度較慢。指定較小的值 (例如 0.01-0.05) 可更快地學習新偏好，但有偏離參考模型行為的風險。

**全秩 DPO 配方**  
以下是 DPO 的全秩配方

```
## Run config
run:
  name: "my-dpo-micro-job"             # A descriptive name for your training job
  model_type: "amazon.nova-micro-v1:0:128k"  # Model variant specification, do not change
  model_name_or_path: "nova-micro/prod"      # Base model path, do not change
  replicas: 2                     # Number of compute instances for training, allowed values are 2, 4, 8
  data_s3_path: s3:Replace with your S3 bucket name/input.jsonl
  validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl
  output_s3_path: [S3_PATH_TO_STORE_MANIFEST]

## Training specific configs
training_config:
  max_length: 32768               # Maximum context window size (tokens).
  global_batch_size: 64           # Global batch size, allowed values are 16, 32, 64.

  trainer:
    max_epochs: 2                # Number of training epochs

  model:
    hidden_dropout: 0.0          # Dropout for hidden states, must be between 0.0 and 1.0
    attention_dropout: 0.0       # Dropout for attention weights, must be between 0.0 and 1.0
    ffn_dropout: 0.0             # Dropout for feed-forward networks, must be between 0.0 and 1.0

    optim:
      lr: 1e-5                 # Learning rate
      name: distributed_fused_adam  # Optimizer algorithm, do not change
      adam_w_mode: true        # Enable AdamW mode
      eps: 1e-06               # Epsilon for numerical stability
      weight_decay: 0.0        # L2 regularization strength, must be between 0.0 and 1.0
      betas:                   # Adam optimizer betas, must be between 0.0 and 1.0
        - 0.9
        - 0.999
      sched:
        warmup_steps: 10     # Learning rate warmup steps
        constant_steps: 0    # Steps at constant learning rate
        min_lr: 1e-6         # Minimum learning rate, must be lower than lr

    dpo_cfg:
        beta: 0.1               # Strength of preference enforcement. Limits: [0.001, 0.5]

    peft:
        peft_scheme: null        # Disable LoRA, trigger full rank fine tuning
```

## 低秩適應器 DPO
<a name="customize-fine-tune-hyperpod-dpo-lora"></a>

適用於低階適應器 DPO 的 Amazon Nova 參數如下所示：
+ **執行組態**
  + `name`：訓練任務的描述性名稱。這有助於在 中識別您的任務 AWS 管理主控台。
  + `model_type`：要使用的 Nova 模型變體。可用的選項為 `amazon.nova-micro-v1:0:128k`、`amazon.nova-lite-v1:0:300k` 或 `amazon.nova-pro-v1:0:300k`。
  + `model_name_or_path`：基本模型的路徑。從 `nova-micro/prod`、`nova-pro/prod`、`nova-lite/prod` 或 S3 路徑中選取要用於訓練後檢查點 (`s3://<escrow bucket>/<job id>/outputs/checkpoints`) 的模型。
  + `replicas`：分散式訓練中要使用的運算執行個體數目。可用的值會根據選擇的模型而有所不同。Amazon Nova Micro 支援 2、4 或 8 個複本。Amazon Nova Lite 支援 4、8、16 或 32 個複本。Amazon Nova Pro 支援 6、12 或 24 個複本。
+ **訓練組態**
  + `max_length`：記號中的序列長度上限。這會決定訓練的內容範圍大小。DPO 的最大支援值為 32,768 個記號。

    序列越長，越能提高訓練效率，但代價是需要增加記憶體。建議您將 `max_length` 參數與資料分佈配對。
+ **訓練器設定**
  + `max_epochs`：完整通過訓練資料集的次數。

    一般而言，較大的資料集需要較少的 epoch 才能收斂，而較小的資料集則需要較多 epoch 才能收斂。建議您根據資料大小調整 epoch 的數目。
+ **模型設定**
  + `hidden_dropout`：捨棄隱藏狀態輸出的機率。將此值增加約 0.0-0.2 可減少對較小資料集的過度擬合。有效值介於 0-1 (含) 之間。
  + `attention_dropout`：捨棄注意力權重的機率。此參數可協助進行一般化。有效值介於 0-1 (含) 之間。
  + `ffn_dropout`：捨棄前饋網路輸出的機率。有效值介於 0-1 (含) 之間。
+ **最佳化工具組態**
  + `lr`：學習率，在最佳化期間會控制步驟大小。我們建議使用介於 1e-6-1e-4 之間的值，以獲得良好的效能。有效值介於 0-1 (含) 之間。
  + `name`：最佳化工具演算法。目前僅支援 `distributed_fused_adam`。
  + `weight_decay`：L2 正規化強度。較高的值 (介於 0.01-0.1 之間) 會增加正規化。
  + `warmup_steps`：逐步提高學習率的步驟數目。這可改善訓練穩定性。有效值介於 1-20 (含) 之間。
  + `min_lr`：衰減結束時的最低學習率。有效值介於 0-1 (含) 之間，但必須小於學習率。
+ **DPO 組態**
  + `beta`：決定模型應該與訓練資料或原始模型的擬合程度。有效值介於 0.001-0.5 (含) 之間。

    指定較大的值 (例如 0.5) 可保留更多的參考模型行為，但學習新偏好的速度較慢。指定較小的值 (例如 0.01-0.05) 可更快地學習新偏好，但有偏離參考模型行為的風險。
+ **LoRA 組態參數**
  + `peft_scheme`：將 `lora` 設定為可啟用低秩適應，這會產生更高效、較小的輸出模型。也可以使用這些 LoRA 特定的屬性：
    + `alpha`：LoRA 權重的擴展係數。這通常設定為與 `adapter_dim` 相同的值。
    + `adapter_dropout`：LoRA 參數的正規化參數。

**LoRA DPO 配方**  
以下是 LoRA DPO 的配方。

```
## Run config
run:
    name: "my-lora-run"             # A descriptive name for your training job
    model_type: "amazon.nova-lite-v1:0:300k"  # Model variant specification, do not change
    model_name_or_path: "nova-lite/prod"      # Base model path, do not change
    replicas: 4                     # Number of compute instances for training. All supported values: {4, 8, 16}
    data_s3_path: s3:Replace with your S3 bucket name/input.jsonl
    validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl
    output_s3_path: [S3_PATH_TO_STORE_MANIFEST]

## Training specific configs
training_config:
    max_length: 16384               # Maximum context window size (tokens). Should be between [1024, 32768] and multiple of 1024.
                                    # Note: Image dataset for DPO has a limit on 20k samples and 16384 max_length
    global_batch_size: 64           # Total samples per step. Limits: {16, 32, 64, 128, 256}

    trainer:
        max_epochs: 2               # Number of training epochs

    model:
        hidden_dropout: 0.0          # Dropout for hidden states. Limits: [0.0, 1.0]
        attention_dropout: 0.0       # Dropout for attention weights. Limits: [0.0, 1.0]
        ffn_dropout: 0.0             # Dropout for feed-forward networks. Limits: [0.0, 1.0]

        optim:
            lr: 1e-5                 # Learning rate
            name: distributed_fused_adam  # Optimizer algorithm, do not change
            adam_w_mode: true        # Enable AdamW mode
            eps: 1e-08               # Epsilon for numerical stability
            weight_decay: 0.01       # L2 regularization strength
            betas:                   # Adam optimizer betas. Limits: [0.0, 1.0]
                - 0.9
                - 0.999
            sched:
                warmup_steps: 10     # Learning rate warmup steps
                constant_steps: 0    # Steps at constant learning rate
                min_lr: 1e-6         # Minimum learning rate

        dpo_cfg:
            beta: 0.01               # Strength of preference enforcement. Limits: [0.001, 0.5]

        peft:
            peft_scheme: "lora"      # Enable LoRA for parameter-efficient fine-tuning
            lora_tuning:
                loraplus_lr_ratio: 20.0  # LoRA+ learning rate scaling factor. Limits: [0.0, 100.0]
                alpha: 64            # Scaling factor for LoRA weights. [32, 64, 96, 128, 160, 192]
                adapter_dropout: 0.01  # Regularization for LoRA parameters. Limits: [0.0, 1.0]
```

**限制**  
DPO 具有下列限制：
+ 未儲存中繼檢查點以供評估，而且您無法從中繼檢查點繼續。只會儲存最後一個檢查點。
+ 若要調整超參數，請遵循[選取超參數](https://docs.aws.amazon.com/nova/latest/userguide/customize-fine-tune-hyperparameters.html)中的指引。

# 近端政策最佳化 (PPO)
<a name="nova-ppo"></a>

近端政策最佳化 (PPO) 是一種過程，過程中使用數個機器學習模型訓練和評分模型。下列模型是 PPO 程序的一部分：
+ **執行者訓練或政策模型**：監督式微調 (SFT) 模型，可微調和更新每個 epoch。進行更新的方式是抽樣提示、產生完成，然後使用剪輯代理目標來更新權重。這會限制每個記號日誌盈利能力的變化，讓每個政策步驟都*接近*上個步驟，以保持訓練穩定性。
+ **執行者產生模型**：此模型會產生要由獎勵模型和評論模型評審的提示完成或回應。此模型的權重會在每次 epoch 時從執行者訓練或政策模型進行更新。
+ **獎勵模型**：具有凍結權重的模型，用於對執行者產生模型進行評分。
+ **評論模型**：此模型具有未凍結的權重，用於對執行者產生模型進行評分。此分數通常視為在產生剩餘記號時執行者獲得的總獎勵預估值。
+ **錨點模型**：具有凍結權重的 SFT 模型，用於計算執行者訓練模型和基本模型之間的 KL 散度。錨點模型可確保與基本模型相比，執行者模型的更新不會過於劇烈。劇烈變更可能會導致穩定性或效能降低。

訓練資料必須是 JSONL 格式，其中每一行都包含代表訓練範例的單一 JSON 物件。請見此處範例：

```
{
    "turns": ["string", "string", ...], // Required
    "turns_to_mask": [integer, integer, ...], // Required
    "reward_category": "string", // Required
    "meta_data": {} // Optional
}
```
+ `turns` 是一個陣列，由代表對話順序的對話字串陣列組成。此行包含系統提示、使用者訊息和機器人回應。使用者訊息通常會以「Bot：」結尾，以指出模型輸出的開始位置。例如 `[["System prompt"], ["User: Question Bot:"], ["Bot response"]]`。
+ `turns_to_mask` 是一個由以 0 為基礎的索引組成的陣列，這些索引可識別哪幾回合不應接收梯度更新。遮罩回合通常是系統提示和使用者回合。例如，`[0, 1, 3]` 會遮罩系統提示和使用者訊息 (第一個和第三個訊息)
+ `reward_category` 是字串，可識別要評估的模型效能方面。用於在訓練期間選取適當的獎勵模型類別。獎勵類別適用於下列獎勵類別：`default`、`math`、`coding`、`if`、`rag` 和 `rai`。
+ `meta_data` 是選用的物件，其中包含其他內容或基本真相資訊。這會包含識別符、來源資訊或對話內容。結構可根據您的資料集需求彈性調整。

這是回應記錄：

```
{
    "turns": ["You are a helpful AI assistant.",
        "User: What is ML? Bot:",
        "Machine learning is...", "User: Examples? Bot:",
        "Email spam filtering is..."
    ],
    "turns_to_mask": [0, 1, 3],
    "reward_category": "default",
    "meta_data": {
        "messages": [{
                "role": "system",
                "content": "You are a helpful AI assistant."
            },
            {
                "role": "user",
                "content": "What is ML?"
            },
            {
                "role": "assistant",
                "content": "Machine learning is..."
            },
            {
                "role": "user",
                "content": "Examples?"
            },
            {
                "role": "assistant",
                "content": "Email spam filtering is..."
            }
        ]
    }
}
```

獎勵建模架構會跨不同的分類目標實作多維度最佳化，以促進強大的模型收斂。獎勵類別應根據必須最佳化其模型的任務進行選取。

建議您遵循下列準則為您的任務選取正確的架構：
+ `default`：標準對話任務和基本互動的一般用途最佳化工具。用於一般對話和討論、基本撰寫任務、簡單問題回答和非專業知識查詢。

  請見此處範例：

  ```
  {
      "turns": ["Write a summary of climate change"],
      "turns_to_mask": [0],
      "reward_category": "default"
  }
  ```
+ `math`：專用於數學運算和數值推理任務的最佳化工具。用於解決數學問題、算術計算、代數方程式、幾何問題和統計分析。

  請見此處範例：

  ```
  {
      "turns": ["Calculate the derivative of x²"],
      "turns_to_mask": [0],
      "reward_category": "math"
  }
  ```
+ `coding`：程式設計和軟體開發相關查詢的專用類別。用於程式碼實作、偵錯協助、演算法設計、技術文件和系統架構問題。

  請見此處範例：

  ```
  {
      "turns": ["Write a function to check if a string is palindrome"],
      "turns_to_mask": [0],
      "reward_category": "coding"
  }
  ```
+ `if`：此任務類別需要精確的執行程序和逐步指導。用於多步驟程序、循序指示、複雜任務分解和程序文件。

  請見此處範例：

  ```
  {
      "turns": ["Provide steps to deploy a web application"],
      "turns_to_mask": [0],
      "reward_category": "if"
  }
  ```
+ `rag`：此為任務的獎勵類別，其中的任務需要特別根據檢索的內容資訊來回答查詢。當應直接從提供的參考資料衍生回答時使用，合成事實內容而不超出所檢索資訊的範圍，確保回答是以提供的內容為基礎，而不是以一般知識。

  請見此處範例：

  ```
  {
              "turns": ["The Synthesis Report integrates findings from all six IPCC assessment cycles, revealing that global surface temperature has increased 1.1°C from 1850-1900 to 2011-2020, with human activities unequivocally identified as the cause of this warming. Alarmingly, current policies put the world on track for 3.2°C warming by 2100. The document identifies 5 key climate system "tipping points" approaching and emphasizes that greenhouse gas emissions must decline 43% by 2030 (compared to 2019 levels) to limit warming to 1.5°C. Climate-related risks will escalate with every increment of warming, with loss and damage disproportionately affecting vulnerable populations. Despite some progress, climate adaptation remains uneven with significant gaps, and financial flows continue to fall below levels needed for mitigation goals.",
              "What were the key findings of the latest IPCC climate report?"],
              "turns_to_mask": [0, 0],
              "reward_category": "rag"
              }
  ```
+ `rai`：此為任務的獎勵類別，其中的任務需要套用負責任的 AI 原則，例如公平性、透明度和道德。用於評估 AI 系統中的潛在偏差、確保考量隱私權、解決倫理困境，以及提升包容性設計原則。

  請見此處範例：

  ```
  {
              "turns": ["Identify potential bias concerns when developing a loan approval algorithm and suggest mitigation strategies"],
              "turns_to_mask": [0],
              "reward_category": "rai"
              }
  ```

**遮罩回合**  
在訓練資料集中，`turns_to_mask` 參數對於控制哪些對話回合在訓練期間會接收梯度更新至關重要。此索引陣列會決定模型應學習產生對話的哪些部分，以及應僅將哪些部分視為內容。適當的遮罩可確保該模型會學習適當的回應模式，同時避免對可能降低效能的系統提示或使用者輸入進行訓練。

我們建議採用以下遮罩指引：
+ **一律遮罩索引 0** - 系統提示永不接收梯度更新。
+ **一律遮罩使用者回合** - 防止模型學習產生使用者輸入。
+ **模式一致性** - 針對類似的對話結構使用相同的遮罩模式，例如 (0, 1, 3, 5) 用於多回合對話。
+ **選擇性訓練** - 遮罩早期機器人回應，以專注對改善的最終回應進行訓練。
+ **思維鏈保留** - 只有在訓練推理序列時，才遮罩系統和使用者回合。
+ **品質篩選** - 遮罩低品質助理回應，以防止效能降低。
+ **內容最佳化** - 確保遮罩回合不會移除後續回應所需的基本內容。

有效遮罩的關鍵是監控訓練指標和驗證效能，以識別您的遮罩策略是否保留必要的內容，同時將梯度更新集中在所需的模型輸出上。

**啟用 KL 散度損失**  
若要啟用 KL 散度損失，則需要啟用錨點伺服器，才能計算目前政策離原始分佈的散度。必須指定 KL 損失類型，係數必須是零以外的值。越高的係數值有助於模型不偏離原始政策太多，從而造成對整體效能的變化較小。越低的係數值會造成與先前的政策有更大的偏差，而使目標指標的效能提升，但會影響整體效能。

```
ppo_anchor:
  max_length: 8192
  trainer:
    num_nodes: ${recipes.run.cm_replicas}
  model:
    global_batch_size: 32

ppo_actor_train:
  model:
    ######## Use KL in actor loss ########
    kl_loss_type: low_var_kl
    kl_loss_coeff: 0.1

    ######## Use KL in reward model ######
    kl_reward_penalty_coeff: 0.1
```

**學習率**  
評論模型和政策模型的學習率可以調整，其中 3e-6 是預設的平衡選擇。較高的學習率通常會導致訓練不穩定性，這可以透過 KL 散度峰值和不規律的政策行為來識別。較低的學習率可能會導致收斂問題和學習緩慢，具體表現是獎勵停滯和政策更新最少。定期監控 KL 散度、獎勵分數和價值損失，有助於決定是否在訓練期間調整學習率。

```
ppo_critic:
  model:
    optim:
      lr: 3e-6

ppo_actor_train:
  model:
    optim:
      lr: 3e-06
```

**全域批次大小**  
全域批次大小會大幅影響 Amazon Nova 中的 PPO 效能，批次越大，通常越能改善訓練穩定性和梯度預估，同時實現更高率的平行處理。不過，非常大的批次大小可能會導致收益下降，並可能受到可用記憶體的限制，需要謹慎平衡學習率和其他超參數。

```
ppo_actor_train:
  model:
    global_batch_size: 160
```

可使用 PPO 進行調校的 Amazon Nova 參數包括：
+ **執行組態**
  + `actor_train_replicas`：要用於執行者訓練模型的運算執行個體數目。可用的值會根據選擇的模型而有所不同。Amazon Nova Micro 支援 1 或 2 個複本。Amazon Nova Lite 支援 1、2 或 4 個複本。Amazon Nova Pro 支援 3、6 或 12 個複本。
  + `rm_replicas`：用於獎勵模型的運算執行個體數目。建議您針對任何模型大小使用一個複本。
  + `cm_replicas`：用於評論模型的運算執行個體數目。建議您針對任何模型大小使用一個複本。
  + `actor_generation_replicas`：用於產生執行者的運算執行個體數目。可用的值會根據選擇的模型而有所不同。Amazon Nova Micro 支援 1 個複本。Amazon Nova Lite 支援 1 或 2 個複本。Amazon Nova Pro 支援 1 或 2 個複本。
  + `am_replicas`：用於錨點模型的運算執行個體數目。建議您針對任何模型大小使用一個複本。
+ **執行者訓練組態 (政策組態)**
  + `max_steps`：微調或訓練執行者訓練模型的步驟數目上限。在這裡，會將一個步驟定義為推展，接著會使用 `global_batch_size` 個樣本數目訓練執行者訓練模型。一個 epoch 定義為 `global_batch_size * trajectory_buffer_scale`。

    此處選擇的值會根據您的使用案例和資料集複雜性而有所不同。我們建議從 65 個 epoch 或 520 個步驟開始，這是 epoch 的數量乘以 `trajectory_buffer_scale` 的值而得。不過，某些任務需要較長的 PPO 訓練時間才能達到相同的效能。

    對於 PPO，訓練指標 (例如飽和獎勵模型分數和 [ml-flow](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow-create-tracking-server.html) 主控台的平均動作長度) 有助於找出評估的最佳點。
  + `actor_model_max_length`：傳送至執行者產生元件以產生完成的輸入資料長度上限。
  + `reward_model_max_length`：傳送至獎勵伺服器以評分完成的輸入資料長度上限。
  + `trajectory_buffer_scale`：此緩衝區代表在更新權重和產生新的推展之前，使用舊執行者訓練 (政策) 模型產生的推展次數。支援值為 1、2、4、8 和 16。

    如果 `trajectory_buffer_scale` 是 1，則表示訓練是在政策上進行的。這表示推展是以最新的模型權重產生，但輸送量會受到影響。如果為 16，則模型稍微偏離政策，但輸送量較高。我們建議每個模型從 8 開始。
  + `kl_reward_penalty_coeff`：這是 KL 散度術語，可確保更新不會過於劇烈，且不會從基本或 SFT 模型起草政策。
  + `kl_loss_coeff`：此值控制 KL 散度懲罰對 PPO 中整體訓練目標的影響程度。
  + `kl_loss_type`：此值指定如何計算目前和參考政策分佈之間的差異。可用 `kl_loss_types` 的是 `kl` (標差 KL 散度)、`mse` (均方誤差)、`abs` (日誌機率之間的絕對差異) 和 `low_var_kl` (低變異 KL 近似值)。
  + `model.clip_ratio`：PPO 中的執行者剪輯比例 (ε) 是一種超參數，會限制政策在每次更新期間可以變更的程度。
  + `model.optim.lr`：用於在執行者模型中進行代理模型損失訓練的學習率。
  + `model.lam`：優勢估計程序的一部分。λ 越高，會為更長期獎勵提供更多權重，但變異數會更高；λ 越低，則能更專注於立即獎勵，且變異數較低，但偏差較多。
  + `model.ent_coeff`：PPO 中的熵損失透過在政策過於確定時懲罰政策來鼓勵探勘 (亦即一律選擇具有高信賴度的相同動作)。
+ **獎勵模型組態**
  + `global_batch_size`：此批次大小使用獎勵模型來評分完成。如果 `ppo_actor_train.model.global_batch_size` 大於 `ppo_reward.model.global_batch_size`，則會分多個批次處理它們。請注意，`ppo_actor_train.model.global_batch_size % ppo_reward.model.global_batch_size` 必須等於 0。
  + `max_length`：獎勵模型的內容長度上限。這應該與 `ppo_actor_train.model.max_length` 相同。
+ **評論模型組態**
  + `global_batch_size`：評論模型值的批次大小。評論模型將為執行者模型所提供回應中的每個記號提供值預估。批次大小用於推論和訓練。

    請注意，`ppo_actor_train.model.global_batch_size % ppo_critic.model.global_batch_size` 必須等於 0 和 `ppo_actor_train.model.global_batch_size * ppo_actor_train.model.trajectory_buffer_size % ppo_critic.model.global_batch_size == 0`。
  + `max_length`：評論模型的內容長度上限。這應該與 `ppo_actor_train.model.max_length` 相同。
  + `model.optim.lr`：用於在執行者模型中進行代理模型損失訓練的學習率。
+ **錨點模型組態**
  + `global_batch_size`：此批次大小用於產生凍結 SFT 或錨點模型的 logp。請注意，`ppo_actor_train.model.global_batch_size % ppo_anchor.model.global_batch_size` 必須等於 0。
  + `max_length`：獎勵模型的內容長度上限。這應該與 `ppo_actor_train.model.max_length` 相同。
+ **執行者產生模型組態**
  + `actor_model_max_length`：執行者模型產生元件的內容長度上限。這應該與 `ppo_actor_train.model.max_length` 相同。

**PPO 配方**  
以下是 PPO 的配方。

```
## Run config
run:
  name: ndry-ppo-pro
  model_type: amazon.nova-pro-v1:0:300k
  model_name_or_path: nova-pro/prod
  data_s3_path: s3://testing/train.jsonl # Your training data S3 path

  actor_train_replicas: 6 # Actor train model replicas
  rm_replicas: 1 # Reward model replicas
  cm_replicas: 1 # Critic model replicas
  actor_generation_replicas: 2 # Actor generation model replicas
  am_replicas: 1 # Anchor model replicas

## Training config for each PPO component
ppo_reward:
  max_length: 8192 # model architecture max length
  trainer:
    num_nodes: ${recipes.run.rm_replicas}
  model:
    global_batch_size: 16

ppo_critic:
  max_length: 8192
  trainer:
    num_nodes: ${recipes.run.cm_replicas}
  model:
    global_batch_size: 16
    optim:
      lr: 3e-6
      name: distributed_fused_adam
      adam_w_mode: true
      eps: 1e-06
      weight_decay: 0.0
      betas:
        - 0.9
        - 0.999

ppo_anchor:
  max_length: 8192
  trainer:
    num_nodes: ${recipes.run.am_replicas}
  model:
    global_batch_size: 16

ppo_actor_generation:
  actor_model_max_length: 8192
  trainer:
    num_nodes: ${recipes.run.actor_generation_replicas}

ppo_actor_train:
  max_length: 8192
  max_steps: 520 # Stopping criteria Desired epoch num * trajectory_buffer_scale
  actor_model_max_length: 8192 # truncate input data to max length
  reward_model_max_length: 8192 # truncate input data to max length
  trajectory_buffer_scale: 8
  trainer:
    num_nodes: ${recipes.run.actor_train_replicas}
  model:
    global_batch_size: 160
    ent_coeff: 0
    clip_ratio: 0.2
    lam: 1
    kl_loss_coeff: 0.0
    kl_loss_type: low_var_kl
    kl_reward_penalty_coeff: 0.0
    hidden_dropout: 0.0 # Dropout probability for hidden state transformer.
    attention_dropout: 0.0 # Dropout probability in the attention layer.
    ffn_dropout: 0.0 # Dropout probability in the feed-forward layer.
    optim:
      lr: 3e-06
      name: distributed_fused_adam # only this one is available for p0.
      adam_w_mode: true
      eps: 1e-08
      weight_decay: 0.0
      betas:
        - 0.9
        - 0.999
```

**限制**  
PPO 具有下列限制：
+ 未儲存中繼檢查點以供評估，而且您無法從中繼檢查點繼續。只會儲存最後一個檢查點。
+ 不支援多模態資料集。
+ 訓練任務不會自動停止。您必須使用 SageMaker HyperPod CLI 停止任務。
+ TensorBoard 不支援關鍵訓練指標。
+ 若要調整超參數，請遵循[選取超參數](https://docs.aws.amazon.com/nova/latest/userguide/customize-fine-tune-hyperparameters.html)中的指引。