コンテンツに移動
AI & 機械学習

Dataflow と Vertex AI: スケーラブルで効率的なモデルのサービング

2024年1月10日
Google Cloud Japan Team

※この投稿は米国時間 2023 年 12 月 21 日に、Google Cloud blog に投稿されたものの抄訳です。

Vertex AI を使用してモデルをトレーニングおよびデプロイすることを検討している場合、それは正しい選択です。ML にはデータが不可欠です。モデルに含まれるデータが多く、その品質が高いほど、モデルのパフォーマンスは向上します。モデルをトレーニングする前に、データを前処理する必要があります。これは、データをクリーニング、変換し、モデルが理解できる形式に集約することを意味します。データの前処理はモデルのサービングで重要ですが、リアルタイムのストリーミング データ、ハードウェアのスケーラビリティ、不完全なデータなどの要因により、より複雑になる可能性があります。

大量のデータを処理する場合は、スケーラブルで信頼性の高いサービスが必要です。Dataflow はリアルタイム モードとバッチモードの両方でデータを処理できるため、要件に完全に適合しており、高スループットと低レイテンシの要件を持つモデルに最適です。

Dataflow と Vertex AI の連携は非常に優れています。ここからは、この 2 つのパワフルなサービスを使用してストリーミング予測リクエストのモデルをサービングする方法をご紹介します。

ユースケース: ストリーミング予測リクエスト

センサーデータの異常検出や産業機器の予知保全などの特定の用途では、ML モデルからのリアルタイム予測が必要です。驚くべきことに、リアルタイム予測システムの実装には、過度に複雑なセットアップは必要ありません。ML モデルによってリアルタイム データに対して予測を行う必要がある場合、簡単なアプローチとしては、Pub/Sub トピックでリアルタイム データをキャプチャし、Dataflow パイプラインでデータを前処理および変換し、Vertex AI エンドポイントで ML モデルを実行し、予測を生成します。さらに、モデルのモニタリングを有効にして、予測精度に影響を与える可能性のあるデータまたはモデルの変更を追跡できます。次の図は、このソリューションのワークフローを示しています。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_serving_diagram.max-900x900.png

モデルを Vertex AI エンドポイントにデプロイする

まず、サービング ソリューションを実装する前に、トレーニングされたモデルを Vertex AI Model Registry に保存する必要があります。これは Vertex AI でモデルをトレーニングするか、事前トレーニングされたモデルをインポートすることで実施できます。

数回のクリック(または API 呼び出し)だけで、モデルを Vertex AI のエンドポイントにデプロイできるようになり、オンライン予測を提供できるようになります。追加のカスタムコードを記述せずにモデルのモニタリングを有効にできるため、トレーニング データとサービング データの間に偏りがないことが保証されます。

モデルをエンドポイントにデプロイする代わりに、RunInference API を使用して、Apache Beam パイプラインで ML モデルをサービングできます。このアプローチには、柔軟性や移植性など、いくつかの利点があります。ただし、Vertex AI にモデルをデプロイすると、モデル モニタリング用のプラットフォームの組み込みツール、TensorBoard、モデル レジストリ ガバナンスなど、さらに多くのメリットが得られます。

Vertex AI は、エンドポイントで最適化された TensorFlow ランタイムを使用する機能も提供します。この機能は、モデルをデプロイするときに TensorFlow ランタイム コンテナを指定するだけで使用できます。

最適化された TensorFlow ランタイムは、TensorFlow モデルのパフォーマンスと費用を向上できるランタイムです。これを使用してモデル推論を高速化する方法の詳細については、こちらをご覧ください。こちらのブログ投稿には、パフォーマンスがどの程度優れているかを示すベンチマーク データが示されています。

データ処理 Dataflow パイプライン

Apache Beam には、VertexAIModelHandlerJSON クラスを使用して、リモートでデプロイされた Vertex AI エンドポイントにリクエストを送信するためのサポートが組み込まれています。わずか数行のコードで、推論のために前処理されたメッセージを送信できます。

lang-py
読み込んでいます...

ここでは、データの前処理部分に Dataflow を使用します。以下に、Python Apache Beam パイプラインのコード スニペットを示します。

  1. Pub/Sub からメッセージを読み取ります。
  2. メッセージを前処理します。これには次のものが含まれます。
    a. データのクリーニング
    b. 欠損値の処理
    c. カテゴリカル データのエンコード
    d. 機能のスケーリング
  3. Vertex AI モデルハンドラを使用して、予測リクエストを Vertex AI エンドポイントに送信します。
  4. 出力を処理します。この例では、モデルの生の出力を、簡単に解釈できる形式に変換します。
  5. BigQuery に書き込みます。出力を BigQuery に保存すると、簡単に取得できるようになります。
lang-py
読み込んでいます...

次のステップ

Apache Beam パイプラインは簡単に Flex テンプレートに変換できるため、同様のユースケースを持つ同じ社内の複数のチームが再利用できます。Flex テンプレートの詳細については、こちらをご覧ください。また、Dataflow ストリーミング パイプラインは、Vertex AI Pipelines の 1 ステップとして実行できます(事前に構築されたコンポーネントの一部をご覧ください)。

まとめると、Dataflow と Vertex AI のパワフルな組み合わせにより、バッチ予測リクエストとストリーミング予測リクエストの両方に ML モデルを提供できます。Dataflow はリアルタイム モードとバッチモードの両方でデータを処理できるため、高スループットと低レイテンシが必要なユースケースに最適です。Vertex AI はモデルのデプロイと管理のためのプラットフォームを提供し、モデル モニタリング用の組み込みツール、最適化された Tensorflow ランタイム、Model Registry を活用できる機能など、さらに多くの利点をもたらします。

Dataflow と Vertex AI を使用して ML モデルをサービングする方法の詳細については、詳細なコードサンプル リソース Apache Beam RunInference with Vertex AI をご覧ください。

クラウドの必要性についてお悩みではありませんか?Google Cloud コンサルティングがエンドツーエンド ソリューションの実装についてお客様をサポートします。詳細については、cloud.google.com/consulting をご覧ください。

- Google Cloud コンサルティング、AI エンジニア Barbara Amoros

投稿先