Upgrade to Pro — share decks privately, control downloads, hide ads and more …

非同期推論システムによるコスト削減と信頼性向上

 非同期推論システムによるコスト削減と信頼性向上

2024/04/23 第40回 MLOps 勉強会

# 非同期推論システムによるコスト削減と信頼性向上

CADDiでは同期的なリアルタイム推論WebAPIを用いてサービスを構築していました。事業の成長に伴い、よりスケーラブルで疎結合に推論を行うために非同期推論のシステムを開発しています。新システムにより、コスト削減・信頼性向上を実現できそうなので事例として紹介いたします。

Koki Nishihara

April 23, 2024
Tweet

More Decks by Koki Nishihara

Other Decks in Technology

Transcript

  1. 2024/04 第40回 MLOps勉強会 CADDi AI Team Lead Engineer Koki Nishihara

    非同期推論システムによる コスト削減と信頼性向上
  2. Koki Nishihara (github@nishikoh) CADDi AI Team, Lead Engineer • 一人目のMLOpsエンジニアとしてCADDiに入社

    MLOpsの推進 • Python Working Group Lead • バックエンド・インフラが中心のキャリア • PyCon APAC 2023登壇 自己紹介 2
  3. 図面データ活用クラウドDrawerの図面解析チーム • 類似検索、図面OCR、記号認識など • Engineer (ML + MLOps) + PdM

    技術スタック • Python ◦ Pants, PyTorch, Kubeflow Pipelines, Polars, pydantic, pytest, Ruff, mypy, uv…etc • Google Cloud, Terraform • GitHub/GitHub Actions CADDi AI Team 5
  4. ✅マネージドなVertex AI を中心に構築。開発者の考える領域と運用を削減 • Vertex AI Endpoints • Vertex AI

    Model Registry • Vertex AI Pipelines AI TeamのML/MLOps 7 • Vertex AI Experiments • Vertex AI Tensor Board
  5. 要求を満たせそうな技術的要素 • 高負荷でも安定稼働 • コストパフォーマンス • 図面を投入して一定時間内で解析完了 • GPUの利用 非同期推論システムデザイン

    14 - 推論Worker側で 流量調整 - 0 Scale - Preemptible VM - mini Batch or Streaming - リクエストが 滞留しないようにAutoscale - GCE - GKE - Batch - Dataflow - Vertex AI
  6. - 推論Worker側で 流量調整 - mini Batch or Streaming - リクエストが滞留しないように

    Autoscaleしてほしい - GCE - GKE - Batch - Dataflow - Vertex AI 新システムに求められるもの - GPUの利用 - 高負荷でも安定稼働 - コストパフォーマンス - 図面を投入して一定時間内で解析完了 非同期推論システムデザイン 15 Preemptible (Spot) Instance Google Cloudの余っているVMを割安で利用できる。VM が余ってない時は利用できない。 > プリエンプティブル VM インスタンスは、 標準 VM の料金よりもはるかに低価格 (60~91% 割引)で利用できます 。ただし、他の VM に割り当てるためにコン ピューティング容量を再利用する必要がある場合、 Compute Engine はこのイン スタンスを停止(プリエンプト)する可能性があります。プリエンプティブル インスタ ンスは、Compute Engine の余剰の容量を利用する機能であり、使用できるかど うかは利用状況に応じて変わります。 - 0 Scale - Preemptible VM
  7. - 推論Worker側で 流量調整 - mini Batch or Streaming - リクエストが滞留しないように

    Autoscaleしてほしい - GCE - GKE - Batch - Dataflow - Vertex AI 新システムに求められるもの - GPUの利用 - 高負荷でも安定稼働 - コストパフォーマンス - 図面を投入して一定時間内で解析完了 非同期推論システムデザイン 16 これまでの同期処理アーキテクチャでは WebAPIごとに常に一台サーバーが起動していた。 リクエストがない時も費用がかかっていため、 この際に 0 Scaleアーキテクチャにしたい。 - 0 Scale - Preemptible VM
  8. 要求を満たせそうな技術的要素 • 高負荷でも安定稼働 • コストパフォーマンス • 図面を投入して一定時間内で解析完了 • GPUの利用 非同期推論システムデザイン

    17 - 推論Worker側で 流量調整 - 0 Scale - Preemptible VM - mini Batch or Streaming - リクエストが 滞留しないようにAutoscale - GCE - GKE - Batch - Dataflow - Vertex AI
  9. - 推論Worker側で 流量調整 - 0 Scale - Preemptible VM -

    mini Batch or Streaming - リクエストが 滞留しないようにAutoscale - GCE - GKE - Batch - Dataflow - Vertex AI • 高負荷でも安定稼働 • コストパフォーマンス • 図面を投入して一定時間内で解析完了 • GPUの利用 非同期推論システムデザイン 18 GCEかGKEで全ての要求が満たせる。 チーム規模も考慮し、新規でGKEクラスタを 立てずにGCEを採用
  10. 19 システム構成 Clientからの解析リクエストを Queue(Pub/Sub)に一度溜める。 WorkerがQueueから取り出して推論 ✅ GPU推論 ✅ 高負荷でも安定稼働 推論Worker側で流量調整

    ✅ コストパフォーマンス Preemptible VM + 0 Scale ✅ 図面を投入して一定時間内で解析完了 図面投入後、少ない遅延で解析開始 + 滞留しないように Autoscale
  11. 20 信頼性/インフラ周りの工夫 • リクエストの急増(スパイク) があっても推論Workerが 安定したペースで処理できるPull 型アーキテクチャ • 平日・夜間休日で最小のVM数を変動 •

    残りのメッセージ数と平均CPU使用率, カスタムメトリクスなど 複数の指標でAutoscale • サービス起動に必要な依存関係を事前にsetupすることで 起動時間を7分短縮 青枠の部分はTerraform moduleとして利用可能。 インフラが苦手なメンバーでも推論 WorkerのContainer Imageを 一行設定するだけでインフラ構築できる
  12. 21 信頼性/インフラ周りの工夫 • リクエストの急増(スパイク) があっても推論Workerが 安定したペースで処理できるPull 型アーキテクチャ • 平日・夜間休日で最小のVM数を変動 •

    残りのメッセージ数と平均CPU使用率, カスタムメトリクスなど 複数の指標でAutoscale - サービス起動に必要な依存関係を事前にsetupすることで 起動時間を7分短縮 GPU Driver setup 3.5分、Container Pull 3.5分かかる。 Scale outの度に毎回この作業があるとWorkerの処理開始が遅くなる。 これらを事前に行うことでVM起動からWorker Startまでの時間を7分短縮。 HashiCorp社のPackerを利用して依存関係が事前にsetup されたVM imageを構築。 ※AI Teamでは開発用インスタンスのVM imageもPackerで管理
  13. 22 信頼性/インフラ周りの工夫 • リクエストの急増(スパイク) があっても推論Workerが 安定したペースで処理できるPull 型アーキテクチャ • 平日・夜間休日で最小のVM数を変動 •

    残りのメッセージ数と平均CPU使用率, カスタムメトリクスなど 複数の指標でAutoscale • サービス起動に必要な依存関係を事前にsetupすることで 起動時間を7分短縮 青枠の部分はTerraform moduleとして利用可能。 インフラが苦手なメンバーでも推論 WorkerのContainer Imageを 一行設定するだけでインフラ構築できる
  14. 23 新アーキテクチャまとめ 新アーキテクチャにより信頼性向上と費用削減を実現 • 負荷試験でエラー数を3桁削減。元々安定稼働が難しかったものも安定稼働 • 2桁少ない費用で推論 • 以前は安定稼働のために推論速度を重視し、精度を犠牲にすることがあった。 新アーキテクチャでは比較的時間がかかる処理も可能になり

    精度が向上 • 旧アーキテクチャで使っていたフレームワークが log4jに依存しており、ログ出力で 苦戦。新アーキテクチャではチームに馴染んでいる Pythonで構造化ログを利用。 今後の展望 解析優先度の考慮, GPU fallback, 滞留した時のWorker boost, DAG, scale周りの改善
  15. Thank you for your listening!!! 25 カジュアルにお話しましょう! カジュアル⾯談ページ エンジニア採⽤ポータル CADDi

    Engineering We Are Hiring! • MLOps Engineer • Machine Learning Engineer • Site Reliability Engineer
  16. - 非同期処理を使いこなそう ! - 第 1 回 非同期処理ってなんだろう ? -

    builders.flash☆ - 変化を求めるデベロッパーを応援するウェブマガジン | AWS 26 参考