mcpField
F
finetuning

finetuning

github.com/awslabs開発932151 回インストール3 週間前に更新
リポジトリ

finetuning について

finetuning は、SageMaker 向けのモデルファインチューニングコードを生成するエージェントスキルです。ユースケース、ベースモデル、手法、データセットが決まったユーザーを対象に、手法別テンプレートと関連する RLVR、RLAIF、ライセンス手順を扱います。

主な機能

  1. 01手法に応じたコードテンプレートの選択
  2. 02設定を生成してトレーニングノートブックを保存
  3. 03RLVR の報酬関数を設定
  4. 04RLAIF とライセンスの手順に対応
  5. 05トレーニング実行と状態確認を案内

活用シーン

  1. 01SFT または DPO のトレーニングノートブック作成
  2. 02RLVR 報酬関数の設定
  3. 03トレーニングの開始とジョブ状態の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/awslabs/agent-plugins --skill finetuning

インストール後、Claude Code で/finetuningを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

code_templates/
dpo.py
rlaif_builtin.py
rlaif_custom_prompt.py
rlvr.py
sft.py
references/
code_output_guide.md
continuous_customization.md
eula_links.md
rlaif_guide.md
rlvr_reward_function.md
scripts/
mlflow_reference.py
templates/
nova_rlvr_reward_function_source_template.py
rlvr_reward_function_source_template.py

詳細

前提条件

このワークフローを開始する前に、次の項目を確認してください。

  1. use_case_spec.md ファイルが存在する

    • 存在しない場合:まず use-case-specification スキルを有効化してから、再開してください。
    • use-case-specification スキルを有効化せずに、ユースケース仕様書の作成を提案してはいけません。
  2. ファインチューニング手法(SFT、DPO、RLVR、RLAIF、または Nova の場合は CPT/RFT)とベースモデルがすでに選択されている

    • 選択されていない場合:不足している情報を収集するため、model-selection スキルおよび/または finetuning-technique スキルを有効化してから、再開してください。
    • その場で推奨を提示してはいけません。適切なスキルを必ず有効化してください。
  3. SageMakerHub で利用可能なベースモデル名が特定されている

    • 特定されていない場合:model-selection スキルを有効化して、モデル名を取得してください。
    • 重要: 同じモデルによく使われる別の名称と異なる場合があるため、model-selection が取得したモデル名のみを使用してください。
  4. SDK 環境(SDK バージョン、リージョン、実行ロール)が検証済みである

    • 検証されていない場合:まず sdk-getting-started スキルを有効化してから、再開してください。
  5. トレーニングデータセットが、環境のデフォルトリージョンにあるバケットにアップロードされている

    • 条件を満たしていない場合:適切な S3 にデータセットをアップロードできるよう、ユーザーを支援してください。

重要なルール

コード生成ルール

  • ✅ 各コードテンプレートに示されているインポート文を正確に使用してください。
  • ❌ 役立ちそうに見えても、追加のインポート文を加えてはいけません。
  • ❌ そのセクションで必要になる前に、変数を作成してはいけません。
  • 📋 コードの構造を正確にコピーしてください。独自の変更を加えてはいけません。
  • 🎯 最小限のコードの原則を厳守してください。
  • ✅ コードを記述する際は、インデントと f 文字列が正しいことを確認してください。

ユーザーとのコミュニケーションルール

  • ❌ トレーニング中に後続のスキルへの移行を提案してはいけません(論理的に不可能です)。
  • ❌ 会話内でユーザーから明示的な確認を得ずに、ACCEPT_EULA を True に設定してはいけません。
  • ✅ 参照するセクションは、番号とタイトルの両方を必ず伝えてください。
  • ✅ ユーザーが実行方法(ノートブック)を尋ねた場合:run_cell が利用可能なら、実行を提案してください。利用できない場合は、セルを 1 つずつ実行するよう伝えてください(ipykernel が必要であることも伝えてください)。
  • ✅ ユーザーが実行方法(スクリプト)を尋ねた場合:python3 <script>.py で実行するよう伝えてください。

ワークフロー

1. コード生成の準備

1.1 ディレクトリの設定
  1. 会話の文脈からプロジェクトディレクトリを特定する
    • 不明確な場合(関連するディレクトリが複数ある)→ 使用するフォルダーをユーザーに尋ねる
    • プロジェクトディレクトリがない場合 → directory-management スキルを有効化して設定する

⏸ ユーザーの応答を待ちます。

1.2 コードテンプレートの選択

まず references/code_output_guide.md を読み、出力形式のルールを確認してから、ファインチューニング手法に対応するコードテンプレートを読みます。

  • SFT → code_templates/sft.py
  • DPO → code_templates/dpo.py
  • RLVR → code_templates/rlvr.py
  • 組み込み報酬を使用する RLAIF → code_templates/rlaif_builtin.py
  • カスタムプロンプトを使用する RLAIF → code_templates/rlaif_custom_prompt.py

テンプレートは Python ファイルです。各 # Cell N: Label コメントが新しいセクションの開始位置を示します。これらのマーカーで分割し、あるマーカーから次のマーカーまでを出力の 1 単位として扱います。

1.3 コードの生成
  1. code_output_guide.md のルールに従って、テンプレートからコードを記述する
  2. テンプレートと同じ順序、依存関係、インポート文を使用する
  3. 独自の変更を加えたり、コードを追加したりしてはいけません。
  4. モデルが Meta/Llama モデルではない場合(モデル ID が meta- で始まらない場合):
    • 設定セルから ACCEPT_EULA = False の行を省略する
    • トレーナー呼び出しから accept_eula=ACCEPT_EULA, の行を省略する
  5. モデルが Nova ファミリーの場合は、「Configure Trainer」セクションと「Hyperparameter Overrides」セクションから、max_epochs または lr_warmup_steps_ratio を含むコードをすべて省略する
1.4 設定値の自動生成

「Setup & Credentials」セルに、次の値を入力します。

  1. BASE_MODEL

    • コンテキストにある SageMakerHub モデル名を正確に使用します
  2. MODEL_PACKAGE_GROUP_NAME

    • ユースケースから生成します(必要に応じて use_case_spec.md を読みます)
    • 書式ルール:
      • 小文字の英数字とハイフンのみ
      • 1~63 文字
      • パターン:[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}
      • 例:「カスタマーサポートチャットボット」→ customer-support-chatbot-v1
  3. ノートブックを保存します

2. RLVR 報酬関数(RLVR のみ。手法が SFT または DPO の場合、このセクションはスキップします)

2.1 報酬関数のステータスを確認する
  • ユーザーに、すでに報酬関数があるか、作成を支援してほしいかを尋ねます。
    • ある場合 → SageMaker Hub Evaluator ARN を尋ねます。有効な Evaluator ARN が提供されたら、セクション 2.3 に進みます。SageMaker Hub Evaluator として登録されていない場合は、2.2 に進みます。
    • ない場合 → 2.2 に進みます
2.2 テンプレートから報酬関数を生成する
  1. references/rlvr_reward_function.md の「カスタム報酬関数の作成をユーザーに支援する」セクションのワークフローに従います
2.3 CUSTOM_REWARD_FUNCTION の値を設定する
  1. ノートブックの CUSTOM_REWARD_FUNCTION の値に、報酬関数の ARN を設定します(ユーザーから直接提供された ARN、または関数生成コードの evaluator.arn を使用します)。

3. RLAIF(RLAIF のみ。手法が RLAIF でない場合、このセクションはスキップします)

references/rlaif_guide.md を読み、その指示に従います。

4. EULA の確認と同意

  1. 選択したベースモデルの公式ライセンスリンクを references/eula_links.md で確認します
  2. references/eula_links.md に記載された文言に従って、ライセンスをユーザーに提示します。OSS モデルの場合:「このモデルは {License} のライセンスで提供されています。こちらでライセンス条項をご確認ください:{URL}。」Nova モデルの場合:「このモデルには AWS サービス規約が適用されます:{URL}。」
  3. 選択したベースモデルが Meta/Llama モデルかどうかを確認します(モデル ID が meta- で始まるかどうか)
    • Meta/Llama の場合:このモデルを使用する前に EULA を読み、同意する必要があることをユーザーに伝えます。「ライセンス条項に同意しますか?(yes/no)」と尋ねます。ユーザーが同意した場合は ACCEPT_EULA = True を設定し、生成されたノートブックで accept_eula=ACCEPT_EULA のコメントを解除します。ユーザーが同意しない場合は ACCEPT_EULA = False のままにし、同意がないとトレーニングが失敗することを警告します。
    • Meta 以外の場合:参考情報としてライセンスをユーザーに伝えます。コード上の操作は不要です。ACCEPT_EULA 変数と accept_eula パラメーターは、ノートブックからすでに除外されているはずです(ステップ 1.3 を参照)。

5. 生成後

コードの生成後、実行するかどうかをユーザーに確認します。データセットとモデルによっては、トレーニングに数時間かかる場合があります。

ノートブックモード: run_cell が利用できる場合は、セルを実行するかどうかを確認します。利用できない場合は、ユーザー自身でセルを実行するよう伝えます。

スクリプトモード: 次の選択肢をユーザーに提示します。

「どのようにしますか?

  1. 自分で実行する — python scripts/[script_name] で実行する
  2. 実行して、完了するまで待つ
  3. 実行するが、待たない — 後でステータスを確認する」
  • 選択肢 1: 完了です。ユーザーが戻ってくるまで待ちます。
  • 選択肢 2: スクリプトをそのまま実行します。trainer.train(wait=True) は完了するまで処理をブロックします。最終ステータスを報告します。
  • 選択肢 3: スクリプト内の wait=True を wait=False に変更して実行し、トレーニングジョブ名を報告します。

ステータスの確認:

  • describe-training-job --training-job-name NAME → TrainingJobStatus、FailureReason、SecondaryStatusTransitions
  • 完了後のモデルパッケージ ARN を確認する場合:list-model-packages --model-package-group-name GROUP_NAME --sort-by CreationTime --sort-order Descending --max-results 1

完了後の結果の表示:

  • MLflow メトリクスを照会する際は、scripts/mlflow_reference.py を参考にします
  • エポックごとの損失をテキストの表で提示します(SFT では total_loss、val_eval_total_loss、DPO では rewards/margins、RLVR では critic/rewards/mean)

重要:

  • トレーニングが完了する前に、次のステップに進むことを提案しないでください
  • ユーザーから具体的に尋ねられない限り、次のステップについて詳しく説明しないでください

6. 継続的なカスタマイズ

すでにカスタマイズ済みのモデルをユーザーがファインチューニングしたい場合は、references/continuous_customization.md の手順に従います


参考資料

  • rlvr_reward_function.md - Lambda 報酬関数の作成ガイド(RLVR のみ)
  • templates/rlvr_reward_function_source_template.py - オープンウェイトモデル用の Lambda 報酬関数ソーステンプレート(RLVR のみ)
  • templates/nova_rlvr_reward_function_source_template.py - Nova 2.0 Lite 用の Lambda 報酬関数ソーステンプレート(RLVR のみ)
  • code_templates/sft.py - 教師ありファインチューニング用の完全なノートブックテンプレート(OSS パス)
  • code_templates/dpo.py - 直接選好最適化用の完全なノートブックテンプレート(OSS パス)
  • code_templates/rlvr.py - 検証可能な報酬による強化学習用の完全なノートブックテンプレート(OSS パス)
  • references/continuous_customization.md - ファインチューニング済みモデルをさらにファインチューニングする手順
  • rlaif_guide.md - RLAIF ファインチューニングの選択肢に関する手順
  • rlaif_builtin.py - 組み込みの判定プロンプトを使った RLAIF のコードテンプレート
  • rlaif_custom_prompt.py - カスタム判定プロンプトを使った RLAIF のコードテンプレート

コメント