🧠

Amazon SageMaker でのデプロイパターンについてのメモ

2024/08/05に公開

こんにちは、初めましての方は初めまして。株式会社 Fusic の瓦です。暑いです。暑すぎて頭がぼーっとするせいか、暑い以外の言葉が出てきません。

最近は Amazon Bebrock のアップデートが盛んすが、世の中では LLM 以外の機械学習モデルも多く開発されています。そのようなモデルを AWS で使用する際は機械学習のサービスである Amazon SageMaker を使用してデプロイすることも多いです。しかし、SageMaker のデプロイオプションは 4 つあり、自分でも時々それぞれのメリット、デメリットが分からなくなる時があるので、勉強も兼ねて SageMaker のデプロイオプションについてまとめてみました(間違っている箇所がある場合はいつでもコメントください)

Amazon SageMaker を使ったモデルデプロイについて

最初に前提知識として、推論の方法はリクエストとして受けたデータを順次処理する「リアルタイム推論」ある程度データをまとめて処理する「バッチ推論」 の大きく二つに分けられます。例えば API 経由で画像を投げて、写っている物体のラベルが返ってくるような推論はリアルタイム推論となります。

Amazon SageMaker には推論のために、以下の 4 つのデプロイオプションが用意されています[1]。(†が付いているものがリアルタイム推論、‡が付いているものがバッチ推論です)

  • †SageMaker Real-Time Inference(リアルタイム推論)
  • †SageMaker Serverless Inference(サーバーレス推論)
  • ‡SageMaker Batch Transform(バッチ変換)
  • ‡SageMaker Asynchronous Inference(非同期推論)

また、BlackBelt の資料内では括弧付きで SageMaker Processing Job を使用した推論についても言及されています。以下ではそれぞれについて比較していきたいと思います。

とりあえず比較を見たい人用

以下にそれぞれのデプロイオプションの比較を表にまとめておきます。また、BlackBelt に記載されている表も合わせて載せておきます。

リアルタイム推論 サーバーレス推論 バッチ推論 非同期推論 Processing Job
レスポンスがリアルタイムか △(コールドスタート) × × ×
課金体系 デプロイ中ずっと 使用したときだけ 使用したときだけ 使用したときだけ 使用したときだけ
データサイズ
GPUが使えるか ×


各デプロイオプションの比較

また BlackBelt の 41 ページにはどのデプロイオプションを使えばいいかのフローチャートも載っていますので、実際に使用する場合には参考にするといいと思います。

SageMaker Real-Time Inference

このデプロイオプションは、リアルタイム推論を実現する典型的なものになります。推論に使用するインスタンスタイプやどのイメージを使用するか、起動するインスタンス数やそれぞれのインスタンスに流すリクエストの割合を指定することで簡単に推論のエンドポイントが作成できます。これだけだと EC2 や Load Balancer を使用するのと変わりないように聞こえますが、それらのサービスの設定をせずとも SageMaker がそれらを自動で管理してくれるというところにメリットがあります。BlackBelt にある以下の図がとても分かりやすいと思います。


リアルタイム推論での SageMaker 内の構成図

このデプロイオプションを使用するメリットとしては

  • API エンドポイントを簡単に作成できるため、外のサービスとの連携が容易にできる。
  • 高速なレスポンスが可能になる。
  • SageMaker が自動でスケーリングなどの管理をしてくれる。
  • 複数のモデルを一つのエンドポイントで使用できる。

が挙げられます。一方で、デメリットは

  • 大きなデータの処理が出来ない(ペイロードの上限は 6 MB まで)
  • デプロイしている間課金される。

ことにあります。この中で、「デプロイしている間中ずっと課金される」というデメリットに対処できるのが次に挙げるサーバーレス推論になります。

SageMaker Serverless Inference

このデプロイオプションはその名の通り、サーバーレスな推論エンドポイントをデプロイ出来ます。イメージとしては、AWS Lambda での処理がかなり近いと思います。メリットとしては、

  • 使用している間だけ料金がかかる。
  • API エンドポイントを簡単に作成できるため、外のサービスとの連携が容易にできる。
  • SageMaker が自動でスケーリングなどの管理をしてくれる。

が挙げられます。デメリットは

  • コールドスタートとなるため、レスポンスが遅くなる傾向にある。
  • GPU が使用できない。
  • 複数のモデルを一つのエンドポイントでは使用できない。

です(僕が調べきれていないだけで、もっと制限がある可能性があります)通常はリアルタイム推論のエンドポイントを用意しておいて、急激なトラフィックの増加が発生したときはサーバーレス推論も起動して対応する、みたいなことが SageMaker だけで出来ると嬉しいのかもしれませんが、今は恐らく出来ないのでメリット、デメリットを考慮したうえでどちらかを選択するのがいいのかと思います。

SageMaker Batch Transform

このデプロイオプションはバッチ推論を実現するものとなります。特にリアルタイムな推論を必要としない大規模なデータの推論に適しています。例えば EC サイトでユーザーの閲覧データを溜めておき、ユーザーの閲覧が少ない深夜帯に一気に推薦アイテムの更新をして次の日のユーザーに向けて反映するといったユースケースで使用できます。「データをどのように分散するか」「どのように推論結果をまとめるか」を指定することで、複数のインスタンスを立てて分散して推論してくれます。メリットとしては

  • SageMaker が自動で推論コンテナのスケーリングなどの管理をしてくれる。
  • 使用している間だけ料金がかかる。
  • 「毎日 0 時に推論」など、スケジュールを組んでの推論が可能。

が挙げられます。一方で、デメリットは

  • リアルタイムでは推論結果を確認出来ない。
  • 内部的なシステムの関係でエラーハンドリングが大変(後述)。

です。Batch Transform については弊社のハンの記事が良くまとまっているので、合わせてご覧いただければと思います。

SageMaker Asynchronous Inference

このデプロイオプションはサーバーレス推論とあまり変わりませんが、リアルタイムで推論結果が返ってこないという点に特徴があります。つまり、リクエストは一旦キューに溜められ、インスタンスが使用できるようになるとキューからメッセージが取り出されて推論処理が行われます。その後推論結果を S3 に格納します。オプションで SNS で推論処理が終了した際に通知を受け取るようにすることも出来ます。メリットとしては

  • 大きなデータを処理することが出来る(ペイロードの上限は 1GB まで)
  • 使用している間だけ料金がかかる。
  • GPU を使用することが出来る。

が挙げられます。一方で、デメリットは

  • タイムアウトの上限が存在する(最大 15 分まで)
  • リアルタイムで推論結果を確認出来ない場合がある。

です。AWS コンソールからは見つけられなかったので詳細が分からないのですが、オートスケーリングの設定を適用することも出来るらしいです[3]

SageMaker Processing Job

Processing Job は名前の通りデータの処理を行うためのサービスですが、このサービスをうまく使うことで上記のデプロイオプションのどれも使用できないようなパターンにも対応することが出来ます。使用するイメージや起動するインスタンスとその数、推論対象のデータ、出力先の S3 パスを指定することで任意のコンテナやスクリプトを使用して推論を行うことが出来ます。上の 4 つのデプロイオプションがどれも選択出来ない場合はこのオプションを選ぶといいと思います。一応メリットとしては

  • 大きなデータを処理することが出来る。
  • 使用している間だけ料金がかかる。
  • GPU を使用することが出来る。
  • タイムアウトの上限がない。

で、デメリットは

  • 成功通知、エラー通知は自分で設定する必要がある。

となります。経験談ですが、このオプションは特に画像のような数千の大きいサイズのファイルを複数のインスタンスで分散して処理する場合に使用できるオプションだと思います。

まとめ

この記事では SageMaker のデプロイオプションについてまとめてみました。オプションが多いとどれが適しているのか迷ってしまいますが、この記事がその解決の助けになれば幸いです。もちろん、SageMaker を使わずとも EC2 や Auto Scaling を使って推論環境を構築することはやろうと思えば出来ますが、サービスを使って簡単に環境構築が出来るならそれに任せて他のタスクに時間を割けるので、SageMaker を使いこなせるようになっていきたいです。

最後に宣伝になりますが、機械学習でビジネスの成長を加速するために、Fusic の機械学習チームがお手伝いたします。機械学習のPoCから運用まで、すべての場面でサポートした実績があります。もし、困っている方がいましたら、ぜひ Fusic にご相談ください。お問い合わせからでも気軽にご連絡いただけます。また Twitter の DM でのメッセージも大歓迎です。

脚注
  1. https://aws.amazon.com/jp/blogs/news/ml-enablement-series-dark05/ ↩︎

  2. https://logmi.jp/tech/articles/324734 ↩︎

  3. https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/async-inference-autoscale.html ↩︎

GitHubで編集を提案
Fusic 技術ブログ

Discussion