何が変わったか
Amazon SageMaker AI Async Inferenceに、InvokeEndpointAsync APIでリクエストボディに直接ペイロードを送信できる機能が追加されました。これにより、従来のS3アップロードを経由する必要がなくなり、128,000バイトまでのペイロードでネットワークラウンドトリップを削減し、クライアントコードの簡略化が可能になります。(出典: https://aws.amazon.com/blogs/machine-learning/amazon-sagemaker-ai-async-inference-now-supports-inline-request-payloads/)
仕組みの詳細
InvokeEndpointAsync APIにBodyパラメータが新規追加され、このパラメータが指定されている場合、ペイロードはAPIリクエスト本体に直接含まれます。InputLocationパラメータとは排他で、両方を指定したリクエストはValidationErrorで拒否されます。出力は従来通りS3のOutputLocationに書き込まれます。最大ペイロードサイズは128,000バイト(raw payload)に制限されています。(出典: https://aws.amazon.com/blogs/machine-learning/amazon-sagemaker-ai-async-inference-now-supports-inline-request-payloads/)
移行手順とコード例
従来のS3アップロードを経由するコードから、Bodyパラメータを使用するコードへの変更は以下の通りです。
従来のコード
s3.put_object(Bucket="my-async-bucket", Key=input_key, Body=payload)
input_location = f"s3://my-async-bucket/{input_key}"
response = sagemaker_runtime.invoke_endpoint_async(
EndpointName="my-async-endpoint",
InputLocation=input_location,
ContentType="application/json",
)
新しいコード
response = sagemaker_runtime.invoke_endpoint_async(
EndpointName="my-async-endpoint",
Body=payload,
ContentType="application/json",
)
この変更により、S3アップロードの手順が省略され、ネットワークオーバーヘッドが削減されます。(出典: https://aws.amazon.com/blogs/machine-learning/amazon-sagemaker-ai-async-inference-now-supports-inline-request-payloads/)
パフォーマンス特性
128,000バイト以下のペイロードに対しては、S3アップロードのネットワークラウンドトリップが削減されるため、処理遅延の低減が期待できます。この機能は31のAWSリージョンで利用可能で、従来の非同期エンドポイントと互換性があります。(出典: https://aws.amazon.com/blogs/machine-learning/amazon-sagemaker-ai-async-inference-now-supports-inline-request-payloads/)
まとめ
InvokeEndpointAsyncAPIでBodyパラメータを使用し、S3経由のペイロードアップロードを回避できる- 128,000バイト以下のペイロードに対してネットワークラウンドトリップを削減し、処理遅延の低減が可能
- 31のAWSリージョンで利用可能で、従来の非同期エンドポイントと互換性がある
- クライアントコードの簡略化と運用面の軽減が実現できる
- エンジニアは公式ドキュメントで詳細な設定手順を確認できる