翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
生成 AI 推論デプロイの推奨事項を取得する
AI レコメンデーションジョブは、モデルとワークロードの特性を分析して、コスト、レイテンシー、スループットに最適化されたデプロイ設定を生成します。このサービスは、インスタンスタイプを評価し、投機的デコードなどの最適化を適用し、実際の GPU インフラストラクチャの各設定をベンチマークします。
前提条件
レコメンデーションジョブを作成する前に、以下が必要です。
-
SafeTensor の重みを持つ HuggingFace チェックポイント形式で Amazon S3 に保存されるモデルアーティファクト
-
レコメンデーション出力用の Amazon S3 バケット
-
モデルアーティファクトと出力バケットへの SageMaker AI アクセスを許可する AWS Identity and Access Management (IAM) 実行ロール
ステップ 1: レコメンデーションジョブを作成する
レコメンデーションジョブはモデルを分析し、デプロイのレコメンデーションを生成します。モデルの場所、出力の場所、ワークロード設定、パフォーマンスターゲットを指定します。
Python (boto3)
response = client.create_ai_recommendation_job( AIRecommendationJobName="my-recommendation-job", ModelSource={ "S3": { "S3Uri": "s3://DOC-EXAMPLE-BUCKET/models/my-model/", } }, OutputConfig={ "S3OutputLocation": "s3://DOC-EXAMPLE-BUCKET/recommendations/" }, PerformanceTarget={ "Constraints": [ {"Metric": "ttft-ms"} ] }, AIWorkloadConfigIdentifier="my-recommendation-workload", RoleArn="arn:aws:iam::111122223333:role/ExampleRole", ) print(response["AIRecommendationJobArn"])
AWS CLI
aws sagemaker create-ai-recommendation-job \ --ai-recommendation-job-name "my-recommendation-job" \ --model-source '{"S3": {"S3Uri": "s3://DOC-EXAMPLE-BUCKET/models/my-model/"}}' \ --output-config '{"S3OutputLocation": "s3://DOC-EXAMPLE-BUCKET/recommendations/"}' \ --performance-target '{"Constraints": [{"Metric": "ttft-ms"}]}' \ --ai-workload-config-identifier "my-recommendation-workload" \ --role-arn "arn:aws:iam::111122223333:role/ExampleRole" \ --region us-west-2
オプションで次のパラメータを指定することもできます。
ComputeSpec-
評価するインスタンスタイプを制限します (最大 3 つ)。例:
{"InstanceTypes": ["ml.g5.12xlarge", "ml.p4d.24xlarge"]} OptimizeModel-
投機的デコードなどのモデルの最適化を可能にする
trueには、 に設定します。 InferenceSpecification-
推論フレームワークを指定します。有効な値:
LMI、VLLM。
ステップ 2: ジョブのステータスをモニタリングする
終了状態になるまでジョブステータスをポーリングします。
Python (boto3)
import time while True: response = client.describe_ai_recommendation_job( AIRecommendationJobName="my-recommendation-job" ) status = response["AIRecommendationJobStatus"] print(f"Status: {status}") if status in ("Completed", "Failed", "Stopped"): break time.sleep(30)
AWS CLI
aws sagemaker describe-ai-recommendation-job \ --ai-recommendation-job-name "my-recommendation-job" \ --region us-west-2
ステップ 3: レコメンデーションを確認する
ジョブが完了すると、describe レスポンスにはRecommendations配列が含まれます。各レコメンデーションには、以下の情報を含むデプロイ可能な設定が含まれています。
DeploymentConfiguration-
コンテナイメージ URI、インスタンスタイプ、インスタンス数、環境変数。この設定を使用して、SageMaker AI エンドポイントに直接デプロイできます。
ExpectedPerformance-
最初のトークンまでの時間 (TTFT)、P90 および P99 でのリクエストレイテンシー、1 秒あたりのトークンのスループット、リクエストスループットなどの検証済みパフォーマンスメトリクス。
OptimizationDetails-
投機的デコードやカーネルチューニングなどの最適化手法とその設定パラメータを適用しました。
次の最適化手法を適用できます。
- 投機デコーディング
-
投機的デコードは、一度に 1 つのトークンではなく複数のトークンを並行して処理することで、テキスト生成を高速化します。軽量投機家は 1 つのステップで複数の候補トークンを提案し、プライマリモデルはそれらを 1 つのフォワードパスで一緒に検証し、独自のディストリビューションに同意する候補を保持して残りを破棄します。投機家は、プライマリモデルのデータディストリビューションに合わせてトレーニングされ、より多くの提案が受け入れられます。これにより、フォワードパスごとに生成されるより有用なトークンに直接変換されます。プライマリモデルの出力分布は保持されるため、応答品質は変更されません。その結果、1 秒あたりの出力トークンが増加し、トークン間レイテンシー (ITL) が低くなり、スループットメトリクスが向上します。
- カーネルチューニング
-
カーネルチューニングは、モデル実行グラフを解析して、注意やフュージョン演算子カーネルなど、チューニングに適したパフォーマンスクリティカルなカーネルを特定することから始めます。その後、起動パラメータとタイルパラメータが調整され、実装がターゲット GPU ハードウェアと同時実行などの予想されるトラフィックパターンによりよく一致します。これらのパラメータはメモリの再利用、キャッシュのローカリティ、並列処理に影響を与え、実行効率を向上させます。データのロードとコンピューティングに使用されるパイプラインステージの数も調整され、メモリの移動と計算の重複に役立ちます。モデル、ハードウェア、サービスワークロードの特定の組み合わせに合わせてこれらのパラメータを調整することで、カーネル調整は GPU を最大限に活用することでスループットとレイテンシーを向上させます。
次のパフォーマンスターゲットメトリクスを使用できます。
ttft-ms-
最初のトークンまでの時間をミリ秒単位で指定します。
throughput-
1 秒あたりのトークン数。
cost-
デプロイ設定の 1 時間あたりのコスト。
ExpectedPerformance レスポンスの各メトリクスには、統計メジャーを示すStatフィールド、Value、およびオプションの が含まれますUnit。一般的な統計には、average、、p50、p90、p95p99、max、および が含まれますmin。
レコメンデーションリソースを管理する
次のオペレーションを使用して、レコメンデーションジョブとワークロード設定を管理します。
# List recommendation jobs response = client.list_ai_recommendation_jobs(MaxResults=10) for job in response["AIRecommendationJobs"]: print(f"{job['AIRecommendationJobName']} - {job['AIRecommendationJobStatus']}") # Stop a running job client.stop_ai_recommendation_job( AIRecommendationJobName="my-recommendation-job" ) # Delete a job (must be in a terminal state) client.delete_ai_recommendation_job( AIRecommendationJobName="my-recommendation-job" ) # List workload configurations response = client.list_ai_workload_configs(MaxResults=10) for config in response["AIWorkloadConfigs"]: print(f"{config['AIWorkloadConfigName']} - {config['AIWorkloadConfigArn']}") # Delete a workload configuration client.delete_ai_workload_config( AIWorkloadConfigName="my-recommendation-workload" )