View a markdown version of this page

生成 AI 推論デプロイの推奨事項を取得する - Amazon SageMaker AI

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

生成 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

推論フレームワークを指定します。有効な値: LMIVLLM

ステップ 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、、p50p90p95p99max、および が含まれます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" )