Dataflow と Vertex AI: スケーラブルで効率的なモデルのサービング
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 モデルを実行し、予測を生成します。さらに、モデルのモニタリングを有効にして、予測精度に影響を与える可能性のあるデータまたはモデルの変更を追跡できます。次の図は、このソリューションのワークフローを示しています。


モデルを 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 エンドポイントにリクエストを送信するためのサポートが組み込まれています。わずか数行のコードで、推論のために前処理されたメッセージを送信できます。
ここでは、データの前処理部分に Dataflow を使用します。以下に、Python Apache Beam パイプラインのコード スニペットを示します。
- Pub/Sub からメッセージを読み取ります。
- メッセージを前処理します。これには次のものが含まれます。
a. データのクリーニング
b. 欠損値の処理
c. カテゴリカル データのエンコード
d. 機能のスケーリング - Vertex AI モデルハンドラを使用して、予測リクエストを Vertex AI エンドポイントに送信します。
- 出力を処理します。この例では、モデルの生の出力を、簡単に解釈できる形式に変換します。
- BigQuery に書き込みます。出力を BigQuery に保存すると、簡単に取得できるようになります。
次のステップ
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



