finetuning について
finetuning は、SageMaker 向けのモデルファインチューニングコードを生成するエージェントスキルです。ユースケース、ベースモデル、手法、データセットが決まったユーザーを対象に、手法別テンプレートと関連する RLVR、RLAIF、ライセンス手順を扱います。
主な機能
- 01手法に応じたコードテンプレートの選択
- 02設定を生成してトレーニングノートブックを保存
- 03RLVR の報酬関数を設定
- 04RLAIF とライセンスの手順に対応
- 05トレーニング実行と状態確認を案内
活用シーン
- 01SFT または DPO のトレーニングノートブック作成
- 02RLVR 報酬関数の設定
- 03トレーニングの開始とジョブ状態の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ awslabs/ agent-plugins --skill finetuningインストール後、Claude Code で/finetuningを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
code_templates/dpo.pyrlaif_builtin.pyrlaif_custom_prompt.pyrlvr.pysft.pyreferences/code_output_guide.mdcontinuous_customization.mdeula_links.mdrlaif_guide.mdrlvr_reward_function.mdscripts/mlflow_reference.pytemplates/nova_rlvr_reward_function_source_template.pyrlvr_reward_function_source_template.py詳細
前提条件
このワークフローを開始する前に、次の項目を確認してください。
-
use_case_spec.mdファイルが存在する- 存在しない場合:まず
use-case-specificationスキルを有効化してから、再開してください。 use-case-specificationスキルを有効化せずに、ユースケース仕様書の作成を提案してはいけません。
- 存在しない場合:まず
-
ファインチューニング手法(SFT、DPO、RLVR、RLAIF、または Nova の場合は CPT/RFT)とベースモデルがすでに選択されている
- 選択されていない場合:不足している情報を収集するため、
model-selectionスキルおよび/またはfinetuning-techniqueスキルを有効化してから、再開してください。 - その場で推奨を提示してはいけません。適切なスキルを必ず有効化してください。
- 選択されていない場合:不足している情報を収集するため、
-
SageMakerHub で利用可能なベースモデル名が特定されている
- 特定されていない場合:
model-selectionスキルを有効化して、モデル名を取得してください。 - 重要: 同じモデルによく使われる別の名称と異なる場合があるため、
model-selectionが取得したモデル名のみを使用してください。
- 特定されていない場合:
-
SDK 環境(SDK バージョン、リージョン、実行ロール)が検証済みである
- 検証されていない場合:まず
sdk-getting-startedスキルを有効化してから、再開してください。
- 検証されていない場合:まず
-
トレーニングデータセットが、環境のデフォルトリージョンにあるバケットにアップロードされている
- 条件を満たしていない場合:適切な S3 にデータセットをアップロードできるよう、ユーザーを支援してください。
重要なルール
コード生成ルール
- ✅ 各コードテンプレートに示されているインポート文を正確に使用してください。
- ❌ 役立ちそうに見えても、追加のインポート文を加えてはいけません。
- ❌ そのセクションで必要になる前に、変数を作成してはいけません。
- 📋 コードの構造を正確にコピーしてください。独自の変更を加えてはいけません。
- 🎯 最小限のコードの原則を厳守してください。
- ✅ コードを記述する際は、インデントと f 文字列が正しいことを確認してください。
ユーザーとのコミュニケーションルール
- ❌ トレーニング中に後続のスキルへの移行を提案してはいけません(論理的に不可能です)。
- ❌ 会話内でユーザーから明示的な確認を得ずに、ACCEPT_EULA を True に設定してはいけません。
- ✅ 参照するセクションは、番号とタイトルの両方を必ず伝えてください。
- ✅ ユーザーが実行方法(ノートブック)を尋ねた場合:
run_cellが利用可能なら、実行を提案してください。利用できない場合は、セルを 1 つずつ実行するよう伝えてください(ipykernel が必要であることも伝えてください)。 - ✅ ユーザーが実行方法(スクリプト)を尋ねた場合:
python3 <script>.pyで実行するよう伝えてください。
ワークフロー
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 コードの生成
code_output_guide.mdのルールに従って、テンプレートからコードを記述する- テンプレートと同じ順序、依存関係、インポート文を使用する
- 独自の変更を加えたり、コードを追加したりしてはいけません。
- モデルが Meta/Llama モデルではない場合(モデル ID が
meta-で始まらない場合):- 設定セルから
ACCEPT_EULA = Falseの行を省略する - トレーナー呼び出しから
accept_eula=ACCEPT_EULA,の行を省略する
- 設定セルから
- モデルが Nova ファミリーの場合は、「Configure Trainer」セクションと「Hyperparameter Overrides」セクションから、
max_epochsまたはlr_warmup_steps_ratioを含むコードをすべて省略する
1.4 設定値の自動生成
「Setup & Credentials」セルに、次の値を入力します。
-
BASE_MODEL
- コンテキストにある SageMakerHub モデル名を正確に使用します
-
MODEL_PACKAGE_GROUP_NAME
- ユースケースから生成します(必要に応じて
use_case_spec.mdを読みます) - 書式ルール:
- 小文字の英数字とハイフンのみ
- 1~63 文字
- パターン:
[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62} - 例:「カスタマーサポートチャットボット」→
customer-support-chatbot-v1
- ユースケースから生成します(必要に応じて
-
ノートブックを保存します
2. RLVR 報酬関数(RLVR のみ。手法が SFT または DPO の場合、このセクションはスキップします)
2.1 報酬関数のステータスを確認する
- ユーザーに、すでに報酬関数があるか、作成を支援してほしいかを尋ねます。
- ある場合 → SageMaker Hub Evaluator ARN を尋ねます。有効な Evaluator ARN が提供されたら、セクション 2.3 に進みます。SageMaker Hub Evaluator として登録されていない場合は、2.2 に進みます。
- ない場合 → 2.2 に進みます
2.2 テンプレートから報酬関数を生成する
references/rlvr_reward_function.mdの「カスタム報酬関数の作成をユーザーに支援する」セクションのワークフローに従います
2.3 CUSTOM_REWARD_FUNCTION の値を設定する
- ノートブックの
CUSTOM_REWARD_FUNCTIONの値に、報酬関数の ARN を設定します(ユーザーから直接提供された ARN、または関数生成コードのevaluator.arnを使用します)。
3. RLAIF(RLAIF のみ。手法が RLAIF でない場合、このセクションはスキップします)
references/rlaif_guide.md を読み、その指示に従います。
4. EULA の確認と同意
- 選択したベースモデルの公式ライセンスリンクを
references/eula_links.mdで確認します references/eula_links.mdに記載された文言に従って、ライセンスをユーザーに提示します。OSS モデルの場合:「このモデルは {License} のライセンスで提供されています。こちらでライセンス条項をご確認ください:{URL}。」Nova モデルの場合:「このモデルには AWS サービス規約が適用されます:{URL}。」- 選択したベースモデルが 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 を参照)。
- Meta/Llama の場合:このモデルを使用する前に EULA を読み、同意する必要があることをユーザーに伝えます。「ライセンス条項に同意しますか?(yes/no)」と尋ねます。ユーザーが同意した場合は
5. 生成後
コードの生成後、実行するかどうかをユーザーに確認します。データセットとモデルによっては、トレーニングに数時間かかる場合があります。
ノートブックモード: run_cell が利用できる場合は、セルを実行するかどうかを確認します。利用できない場合は、ユーザー自身でセルを実行するよう伝えます。
スクリプトモード: 次の選択肢をユーザーに提示します。
「どのようにしますか?
- 自分で実行する —
python scripts/[script_name]で実行する- 実行して、完了するまで待つ
- 実行するが、待たない — 後でステータスを確認する」
- 選択肢 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 のコードテンプレート