監督式微調 (SFT) - Amazon SageMaker AI

監督式微調 (SFT)

下列各節概述監督式微調 (SFT) 的程序,包括全秩 SFT 和參數效率 SFT。

全秩監督式微調 (SFT)

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

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

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

資料要求

對於全秩 SFT 和低秩轉接器 (LoRA) SFT,資料應遵循 Amazon Bedrock Converse 操作格式。如需此格式的範例和限制條件,請參閱準備資料以微調理解模型

若要在提交之前驗證您的資料集格式,我們建議您使用 Amazon Bedrock 樣本儲存庫中的驗證指令碼。此驗證工具有助於確保您的 JSONL 檔案符合所需的格式規格,並在提交微調任務之前找出任何潛在問題。

可使用 SFT 進行調校的 Amazon Nova 參數如下所示:

  • 執行組態

    • name:訓練任務的描述性名稱。這有助於在 AWS 管理主控台 中識別您的任務。

    • model_type:要使用的 Amazon Nova 模型變體。可用的選項為 amazon.nova-micro-v1:0:128kamazon.nova-lite-v1:0:300kamazon.nova-pro-v1:0:300k

    • model_name_or_path:用於訓練的基本模型路徑。從 nova-micro/prodnova-pro/prodnova-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:完整通過訓練資料集的次數。最大值為 5。

      一般而言,較大的資料集需要較少的 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 配方快速入門

以下是全秩 SFT 的配方,旨在讓您快速啟動 HyperPod 叢集上的 SFT 任務。此配方也假設您已使用正確的 AWS 憑證連線至 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 val_check_interval: 100 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
全秩配方範例

以下是已正確設定所有元件的 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
限制

不支援將指標發布至 Weights & Biases 和 MLFlow。

未儲存中繼檢查點以供評估,而且您無法從中繼檢查點繼續。只會儲存最後一個檢查點。

若要調整超參數,請遵循選取超參數中的指引。

參數效率微調 (PEFT)

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

LoRA PEFT 適應器透過整合輕量型適應器層,來增強基礎模型,適應器層會在推論期間修改模型的權重,同時保持原始模型參數不變。此方法也視為最具成本效益的微調技術之一。如需詳細資訊,請參閱使用適應器推論元件微調模型

您應該在下列案例中使用 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:128kamazon.nova-lite-v1:0:300kamazon.nova-pro-v1:0:300k

    • model_name_or_path:用於訓練的基本模型路徑。選取要使用的模型。可用的選項為 nova-micro/prodnova-lite/prodnova-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_stepsmax_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 配方

以下是 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
限制

PEFT 具有下列限制:

  • 先前提供的訓練組態具有每個參數的建議值。

  • 未儲存中繼檢查點以供評估,而且您無法從中繼檢查點繼續。只會儲存最後一個檢查點。

  • 不支援 MLflow 記錄。

故障診斷

使用以下資訊來協助解決您可能遇到的問題:

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

  • 如果您在 AWS CLI 中收到找不到區域的錯誤,請在 start-job 命令前面加上區域來重新提交任務。例如:AWS_REGION=us-east-1 hyperpod start-job ...Job Parameters

  • 若要調整超參數,請遵循選取超參數中的指引。