翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Nova の蒸留
このクイックスタートガイドは、SageMaker AI で教師ありファインチューニング (SFT) を使用して Amazon Nova モデル蒸留を開始するのに役立ちます。
モデル蒸留は、大規模で高度なモデルから小規模で効率的なモデルに知識を転送する方法です。Amazon Nova モデルでは、より大きな「教師」モデル (Amazon Nova Pro や Amazon Nova Premier など) が、その機能をより小さな「生徒」モデル (Amazon Nova Lite や Amazon Nova Micro など) に渡します。これにより、より少ないリソースを使用しながら高いパフォーマンスを維持するカスタマイズされたモデルが作成されます。
主要コンポーネント
蒸留プロセスでは主に次の 2 種類のモデルが使用されます。
教師モデルはナレッジソースとして機能し、以下が含まれます。
-
Amazon Nova Pro (amazon.nova-pro-v1:0)
-
Amazon Nova Premier (amazon.nova-premier-v1:0)
生徒モデルではナレッジの受け取りと実装を行います。
-
Amazon Nova Lite (amazon.nova-lite-v1:0:300k)
-
Amazon Nova Micro (amazon.nova-micro-v1:0:128k)
-
Amazon Nova Pro (amazon.nova-pro-v1:0:300k) - Amazon Nova Premier を教師として使用する場合にのみ使用可能
ユースケース
モード蒸留は次に当てはまる場合に特に有益です。
-
レイテンシー、コスト、精度に関する厳格な要件がアプリケーションにある。
-
特定のタスクにカスタムモデルが必要であるものの、十分に品質が高いラベル付きトレーニングデータがない。
-
より小さなモデルの効率を維持しながら、高度なモデルのパフォーマンスを一致させたい。
前提条件
-
AWS アカウントAmazon Nova モデルと適切なサービスクォータ (最小 6 つの P5 インスタンスと 1 つの R5 インスタンス)。
-
SageMaker トレーニングジョブのアクセス許可がある IAM ロール。
-
トレーニングデータと出力を格納するための Amazon S3 バケット。
データ補強の設定
データ補強フェーズでは、SageMaker トレーニングジョブを使用して、教師モデルで高品質のトレーニングデータを生成します。このセクションでは、セットアッププロセスと要件について詳しく説明します。
IAM ロール
IAM ロールを作成してポリシーをアタッチするには、「ロールの作成とポリシーのアタッチ (コンソール)」を参照してください。AWS CLI を使用する場合は、create-role と attach-role-policy の手順に従います。詳細については、SageMaker AI デベロッパーガイドの「How to use SageMaker AI execution roles」を参照してください。
以下は参考用のサンプルコマンドです。
SageMaker AI 実行ロールを作成する
ロールは、SageMaker AI、Amazon Bedrock がこのロールを引き受けることを許可する信頼関係で作成されます。これにより、バッチ推論ジョブを実行するときに、これらのサービスがユーザーに代わって動作できるようになります。
aws iam create-role \ --role-name NovaCustomizationRole \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": ["sagemaker.amazonaws.com", "bedrock.amazonaws.com"] }, "Action": "sts:AssumeRole" } ] }'
必要なポリシーをアタッチする
# Attach AmazonSageMakerFullAccess aws iam attach-role-policy \ --role-name NovaCustomizationRole \ --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess # Attach AmazonBedrockFullAccess aws iam attach-role-policy \ --role-name NovaCustomizationRole \ --policy-arn arn:aws:iam::aws:policy/AmazonBedrockFullAccess # Attach S3 access policy aws iam attach-role-policy \ --role-name NovaCustomizationRole \ --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess # Attach AmazonEC2FullAccess aws iam attach-role-policy \ --role-name NovaCustomizationRole \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2FullAccess # Attach AmazonEC2ContainerRegistryFullAccess aws iam attach-role-policy \ --role-name NovaCustomizationRole \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess # Attach AmazonEC2ContainerRegistryFullAccess aws iam attach-role-policy \ --role-name NovaCustomizationRole \ --policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
次のインラインポリシーを、蒸留コンテナに必要なカスタマー実行ロールにアタッチします。
-
AWS KMSアクセス許可: 暗号化されたリソースへのアクセスや暗号化AWSキーの管理に必要な Key Management Service とやり取りすることをロールに許可します。
-
IAM:PassRole: このアクセス許可は、多くの場合、あるサービスがこのロールを別のサービスに渡す必要がある場合に必要です。これは、AWSサービス統合の一般的なパターンです。
aws iam put-role-policy \ --role-name NovaCustomizationRole \ --policy-name Distillation-Additional-Permissions\ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "*" } ] }
Amazon VPC 設定
を使用して SageMaker AI トレーニングジョブの Amazon VPC 設定を作成するにはAWS マネジメントコンソール、SageMaker トレーニング用のプライベート VPC を設定する (コンソール)」の手順に従います。
新しい Amazon VPC を作成する
Name: Distillation-VPC IPv4 CIDR: 10.0.0.0/16 (or your preferred range) Availability Zones: 2 Public Subnets: 2 Private Subnets: 2 NAT Gateways: 1 (in one AZ)
セキュリティグループを作成する
Name: Distillation-SG Description: Security group for data distillation jobs Inbound Rules: Allow all traffic from self Outbound Rules: Allow all traffic (0.0.0.0/0)
以下のサービスの VPC エンドポイントを作成する
com.amazonaws.[region].s3 com.amazonaws.[region].sagemaker.api com.amazonaws.[region].sagemaker.runtime com.amazonaws.[region].bedrock.api com.amazonaws.[region].bedrock.runtime com.amazonaws.[region].sts com.amazonaws.[region].logs com.amazonaws.[region].ecr.api com.amazonaws.[region].ecr.dkr
エンドポイントごとに以下を実行:
-
Distillation-VPC を選択
-
プライベートサブネットを選択
-
Distillation-SG セキュリティグループを選択
AWS KMS キー
Amazon Bedrock バッチ推論を使用する場合は、データのセキュリティとコンプライアンスにAWS KMSキーが必要です。Amazon Bedrock バッチ推論ジョブでは、保管時のデータ保護を確保するために、入力と出力の Amazon S3 バケットをAWS KMSキーで暗号化する必要があります。
次のコマンドAWS CLIで を使用して KMS キーを作成します。
# Create KMS key aws kms create-key \ --description "KMS key for Amazon Bedrock batch inference Amazon S3 bucket" \ --regionus-east-1
コマンドでは、ARN を含むキー情報が出力されます。出力例:
{ "KeyMetadata": { "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Arn": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } }
注記
次のセクションで Amazon S3 バケットの作成に必要になるため、出力から KMS キー ARN を保存します。
Amazon S3 バケット
2 種類の Amazon S3 ストレージが必要です。カスタマー管理の Amazon S3 バケットには、入力データと出力 manifest.json ファイルが格納されます。このバケットを作成および管理し、入力と出力の両方に 1 つのバケットを使用できます。このバケットは、機密出力データを保存し、Amazon Bedrock バッチ推論ジョブで使用されるため、KMS 暗号化で設定する必要があります。Amazon Bedrock では、バッチ推論タスクを処理するために KMS 暗号化バケットが必要です。
サービスマネージド Amazon S3 バケットにはモデルの重みが格納されます。サービスマネージド Amazon S3 バケットは、最初のトレーニングジョブ中に自動的に作成されます。マニフェストファイルを介してのみアクセス可能な特定のパスを持つ制限付きアクセスコントロールがあります。
特定の にバケットを作成するにはAWS リージョン、create-bucket CLI コマンドを使用します。
AWS KMS暗号化を使用して Amazon S3 バケットを作成するコマンドの例。をAWS KMSキー ARN {kms_key_arn}に置き換えます。まだ作成していない場合は、最初にAWS KMSキーを作成する必要があります。
aws s3api create-bucket \ --bucket {my_bucket_name} \ --region {aws_region} \ --create-bucket-configuration LocationConstraint={aws_region} \ --server-side-encryption-configuration '{ "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "aws:kms", "KMSMasterKeyID": "{kms_key_arn}" }, "BucketKeyEnabled": true } ] }'
SageMaker トレーニングジョブの開始
トレーニングジョブを開始する前に、データを準備します。
データ形式の要件 - 入力データセットは JSONL 形式にし、各行に逆形式のサンプルが含まれている必要があります。詳細については、「理解モデルを蒸留するためのデータの準備」を参照してください。
データセットの制約
-
最小プロンプト: 100
-
最大ファイルサイズ: 2 GB
-
最大の行の長さ: 180 KB
-
ファイル形式: JSONL のみ
入力データをアップロードするには、次のコマンドを実行します。
aws s3 cp /path/to/input-data/ s3://customer-input-data-bucket/ —recursive
データ補強レシピ
蒸留レシピは SageMaker HyperPod レシピrecipes-collection/recipes/fine-tuning/nova にあります。データ補強プロセスは YAML 設定ファイルによって制御されます。以下は各パラメータの詳細な説明です。すべてのフィールドが必須です。
| パラメータ | 説明 |
|---|---|
| 名前 |
トレーニングジョブのわかりやすい名前。これにより、 でジョブを識別できますAWS マネジメントコンソール。 |
| distillation_data |
データ蒸留ジョブを有効にします。このフィールドは変更しないでください。 |
| maxNumberOfPrompts |
データセット内のプロンプトの最大数。 |
| maxResponseLength |
プロンプトあたりの最大レスポンス長 (トークン)。 |
| maxInputFileSizeInGB |
入力ファイルの最大サイズ (GB 単位)。 |
| maxLineLengthInKB |
入力ファイル内の 1 行の最大サイズ (KB 単位)。 |
| maxStudentModelFineTuningContextLengthInTokens |
生徒モデルの最大コンテキストウィンドウサイズ (トークン)。この値を生徒モデルのキャパシティより大きくすることはできません。この値は、生徒モデルのキャパシティに応じて 32,000 または 64,000 に設定できます。 |
| teacherModelId |
教師モデル ID を設定する際は次の 2 つから選択します。
|
| 温度 |
レスポンスのランダム性を制御します (バランスを取る場合は 0.7 を推奨)。 |
| top_p |
トークンサンプリングの累積確率しきい値 (0.9 を推奨)。 |
| customer_bucket |
入力/出力データ用の Amazon S3 バケット。 |
| kms_key |
AWS KMSS3 で出力を暗号化するための キー。これは、Bedrock バッチ推論が推論ジョブによって返された出力を保存するために必要です。 |
制限
Nova Premier としての教師モデルの場合 - Amazon Bedrock バッチ推論は ARN (eu-north-1) リージョンで利用できないため、IAD リージョン (us-east-1) でのみサポートされています。
ベストプラクティス
データ準備
-
100 個の高品質のラベル付きサンプルを含めて、教師モデルの指針とする
-
送信前に品質の低いラベルを削除する
-
テキスト理解のプロンプトのベストプラクティスに従う
-
蒸留を開始する前に、教師モデルでプロンプトをテストする
モデルの選択
-
Nova Pro を一般的なユースケースの教師として使用する
-
専門分野の知識のために Nova Premier を検討する
-
レイテンシーとコストの要件に基づいて生徒モデルを選択する
パフォーマンスの最適化
-
推奨温度 (0.7) と top_p (0.9) で開始する
-
ファインチューニングの前に補強されたデータ品質を検証する
-
「ハイパーパラメータの選択」のガイドラインに従ってハイパーパラメータを調整する
PySDK でのジョブの開始
次のサンプルノートブックは、蒸留のために SageMaker トレーニングジョブを実行する方法を示したものです。詳細については、「SageMaker AI 推定器を使用したトレーニングジョブの実行」を参照してください。
import os import sagemaker,boto3 from sagemaker.pytorch import PyTorch from sagemaker.inputs import TrainingInput sagemaker_session = sagemaker.Session() role = sagemaker.get_execution_role() # SETUP job_name = <Your_job_name> # Must be unique for every run input_s3_uri = <S3 URI to your input dataset> # Must end in .jsonl file output_s3_uri = <S3 URI to your output bucket> + job_name image_uri = "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-distillation-repo:SM-TJ-DISTILL-LATEST" # Do not change instance_type = "ml.r5.4xlarge" # Recommedation is to use cpu instances instance_count = 1 # Must be 1, do not change role_arn = <IAM role to execute the job with> recipe_path = <Local path to your recipe> # Execution estimator = PyTorch( output_path=output_s3_uri, base_job_name=job_name, role=role_arn, instance_count=instance_count, instance_type=instance_type, training_recipe=recipe_path, max_run=432000, sagemaker_session=sagemaker_session, image_uri=image_uri, subnets= ['subnet-xxxxxxxxxxxxxxxxx','subnet-xxxxxxxxxxxxxxxxx'], # Add subnet groups created in previous steps security_group_ids= ['sg-xxxxxxxxxxxxxxxxx'], # Add security group created in previous steps disable_profiler=True, debugger_hook_config=False ) trainingInput = TrainingInput( s3_data=input_s3_uri, distribution='FullyReplicated', s3_data_type='Converse' ) # The keys must be "train". estimator.fit(inputs={"train": trainingInput})
CloudWatch ログ
ログは、Amazon CloudWatch の AWS アカウントにある /aws/sagemaker/TrainingJobs ロググループで使用できます。トレーニングジョブに使用されるホストごとに 1 つのログファイルが表示されます。
トレーニングの成功
トレーニングジョブが成功すると、ログの最後に「トレーニングが完了しました」というログメッセージが表示されます。
出力バケットには以下のファイルが含まれています。
-
distillation_data/manifest.json: 補強されたデータの場所が含まれます。このデータセットを使用して、Amazon Nova ファインチューニングジョブを開始できます。このデータセットでは SFT トレーニングのみがサポートされています。{ "distillation_data": "s3://customer_escrow_bucket/job_id/distillation_data/" } -
distillation_data/sample_training_data.jsonl: この JSONL ファイルには、データ品質を判断するのに役立つプレビュー用の補強されたデータのサンプルが 50 個含まれています。 -
distillation_data/training_config.json: このファイルには、Amazon Nova ファインチューニングジョブに推奨されるハイパーパラメータが含まれています。ファイルの例を次に示します。{ "epochCount": 5, "learningRate": 1e-05, "batchSize": 1, "learningRateWarmupSteps": 1 }
補強されたデータ品質の検証
ファインチューニングに進む前に、補強されたデータの品質を検証することが重要です。
-
出力バケット内の
sample_training_data.jsonlファイルを確認します。このファイルには、補強されたデータセットの 50 個のランダムサンプルが含まれています。 -
これらのサンプルについて、関連性、一貫性、ユースケースとの整合性を手動で検査します。
-
品質が期待を満たしていない場合は、入力データまたは蒸留パラメータを調整し、データ補強プロセスを再実行する必要がある場合があります。
データ補強が完了したら、2 番目のフェーズでは Amazon SageMaker HyperPod を使用して生徒モデルをファインチューニングします。詳細については、「教師ありファインチューニング (SFT)」を参照してください。
SFT トレーニングレシピでは、前のジョブから返されたデータセットパスを渡すことができます。
data_s3_path: "s3://[escrow-bucket]/[job-name]/distillation_data/training_data.jsonl"
また、前のステップで生成されたトレーニング設定をオーバーライドします。
制限事項
-
この補強されたデータでは、SFT Nova ファインチューニング手法のみがサポートされています。
-
Amazon SageMaker HyperPod では、SFT Nova ファインチューニング手法のみがサポートされています。
-
マルチモーダル蒸留はサポートされていません。
-
カスタム教師モデルはサポートされていません。