Slide 1

Slide 1 text

Vertex AI Experiments の実態 -コードを辿った先にあったもの - Jagu’e’r AI/ML分科会 Meetup#8 - Tomonori Hayashi 1

Slide 2

Slide 2 text

Tomonori Hayashi ● NTT コミュニケーションズ イノベーションセンター所属 ○ ノーコード時系列分析ツール「 Node-AI」の開発/運用 ○ ソフトウェアエンジニア ■ Front:TypeScript - React/Next.js ■ Infra:Google Cloud ● Google Cloud Partner Top Engineer 2024 - 2025 ● Google Cloud Partner Tech Blog Challenge 2024 個人カテゴリ 優秀ブログ ● Google Cloud All Certifications ● コミュニティ ○ Jagu’e’r デジクラ人材育成分科会 ○ Jagu’e’r O11y-SRE 分科会 2 @pHaya72 @t_hayashi

Slide 3

Slide 3 text

Node-AI の紹介 ● ノーコードで AI モデルを作成できる WEB アプリケーション ● カードを直感的につなげるだけで 時系列データの前処理から AI モデルの学習・評価までの パイプラインを作成・実行 できる ● 技術スタック ○ TypeScript + React / Next ○ Python + Django ○ C# + ASP.NET Core + SignalR ○ Kubernetes ○ Google Cloud ○ Scikit-learn / Tensorflow / Pytorch 3

Slide 4

Slide 4 text

本日お話しすること ● MLFLow を Vertex AI Experiments に置き換える時に生じた課題の一つ ● Vertex AI Experiments の裏がどうなっているか 本日お話ししないこと ● MLFlow を Vertex AI Experiments に置き換えた検証の全貌 ● Vertex AI Experiments を操作する python-aiplatform ライブラリのコードの詳細な読み解き ○ Zenn にまとめています

Slide 5

Slide 5 text

5 アプリの技術的負債(になりつつあるところ) 実験管理機能の一部を利用していた MLFlow 機械学習周りのタスクを担うコンポーネントの中で学習時の 学習状況を記録する API を利用 開発当初は問題なく利用できていたが、運用を続ける中でユーザー数や 学習規模の増大による課題が顕著となった パフォーマンス メンテナンス R/W が遅くマシンパワーで なんとかもたせている 定期的に脆弱性が発見され お守りもそこそこしんどい

Slide 6

Slide 6 text

6 アプリの技術的負債(になりつつあるところ) 実験管理機能の一部を利用していた MLFlow 機械学習周りのタスクを担うコンポーネントの中で学習時の 学習状況を記録する API を利用 開発当初は問題なく利用できていたが、運用を続ける中でユーザー数や 学習規模の増大による課題が顕著となった パフォーマンス メンテナンス R/W が遅くマシンパワーで なんとかもたせている 定期的に脆弱性が発見され お守りもそこそこしんどい アプローチの 1 つとして Vertex AI Experiments の検討を開始

Slide 7

Slide 7 text

7 検討の中で見えてきた課題 MLFlow の互換性の検証 Vertex AI Experiments は MLFlow と互換性があり、どの程度現状のコードを置き換えられるのかを中心に検証した MLFlow の API で利用していたのは主に下記の 3 点(右記してあるのは MLFlow のライブラリ利用時の関数) これらがそのまま置き換えられると労力少なく検討進むため大きなポイント ● 学習毎の評価精度を記録する  : log_metrics() ● 学習毎のパラメーターを記録する: log_params() ● 学習毎のメタデータを記録する : set_tags()

Slide 8

Slide 8 text

8 検討の中で見えてきた課題 MLFlow の互換性の検証 Vertex AI Experiments は MLFlow と互換性があり、どの程度現状のコードを置き換えられるのかを中心に検証した MLFlow の API で利用していたのは主に下記の 3 点(右記してあるのは MLFlow のライブラリ利用時の関数) これらがそのまま置き換えられると労力少なく検討進むため大きなポイント ● 学習毎の評価精度を記録する  : log_metrics() ● 学習毎のパラメーターを記録する: log_params() ● 学習毎のメタデータを記録する : set_tags() メタデータを記録するための set_tags のみ実装されていなかった

Slide 9

Slide 9 text

そんなに甘くなかった・・ set_tags がないと何が困るか 特定の学習タイミングの記録を検索したい場合に その検索対象となるような情報( = メタデータ)を記録できない

Slide 10

Slide 10 text

10 課題に対するアプローチ Python ライブラリである aiplatform を読み解く 最初に思いついた選択肢としてはメタデータを学習時のパラメーターと捉えて log_params() で代用する ➡ 正直できないわけではなかったが微妙に気持ち悪い感じがした、やはりパラメーターではない・・ set_tags() の実装がないことには 何か意味があるのでは?と考えて Vertex AI Experiments を扱う際に 利用するライブラリを読み解くことにした 引用:https://github.com/googleapis/python-aiplatform

Slide 11

Slide 11 text

11 課題に対するアプローチ Python ライブラリである aiplatform を読み解く 最初に思いついた選択肢としてはメタデータを学習時のパラメーターと捉えて log_params() で代用する ➡ 正直できないわけではなかったが微妙に気持ち悪い感じがした、やはりパラメーターではない・・ set_tags() の実装がないことには 何か意味があるのでは?と考えて Vertex AI Experiments を扱う際に 利用するライブラリを読み解くことにした 読み解いてみてわかったことは・・・ 引用:https://github.com/googleapis/python-aiplatform

Slide 12

Slide 12 text

Vertex AI Experiments は Vertex ML Metadata のラッパーと捉えられること

Slide 13

Slide 13 text

13 Vertex ML Metadata とは? Vertex AI で利用されるメタデータ全般を扱う 引用:https://cloud.google.com/vertex-ai/docs/ml-metadata/introduction?hl=ja

Slide 14

Slide 14 text

14 Vertex ML Metadata とは? 重要な要素であるコンテキスト 例えば、右図のような ML ワークフローをメタデータで表現できる ● Execution:ML ワークフローのステップ ● Artifact:データセットやモデルといった ML ワークフローで     生成・使用される個別のエンティティ ● Context:Artifact と Execution を単一のクエリ可能な     タイプ付きカテゴリにグループ化 引用:https://cloud.google.com/vertex-ai/docs/ml-metadata/introduction?hl=ja

Slide 15

Slide 15 text

15 Vertex AI Experiments との関係性 実態は Context オブジェクト どのようにコードを辿っていったかは Zenn に記載 辿った先にわかったのは右図のように Vertex AI Experiments の Experiment オブジェクト と ExperimentRun オブジェクト は Vertex ML Metadata の Context オブジェクト の中でも SchemaTitle が Experiment と ExperimentRun であった

Slide 16

Slide 16 text

16 Vertex AI Experiments との関係性 実態は Context オブジェクト どのようにコードを辿っていったかは Zenn に記載 辿った先にわかったのは右図のように Vertex AI Experiments の Experiment オブジェクトと ExperimentRun オブジェクトは Vertex ML Metadata の Context オブジェクトの中でも SchemaTitle が Experiment と ExperimentRun であった さらに Context オブジェクト には metadata フィールド が存在し log_metrics() と log_params() の実行結果は metadata フィールドの _METRICSKEY と _PARAMS_KEY の 値として格納されていた

Slide 17

Slide 17 text

17 課題だった set_tags() の解決策 Context オブジェクト の metadata フィールド Context オブジェクト には update(metadata) を持っており、独自のメタデータを付与することができる ➡ メタデータによる検索関数もあることから Vertex ML Metadata の Context オブジェクトを操作する ことで、  気持ちよくメタデータを付与する ことができ解決するに至った

Slide 18

Slide 18 text

Vertex AI Experiment と Vertex ML Metadata の関係性 ● python-aiplatform ライブラリを読み解くことで Vertex AI Experiments の Experiment / ExperimentRun オ ブジェクトは Vertex ML Metadata の Context オブジェクトであることがわかった ● 互換性の観点では set_tags() が実装されていなかったが、 Context オブジェクトのメタデータを操作すること により置き換えることを実現できた 今回の取り組みを通しての学び ● log_params() でもできたところに気持ち悪さを感じてコード読み解き気持ち良い実装にできた ➡ 目的を達成するための手段を最適化するきっかけとして「気持ち悪さ」を感じるの重要性 ● Vertex ML Metadata の実験管理観点を Vertex AI Experiments として表現されていることがわかった ➡ Google Cloud としてのアーキテクチャとしてのあり方とサービスとしての見せ方を一例を知れた まとめと学び

Slide 19

Slide 19 text

CREDITS: This presentation template was created by Slidesgo, and includes icons by Flaticon, and infographics & images by Freepik Thanks! 19 @pHaya72 @t_hayashi