Hugging Face Inference Endpoints ケーススタディ

概要

Hugging Face は、いくつかの CPU ベースの機械学習モデルを、自己管理の AWS インフラストラクチャから Hugging Face Inference Endpoints に移行しました。この変更は、認知負荷とデプロイ時間を削減する必要性に駆られたもので、レイテンシの低減と Hugging Face Hub からモデルをデプロイするワークフローの簡素化を実現しました。

ワークフローの簡素化

Inference Endpoints に移行することで、モデルをトレーニングから本番環境へ移すために必要なステップ数が大幅に削減されます。

以前のワークフロー(AWS ECS + Fargate)

以前は、プロセスは複雑な手動ステップの連鎖を伴っていました:

  1. CML と transformers を使用して GPU インスタンス上でモデルをトレーニングする。
  2. モデルを Hugging Face Hub にアップロードする。
  3. FastAPI を使用してモデルを提供するカスタム API を構築する。
  4. API を Docker コンテナにラップする。
  5. コンテナを AWS Elastic Container Repository (ECR) にアップロードする。
  6. モデルを AWS Elastic Container Service (ECS) クラスタにデプロイする。

現在のワークフロー(Inference Endpoints)

新しいマネージドプロセスは、これらのステップを 3 つに簡素化します:

  1. CML と transformers を使用して GPU インスタンス上でモデルをトレーニングする。
  2. モデルを Hugging Face Hub にアップロードする。
  3. Hugging Face Inference Endpoints を使用してデプロイする。

パフォーマンスとレイテンシのベンチマーク

eu-east-1 リージョンにデプロイされた RoBERTa でファインチューニングしたテキスト分類モデルを対象に実施したテストは、Inference Endpoints が従来のカスタム ECS 設定に比べて優れたレイテンシを提供することを示しています。

インスタンスサイズ vCPU(コア) メモリ(GB) ECS レイテンシ(ms) Inference Endpoints レイテンシ(ms)
Small 1 2 - ~296
Medium 2 4 - 156 ± 51
Large 4 8 ~200 80 ± 30
XLarge 8 16 - 43 ± 31

「Large」インスタンスサイズでは、標準の Hugging Face コンテナは ECS 上で実行されたカスタムコンテナの 2 倍以上の速度で、最も遅い応答は 108ms でした。

コスト分析

Inference Endpoints は従来の AWS Fargate 設定よりもコストが高くなりますが、MLOps の負荷軽減に対するコスト増は許容できるトレードオフと考えられています。

インスタンスサイズ vCPU メモリ(GB) ECS コスト Inference Endpoints コスト % 差異
Small 1 2 $33.18 $43.80 24%
Medium 2 4 $60.38 $87.61 31%
Large 4 8 $114.78 $175.22 34%
XLarge 8 16 $223.59 $350.44 50%

大規模な CPU インスタンスの場合、月額コスト差は約 $60 です。Hugging Face は、数百の ML マイクロサービスをデプロイする組織にとってはコスト差が別のアプローチを検討すべきかもしれないと指摘していますが、現時点の規模では時間の節約が金銭的コストを上回ります。

デプロイと運用上の考慮事項

デプロイ方法

ユーザーは GUI、RESTful API、または hugie コマンドラインツールを使用して Inference Endpoints をデプロイできます。これにより、1 行の設定でデプロイが可能です(例:hugie endpoint create example/development.json)。

コードとしてのインフラストラクチャ

本稿執筆時点では、Inference Endpoints 用のカスタム Terraform プロバイダーは提供されておらず、Terraform のステートマシンでデプロイを追跡したいユーザーにとっては欠如している機能とされています。

マルチモデルホスティング

カスタム Endpoint Handler クラスを作成することで、単一のエンドポイントに複数のモデルをホストすることが可能です。これは GPU 推論で実証されていますが、CPU インスタンスでもメモリ使用率を最大化してコスト最適化できると想定されています。

Sources