SageMaker Python SDK を使用したカスタマイズ
SageMaker Python SDK v3 では、SageMaker でモデルをトレーニング、ファインチューニング、デプロイ、管理するための最新のモジュラー API が導入されています。SDK は、継続的事前トレーニング (CPT)、教師ありファインチューニング (SFT)、直接選好最適化 (DPO)、強化ファインチューニング (RFT)、マルチターン強化学習 (MTRL) など、複数のトレーニング方法をサポートしています。SageMaker トレーニングジョブと SageMaker HyperPod でトレーニングジョブを実行できます。
クイックリンク
インストールから最初のトレーニングジョブに進むには、次の手順に従います。
-
SageMaker Python SDK の Read the Docs ウェブサイトの SDK リファレンス
-
GitHub のクイックスタートノートブック
– 実践的な探索用のインタラクティブ Python ノートブック
利点
-
トレーニングからデプロイ、モニタリングまで、モデルのカスタマイズライフサイクル全体に対応するモジュラー SDK。
-
自動リソース管理とインフラストラクチャ設定による、SageMaker トレーニングジョブと SageMaker HyperPod のマルチプラットフォームサポート。
-
トレーニング手法に適したレシピやコンテナ URI を見つける必要がなくなります。
-
独自のトレーニングレシピを使用するか、パラメータオーバーライドでデフォルトを使用します。
-
SDK は、サポートされているモデルとインスタンスの組み合わせに対して設定を検証し、トレーニングを開始する前にエラーを防止します。
-
継続的事前トレーニング (CPT)、教師ありファインチューニング (SFT)、直接選好最適化 (DPO)、強化ファインチューニング (RFT)、マルチターン強化学習 (MTRL) など、複数のトレーニング方法を LoRA とフルランクアプローチの両方でサポートします。
-
統合された Amazon CloudWatch モニタリングを使用すると、トレーニングの進行状況をリアルタイムで追跡できます。
-
統合された MLFlow は、SageMaker AI MLFlow 追跡サーバーを使用してトレーニング実験を追跡します。
要件
サポートされている Python のバージョン
SageMaker Python SDK は Python 3.10 以降をサポートしています。
インストール
SageMaker Python SDK をインストールには、次のコマンドを実行します。
pip install "sagemaker>=3.19.0"
サポートされているモデルと手法
SDK は、Amazon Nova ファミリー内で以下のモデルと手法をサポートしています。
| 方法 | サポートされているモデル |
|---|---|
| 継続的な事前トレーニング | すべての Nova モデル (SMHP のみ) |
| 教師ありファインチューニング (LoRA) | すべての Nova モデル |
| 教師ありファインチューニング (フルランク) | すべての Nova モデル |
| 直接選好最適化 (LoRA) | Nova 1.0 モデル |
| 直接選好最適化 (フルランク) | Nova 1.0 モデル |
| 強化ファインチューニング (LoRA) | Nova Lite 2.0 |
| ファインチューニングの強化 (フルランク) | Nova Lite 2.0 |
| マルチターン強化ファインチューニング (LoRA) | Nova Lite 2.0 |
| マルチターン強化ファインチューニング (フルランク) | Nova Lite 2.0 |
マルチターン強化学習の出力
制限付きモデルパッケージ (RMP) は、プラットフォームマネージドエスクローストレージに独自のモデルアーティファクトをラップする SageMaker AI モデルパッケージです。RMP を使用すると、基盤となるアーティファクトへの直接アクセスを許可することなく、これらのモデルの使用を IAM ポリシーで許可および制御できます。モデルデータを直接ダウンロード、エクスポート、表示することはできません。これは承認された AWS サービス内でのみ使用できます。RMP は、StorageType: "Restricted" でマークされたモデルパッケージグループ内に存在します。
SageMaker トレーニングジョブサーバーレスでマルチターン強化学習 (MTRL) を使用してモデルをトレーニングすると、出力は S3 パスではなく、モデルパッケージグループ内の RMP ARN として配信されます。これはモデルチェックポイントへの S3 パスに出力される他のトレーニング方法 (SFT、DPO、RFT など) とは異なります。
MTRL を使用するには、 MultiTurnRLTrainer クラスを使用します。SageMaker トレーニングジョブサーバーレスでトレーニングする場合、オプションで output_model_package_group を指定して、出力 RMP が登録される場所を制御できます。省略すると、SDK はモデルパッケージグループを自動的に作成します。詳細とコード例については、「制限付きモデルパッケージ」を参照してください。
概要
1. インフラストラクチャを設定する
SDK は 3 つのコンピューティングプラットフォームをサポートしています。適切な設定をトレーナーの compute パラメータに渡します。
SageMaker HyperPod
from sagemaker.core.training.configs import HyperPodCompute compute = HyperPodCompute( cluster_name="my-hyperpod-cluster", instance_type="ml.p5.48xlarge", node_count=4, )
SageMaker トレーニングジョブ (サーバーフル)
from sagemaker.core.training.configs import TrainingJobCompute compute = TrainingJobCompute( instance_type="ml.p5.48xlarge", instance_count=2, )
SageMaker トレーニングジョブ (サーバーレス)
フルマネージド型であり、コンピューティング設定は必要ありません。compute パラメータを省略すると、SDK はデフォルトでサーバーレスを使用します。
# No compute parameter needed as serverless is the default trainer = SFTTrainer( model="nova-textgeneration-lite-v2", training_dataset="s3://my-bucket/sft-data.jsonl", s3_output_path="s3://my-bucket/output/", )
2. トレーニング
SFTTrainer クラスで教師ありファインチューニングを開始します。モデル、コンピューティング設定、トレーニングデータセット、出力パスを指定します。
from sagemaker.train import SFTTrainer from sagemaker.core.training.configs import HyperPodCompute compute = HyperPodCompute( cluster_name="my-hyperpod-cluster", instance_type="ml.p5.48xlarge", node_count=4, ) trainer = SFTTrainer( model="nova-textgeneration-lite-v2", compute=compute, training_dataset="s3://my-bucket/sft-data.jsonl", s3_output_path="s3://my-bucket/output/", ) job = trainer.train(wait=False)
SDK は、継続的事前トレーニング用の CPTTrainer、直接選好最適化用の DPOTrainer、強化ファインチューニング用の RLVRTrainer、マルチターン強化学習用の MultiTurnRLTrainer も提供しています。それぞれ同じパターンに従います。モデル、コンピューティング設定、トレーニングデータセット、出力パスを指定します。
3. モニタリング
SDK から直接トレーニングの進行状況を追跡します。stream_logs() を使用して Amazon CloudWatch Logs をリアルタイムでストリーミングするか、show_metrics() を使用してジョブ完了後に損失率や学習率などのトレーニングメトリクスをプロットします。
# Stream CloudWatch logs in real-time (blocks until job completes) trainer.stream_logs(poll=5) # Or stream only the last N lines trainer.stream_logs(tail_lines=50) # Plot training metrics (training_loss, lr, reward_score) df = trainer.show_metrics()
4. 評価
BenchMarkEvaluator クラスを使用して、トレーニング済みモデルを組み込みベンチマークタスクと照らし合わせて評価します。サポートされているベンチマークには、MMLU (Massive Multitask Language Understanding)、BBH (Advanced Reasoning Tasks)、GPQA (Graduate-Level Google-Proof Q&A) などがあります。その他の評価オプションについては、評価者 を参照してください。
from sagemaker.train.evaluate import BenchMarkEvaluator, get_benchmarks # Get the trained model s3 path from the completed training job s3_path = job.model_artifacts.s3_model_artifacts Benchmark = get_benchmarks() evaluator = BenchMarkEvaluator( benchmark=Benchmark.MMLU, model=s3_path, s3_output_path="s3://my-bucket/eval-output/", ) execution = evaluator.evaluate()
5. デプロイ
トレーニング後、カスタマイズされたモデルを本番環境にデプロイします。SageMaker Python SDK を使用すると、SageMaker リアルタイム推論エンドポイントと Amazon Bedrock オンデマンドにデプロイできます。レイテンシー、スループット、コスト要件に最適なデプロイオプションを選択します。
SageMaker リアルタイム推論
SageMaker リアルタイム推論エンドポイントにデプロイして、インスタンスタイプ、スケーリングポリシー、エンドポイント設定を完全に制御します。ModelBuilder を使用して SageMaker エンドポイントを作成およびデプロイします。
from sagemaker.serve import ModelBuilder # Get the trained model checkpoint path s3_path = job.model_artifacts.s3_model_artifacts # Deploy to SageMaker Real-time Inference endpoint builder = ModelBuilder( model=s3_path, instance_type="ml.p5.48xlarge", env_vars={ "CONTEXT_LENGTH": "8000", "MAX_CONCURRENCY": "2", }, ) builder.build().deploy() # Build the model and deploy to an endpoint
Bedrock オンデマンド
オンデマンド推論は、プロビジョンドキャパシティなしで従量課金制の価格設定を提供します。このオプションは、LoRA ベースのカスタマイズに適用されます。可変または予測不能なトラフィックパターンがある場合は、オンデマンドを使用します。
from sagemaker.serve import BedrockModelBuilder # Deploy with Bedrock On-Demand builder = BedrockModelBuilder( model=s3_path, throughput_type="on-demand", ) deployment = builder.deploy()
主な機能
レシピのオーバーライドの優先順位
SageMaker Python SDK は、トレーニングレシピにレイヤー設定システムを使用します。トレーニングジョブを起動すると、パラメータは次の優先順位 (最高から最低) で解決されます。
-
パラメータオーバーライド – トレーナーコンストラクタの
overridesディクショナリを介して直接渡される値。これらは最も優先度が高く、レシピ YAML または Hub のデフォルトとの競合する値を上書きします。 -
レシピ YAML – 指定したレシピ YAML ファイル (S3 パスまたはローカルファイル)。これは完全なトレーニング設定を定義しますが、
overridesディクショナリによって選択的にオーバーライドできます。 -
Hub のデフォルト – モデルとトレーニング方法に基づいて SageMaker Model Hub から自動的に解決されるデフォルトのレシピ。カスタムレシピまたはオーバーライドが指定されていない場合、これらは適切な初期設定を提供します。
例えば、他のすべてのパラメータに Hub のデフォルトを使用しながら、最大トレーニングステップと学習率をオーバーライドするには、次のようにします。
from sagemaker.train import SFTTrainer from sagemaker.core.training.configs import HyperPodCompute compute = HyperPodCompute( cluster_name="my-hyperpod-cluster", instance_type="ml.p5.48xlarge", node_count=2, ) trainer = SFTTrainer( model="nova-textgeneration-lite-v2", training_dataset="s3://my-bucket/sft-data.jsonl", s3_output_path="s3://my-bucket/output/", base_job_name="my-sft-training-job", overrides={ "training_config.trainer.max_epochs": 1, "training_config.model.optim.lr": 1e-5, }, ) job = trainer.train(wait=False)
この例では、max_epochs と optim.lr はオーバーライドによって明示的に設定されます。他のすべてのトレーニングパラメータ (バッチサイズ、ウォームアップステップ、モデル並列など) は、nova-textgeneration-lite-v2 モデルの Hub のデフォルトレシピにフォールスルーされます。
エンタープライズインフラストラクチャのサポート
SDK は複数のコンピューティングプラットフォームをサポートし、インフラストラクチャの設定、検証、ジョブオーケストレーションを自動的に管理します。
-
SageMaker トレーニングジョブ – インスタンスの自動プロビジョニングとティアダウンによるフルマネージドトレーニング。オンデマンドモードとサーバーレスモードの両方をサポートします。
-
SageMaker HyperPod – 耐障害性と自動ノード復旧が組み込まれた大規模分散トレーニング用の永続的クラスター。
すべてのプラットフォームで、SDK はジョブを送信する前にインスタンスタイプ、レシピ設定、データセット形式を検証し、ワークフローの早い段階でエラーを防止します。
包括的な評価
カスタマイズされたモデルを標準ベンチマークと照らし合わせて評価します。SDK には、次のエバリュエーターが用意されています。
-
BenchMarkEvaluator– MMLU、BBH、GPQA などの標準化されたパフォーマンスベンチマークを実行します -
LLMAsJudgeEvaluator– 大規模言語モデルを使用してモデル出力を評価します -
InspectAIEvaluator– InspectAI またはカスタムベンチマークタスクを実行します -
CustomScorerEvaluator– カスタム定義の評価関数を適用します -
MultiTurnRLEvaluator– ロールアウトベースのメトリクスを使用してマルチターンエージェントモデルを評価します
本番稼働のデプロイ
SageMaker Python SDK を使用すると、複数のデプロイオプションを使用してカスタマイズされたモデルをデプロイできます。
-
SageMaker リアルタイム推論 – カスタムホスティング要件に合わせて、インスタンスタイプ、スケーリングポリシー、エンドポイント設定を完全に制御します。
-
Bedrock オンデマンド – プロビジョンドキャパシティなしの従量課金制の価格設定。LoRA ベースのカスタマイズに適用されます。
ModelBuilder または BedrockModelBuilder クラスを使用して、トレーニング済みモデルをデプロイします。
データミキシング
注記
データミキシングは、Nova Forge サブスクライバー専用です。
SageMaker Python SDK は、データミキシングを設定するための DataMixingConfig クラスを提供します。
DataMixingConfig をトレーナーとともに使用して、顧客データの割合と Nova データカテゴリ間の分布を指定します。
from sagemaker.train import SFTTrainer from sagemaker.train.data_mixing_config import DataMixingConfig from sagemaker.core.training.configs import HyperPodCompute data_mixing = DataMixingConfig( customer_data_percent=70.0, nova_data_percentages={ "code": 40.0, "reasoning": 30.0, "instruction-following": 30.0, }, ) trainer = SFTTrainer( model="nova-textgeneration-lite-v2", compute=HyperPodCompute( cluster_name="my-cluster", instance_type="ml.p5.48xlarge", node_count=4, ), training_dataset="s3://my-bucket/sft-data.jsonl", s3_output_path="s3://my-bucket/output/", data_mixing_config=data_mixing, ) job = trainer.train(wait=False)
詳細はこちら
SageMaker Python SDK を使用して Nova モデルのカスタマイズを開始する準備はできましたか? 詳細なガイド、API リファレンス、その他の例については、GitHub の sagemaker-python-sdk