教師ありファインチューニング (SFT) - Amazon SageMaker AI

教師ありファインチューニング (SFT)

以下のセクションでは、フルランク SFT とパラメータ効率の高い SFT の両方で、教師ありファインチューニング (SFT) のプロセスの概要を説明します。

フルランクの教師ありファインチューニング (SFT)

教師ありファインチューニング (SFT) は、プロンプトとレスポンスのペアのコレクションを基盤モデルに提供して、特定のタスクで事前トレーニング済みの基盤モデルのパフォーマンスを向上させるプロセスです。ラベル付けされた例は、プロンプトとレスポンスのペアとしてフォーマットされ、指示としてフレーズ化されます。この微調整プロセスにより、モデルの重みが変わります。

最適な結果を得るために特定のプロンプトとレスポンスのペアを提供する必要があるドメイン固有のデータがある場合は、SFT を使用する必要があります。

トレーニング入力データセットと検証入力データセットは、エスクローやサービスマネージド S3 バケットではなく、顧客所有のバケットに配置する必要があります。

データ要件

フルランク SFT および Low-Rank Adapter (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:300k または amazon.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 個のレプリカをサポートしています。

    • 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 です。

      一般的に、データセットが大きいほど収束に必要なエポックが少なくなる一方、データセットが小さいほど収束に必要なエポックが多くなります。データのサイズに基づいてエポックの数を調整することをお勧めします。

  • モデル設定

    • 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 レシピを使用したクイックスタート

以下は、HyperPod クラスターで SFT ジョブをすばやく開始するためのフルランク 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 へのメトリクスの公開はサポートされていません。

中間チェックポイントは評価のために保存されず、中間チェックポイントから再開することはできません。最後のチェックポイントのみが保存されます。

ハイパーパラメータを調整するには、「ハイパーパラメータの選択」のガイダンスに従います。

Parameter-efficient fine-tuning (PEFT)

Parameter-efficient fine-tuning (PEFT) では、基盤モデルを新しいタスクやドメインに適応させるために、少数の追加の重みを再トレーニングします。特に、Low-Rank Adapter (LoRA) PEFT は、低ランクのトレーニング可能な重みマトリックスを特定のモデルレイヤーに導入することで、基盤モデルを効率的にファインチューニングし、モデルの品質を維持しながらトレーニング可能なパラメータの数を減らします。

LoRA PEFT アダプターは、推論中にモデルの重みを変更する軽量アダプターレイヤーを組み込み、元のモデルパラメータをそのまま維持することで、ベース基盤モデルを強化します。このアプローチは、最も費用対効果の高いファインチューニング手法の 1 つでもあります。詳細については、「アダプター推論コンポーネントを使用してモデルをファインチューニングする」を参照してください。

以下のシナリオでは 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:300k または amazon.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 です。

      一般的に、データセットが大きいほど収束に必要なエポックが少なくなる一方、データセットが小さいほど収束に必要なエポックが多くなります。データのサイズに基づいてエポックの数を調整することをお勧めします。

  • モデル設定

    • 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: Low-Rank Adaptation を有効にするには、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

  • ハイパーパラメータを調整するには、「ハイパーパラメータの選択」のガイダンスに従います。