Closed8

SageMakerの推論エンドポイントで複数モデルをホストするには

なゆゆなゆゆ

現在サポートされている選択肢

SageMakerでは推論エンドポイントの効果的な利用オプションが随時追加されており、後から見ると調査コストが高いので、本日時点での情報を整理していきたい。

  • 推論コンポーネント(一番新しい選択肢、re:Invent2023で追加)
  • マルチモデルエンドポイント
  • マルチコンテナエンドポイント

上記はSageMakerのドキュメントに記載されている。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/realtime-endpoints.html

なゆゆなゆゆ

シングルポイントエンドポイントの課題

元々あったのはシングルモデルエンドポイント。SageMakerのモデルに対して1:1で推論エンドポイントを作成する方法。
ガイドだと以下のページに該当するが、現在は主に推論コンポーネントの使用を推した記載にリダイレクトされるので、コンテキストが分からないと若干経緯が理解しにくくなっている。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/realtime-single-model.html

この方法だと1つのモデルに対して必ずインスタンスが必要になるため、トラフィックがあまりないモデルについても指定されたインスタンスを起動しておく必要があった。
また、単純にモデルの数だけエンドポイントが増えるため、管理コストも高くなってしまう。

なゆゆなゆゆ

マルチモデルエンドポイント

マルチモデルエンドポイントでは、1つのエンドポイントに複数のモデルをデプロイすることができる。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/multi-model-endpoints.html

これにより、あるインスタンスの空いているリソースで別のモデルを使って推論するといったことが可能になり、はるかにリソースを効率的に使用することができる。

ただし、重要なポイントとして、同じMLフレームワークのモデルのエンドポイントをまとめるという考えになる。

マルチモデルエンドポイントは、共有サービングコンテナ上で同じ ML フレームワークを使用する多数のモデルをホストするのに理想的です。
https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/multi-model-endpoints.html#how-multi-model-endpoints-work

つまり、フレームワークが異なる場合は別の方法が必要になる。

また、S3バケットの同じパスプレフィックスにモデルアーティファクトを配置しておく必要もある。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/create-multi-model-endpoint.html

https://dev.classmethod.jp/articles/amazon-sagemaker-multi-model-endpoints-introduction/

なゆゆなゆゆ

マルチコンテナエンドポイント

マルチコンテナエンドポイントを使うことにより、異なるフレームワークのモデルを1つのエンドポイントにホストすることができるようになった。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/multi-container-endpoints.html

これが2023年3月のこと。

https://aws.amazon.com/jp/about-aws/whats-new/2021/03/announcing-support-for-multiple-containers-on-amazon-sageamker-inference-endpoints/

なゆゆなゆゆ

推論コンポーネント

生成AIの出現により、さらに推論エンドポイントのリソース効率を上げるため、re:Invent2023で推論コンポーネントが登場した。

https://aws.amazon.com/jp/blogs/news/amazon-sagemaker-adds-new-inference-capabilities-to-help-reduce-foundation-model-deployment-costs-and-latency/

推論コンポーネントにより、推論エンドポイントに対して複数のモデルをデプロイすることができるようになった。
このころに出ている情報では、生成AIモデルの複数デプロイに関するものが多いため、生成AIモデルを意識した機能であることが推測されるが、既存のモデルでも普通に利用できると考えられる。

概念としては、推論エンドポイントとして起動しているマネージドインスタンス上で動く、コンテナアプリケーション粒度のものと捉えるとよさそう。

なゆゆなゆゆ

推論コンポーネントについては以下のセッションをみてもらうと分かりやすい。

https://www.youtube.com/watch?v=6xENDvgnMCs

マルチモデルエンドポイントとの差としては以下のように紹介されていた。

Multi Model Endpoints
Smaller models, homogeneous and scaling
For larger FMs, use SageMaker Inference Component Endpoints

なゆゆなゆゆ

推論コンポーネントのデプロイ

SageMaker Python SDKの場合はモデルのdeployメソッドのendpoint_typeEndpointType.INFERENCE_COMPONENT_BASEDを設定します。

# https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/realtime-endpoints-deploy-models.html

predictor = model.deploy(
    initial_instance_count = 1,
    instance_type = "ml.p4d.24xlarge", 
    endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED,
    resources = resources,
)

boto3の場合、create_inference_componentEndpointNameおよびVariantNameを指定の上実行する。

# https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/realtime-endpoints-deploy-models.html

sagemaker_client.create_inference_component(
    InferenceComponentName = inference_component_name,
    EndpointName = endpoint_name,
    VariantName = variant_name,
    Specification = {
        "Container": {
            "Image": "image-uri",
            "ArtifactUrl": model_url,
        },
        "ComputeResourceRequirements": {
            "NumberOfCpuCoresRequired": 1, 
            "MinMemoryRequiredInMb": 1024
        }
    },
    RuntimeConfig = {"CopyCount": 2}
)
このスクラップは6ヶ月前にクローズされました