Vertex AI Pipelinesを活用した機械学習パイプラインの構築(コミューン株式会社)
コミューン株式会社 / masatakashiwagi
チームリーダー / テックリード
ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
---|---|---|
10名以下 | 2023年4月 | B to B |
ツールの利用規模 | 10名以下 |
---|---|
ツールの利用開始時期 | 2023年4月 |
事業形態 | B to B |
アーキテクチャ

アーキテクチャの意図・工夫
こちらの機械学習基盤のアーキテクチャは,エンドユーザーに提供している推薦システムにおける構成となっています.コミューンでは,本体アプリケーション含めて Google Cloud を採用しており,機械学習システムもそれに合わせる形で Google Cloud の各種マネージドサービスを採用することにしました.
エンドユーザーに行う推薦として,関連した投稿を出すレコメンドやユーザー毎にパーソナライズしたレコメンドを行うために,Google Cloud の Vertex AI Pipelines を用いて機械学習パイプラインを構築しています.選定理由にも記載していますが,Vertex AI Pipelines はコンポーネント単位で実行管理をすることができるため,コンポーネント毎にマシンスペックの割り当て,適切な粒度での処理の分割,再利用性などがしやすく少人数で開発や運用をするには良いサービスだと感じています.その機械学習パイプラインを定期実行する方法として,Cloud Scheduler + Cloud Run functions でパイプライントリガーを実装しました.工夫として,新しくサービスを提供する企業が増えた場合に自動的にそれを検知し,対象となるテナントの自動追加を行い,実行すべき機械学習パイプラインを制御しています.
もう1つ機械学習基盤の特徴は,本体アプリケーションとのインターフェースとして機械学習用の API すなわち ML-API を用意しているところです.ML-API の役割としては,バッチにより生成された推薦リストをリクエストに応じて取り出して,本体アプリケーションに返すことはもちろんですが,AB テスト時のテナント・ユーザー振り分けを行ったり,後々のモデル改善や効果検証といった分析に必要なログ出力を ML-API からも行ったり,必要に応じて推薦リストのフィルタリングやハンドリングを行ったりする役割も担っています.
導入の背景・解決したかった問題
導入背景
サービス導入の背景として,プロダクトに新しくレコメンド機能を導入することになり,そのレコメンドリストを1日1回バッチで生成するための機械学習パイプラインを構築する必要がありました.当時は1人で開発していたため,運用の観点からもマネージドサービスを活用することを第一に考えていました.また,会社全体として Google Cloud を活用しているため,Google Cloud のサービスを念頭に置いていました.
比較検討したサービス
- Cloud Workflows
- Cloud Composer
比較した軸
大きくリソース管理・コスト・開発/運用のしやすさの3つの観点を持っていました.
リソース管理
- 機械学習のワークロードに即したマシンスペックの割り当て,CPU/GPU の割り当てやインスタンスタイプの選択が簡単に設定できるか
機械学習では大きなメモリや GPU 環境での学習・推論が必要なケースが発生するため,それに対応できるかは大事なポイントでした.
コスト
- スケール時のコスト効率がどうなっていくか
日時でパイプラインを動かすユースケースを想定していたのと,我々はマルチテナント環境でパイプラインを動かす必要があり,パイプラインの数が線形に増えていく想定だったため,そのような状況でもコストが増大しすぎないかは大事なポイントでした.
開発・運用のしやすさ
- データサイエンティストや機械学習エンジニアが使いこなすための学習コストが低く,パイプラインの管理や運用が容易か
- パイプラインはコンポーネント単位で構成することができ,それぞれ独立して実行が可能か(コンポーネントに応じてデータ量や処理したい内容が異なるので,それに適したインスタンスの割り当てをしたいため)
- スケジュール実行やエラー時の再実行も簡単にできるか
日々の改善サイクルが回しにくい,もしくは回すのに手間と時間がかかるとなると改善に二の足を踏んでしまう可能性があるので,それらを避けたい想いがあり,クイックに開発運用ができるサービスかどうかも重要視していました.
選定理由
上記3つの観点に加えて,世の中に先行事例としてのナレッジがそれなりにあり,今後 AI/機械学習に関する便利な機能がどんどん開発されていくだろうという期待から,Vertex AI Pipelines を選択しました.
導入の成果
Vertex AI Pipelines だけでなく,Google Cloud の他のサービス(Cloud Run functions, Cloud Scheduler)と組み合わせることで,我々のプロダクトに適した形でパイプラインをスケールさせることができました.これにより全てのテナントに対して機械学習によるレコメンド機能を提供することができ,今までにない新しい価値を出すことができています.
また動かしているパイプラインの数に対しては,とてもリーズナブルなコストで実現できており,コスト面でも恩恵を受けています.
導入時の苦労・悩み
Vertex AI Pipelines はその裏側で Kubeflow Pipelines (KFP) が使用されています.実装するためには,この KFP の作法に倣う必要があり,ライブラリ特有の記述を意識しないといけない点が少し苦労しました.KFP には,コンポーネントの記述方法として,Lightweight Python Components / Containerized Python Components / Container Components の3種類あります.それぞれ実装方法が異なるので,どれを選択するかも考える必要があります.我々は任意のコンテナを使用してコンポーネントを定義できるかつ柔軟性がある Container Components を採用して開発を行いました.また,導入当時は KFP v1 と v2 の過渡期でバージョンによって実装方法が異なるのが悩みでしたが,安定性を考慮して導入時は v1 で実装し,その後 EOL 対応に合わせて v2 に移行しました(今新しく実装される場合は,v2 での実装になるためこのような懸念は無いかと思います).移行に関する話や v2 のポイントはこちらの「Vertex AI Pipelines で利用している Kubeflow Pipelines を v2 へ移行しました」という記事でも紹介させて頂いています.
Vertex AI Pipelines では,各コンポーネントが1つのコンテナとして動作するため,Dockerfile も分けて開発することができます.これを1つの Dockerfile で全てのコンポーネントに対応するか,それぞれのコンポーネントに合わせて必要最低限のライブラリをインストールするなど個別対応するかも悩み所の1つかと思います.我々は,導入当初は個別の Dockerfile を用意していましたが,管理の複雑化とメンテナンスコストが増えることから今では単一の Dockerfile を使って開発をしています(ただし,GPU を使う場合は,CPU 用の Dockerfile と GPU 用の Dockerfile を分けて運用するのが良さそうに思います).
導入に向けた社内への説明
上長・チームへの説明
導入に関しては一任されていましたが,コストについては説明を行いました.我々は SaaS としてプロダクトを提供しているため,1社あたりどの程度で機械学習によるレコメンド機能を提供することができるかを説明する必要がありました.
コストを計算するために,Vertex AI のプライシングページを参考に,実装予定のパイプラインでどの程度コストがかかるかを処理時間と割り当て予定のインスタンスからシミュレーションを行いました.これにより1日1社あたり概算でのコストが計算でき,許容範囲内かどうかの確認をしました.
活用方法
よく使う機能
Vertex AI シリーズで利用している機能は以下になります.
- Vertex AI Pipelines: 機械学習パイプラインとして,推薦システム用のレコメンドリスト生成などに利用しています.
- Vertex AI Experiments: 機械学習パイプラインのメタデータやメトリクス管理に一部利用しています.
- Vertex AI Endpoint: ニアリアルタイムな推薦を実現するための推論サーバーとして利用しています.
- Colab Enterprise: ローカル環境では難しい大量のデータを扱った実験をしたい場合に利用しています.
ツールの良い点
Vertex AI サービス群との連携
Vertex AI には様々な機能が存在しますが,Vertex AI Pipelines からそれらのサービスに簡単に連携できる点はとても良いと感じています.例えば,実験管理を行う Vertex AI Experiments やメタデータ管理を行える Vertex ML Metadata はスムーズにデータ連携を行うことができます.
ツールの課題点
エラーの通知処理
コンポーネント毎にエラーの通知処理を Slack 等に連携する処理が簡単に行うことができない.
Vertex AI Experiments へのアクセス
日時かつマルチテナントで機械学習パイプラインを動かしていると,1年も経てば膨大な量の実行数になります.過去の実験結果を比較したい場合に,Vertex AI Experiments の画面で検索を行うと応答が返ってこなくなることもしばしばあります.そのため,実験結果の表示は API 経由でデータだけ取得し別の in-house な仕組みを用意する方が良いかもしれません.
ツールを検討されている方へ
Vertex AI Pipelines は Google Cloud のマネージドサービスで機械学習パイプラインを構築する場合,第一の選択肢になるでしょう.周辺のエコシステムが充実していたり,それらとの連携も比較的容易に行えます.また,日々の継続的な学習を支える基盤としては問題ないサービスだと思います. 一方で,紹介したようなツールの課題や Vertex AI Pipelines を構成する KFP の思想や実装方法など一定のキャッチアップは必要になるため,チーム内でのナレッジ共有など開発運用を支援する仕組みも同時に検討するのが良いかと思います.
コミューン株式会社 / masatakashiwagi
チームリーダー / テックリード
よく見られているレビュー
コミューン株式会社 / masatakashiwagi
チームリーダー / テックリード
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法