Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kubeflow Pipelines v2 で変わる機械学習パイプライン開発
Search
Asei Sugiyama
March 20, 2024
Technology
7
2.2k
Kubeflow Pipelines v2 で変わる機械学習パイプライン開発
第39回 MLOps 勉強会の発表資料です
https://mlops.connpass.com/event/312260/
Asei Sugiyama
March 20, 2024
Tweet
Share
More Decks by Asei Sugiyama
See All by Asei Sugiyama
Cynefin Framework を用いた AI Native 組織へのパラダイムシフト
asei
0
27
Algorithm behind Gemini Enterprise Agent Designer
asei
0
170
Algothythm behind Gemini Enterprise Agent Designer (with least amount of inputs from human)
asei
0
71
AI との良い付き合い方を僕らは誰も知らない (WSS 2026 静岡版)
asei
1
550
AI との良い付き合い方を僕らは誰も知らない
asei
1
510
最近の生成 AI の活用事例紹介
asei
3
410
AI エージェント活用のベストプラクティスと今後の課題
asei
2
690
エージェントの継続的改善のためのメトリクス再考
asei
3
880
生成AI活用のベストプラクティス集を作ってる件
asei
1
910
Other Decks in Technology
See All in Technology
スピンアウト講座02_ファイル管理
overflowinc
0
1.4k
SaaSに宿る21g
kanyamaguc
2
170
DDD×仕様駆動で回す高品質開発のプロセス設計
littlehands
6
2.5k
タスク管理も1on1も、もう「管理」じゃない - KiroとBedrock AgentCoreで変わった“判断の仕事”
yusukeshimizu
0
100
脳が溶けた話 / Melted Brain
keisuke69
1
1.1k
「お金で解決」が全てではない!大規模WebアプリのCI高速化 #phperkaigi
stefafafan
5
2.3k
事例から紐解くSHIFT流QA支援 ~大規模プロジェクトの品質管理支援、QA組織立ち上げ~ / 20260320 Nozomu Koketsu
shift_evolve
PRO
0
140
「コントロールの三分法」で考える「コト」への向き合い方 / phperkaigi2026
blue_goheimochi
0
210
Phase10_組織浸透_データ活用
overflowinc
0
1.7k
Bref でサービスを運用している話
sgash708
0
200
FlutterでPiP再生を実装した話
s9a17
0
190
ThetaOS - A Mythical Machine comes Alive
aslander
0
190
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
64
54k
Ethics towards AI in product and experience design
skipperchong
2
240
Done Done
chrislema
186
16k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
360
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Code Review Best Practice
trishagee
74
20k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Producing Creativity
orderedlist
PRO
348
40k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Transcript
Kubeflow Pipelines v2 で変わる 機械学習パイプライン開発 Asei Sugiyama
自己紹介 杉山 阿聖 (@K_Ryuichirou) Software Engineer @ Citadel AI Google
Cloud Innovators Champion @ Cloud AI/ML MLSE 機械学習オペレーション WG 機械学習図鑑 共著 決闘者 @ マスターデュエル
主旨 KFP SDK v2 がリリースされて推奨されるパイプラインの書き方がだい ぶ変わりました KFP SDK v1 の書き方をしたパイプラインもしばらく使えますが、
Vertex Pipelines では2024年12月に EOF を迎えます Fun-in といった新しい機能も使えるようになったので、リリースを確認 し、マイグレーションを計画するとよいでしょう
TOC Basics of Kubeflow Pipelines <- Migration from v1 to
v2
Basics of Kubeflow Pipelines Vertex AI と TFX Vertex Pipelines
3 つの書き方 Lightweight Python Component Hello, world コンポーネントのつなげかた 複雑なパイプライン
TFX, Kubeflow, Vertex AI 設計思想は同一 TFX は Google の機械学習基盤 Kubeflow
は TFX の OSS 版 TFX をクラウドサービスとして 提供しているのが Vertex AI MLOps on Vertex AI https://cloud.google.com/vertex-ai/docs/start/introduction- mlops
Vertex Pipelines Vertex AI の機械学習パイプ ラインを実行するためのサ ービス コンテナを立ち上げて、バ ッチ処理し、コンテナを終 了するだけ
記述には KFP (Kubeflow Pipelines) SDK を用いる MLOps: 機械学習における継続的デリバリーと自動化のパイプライン https://cloud.google.com/architecture/mlops-continuous-delivery-and- automation-pipelines-in-machine-learning
3 つの書き方 Lightweight Python Components Containerized Python Components Container Components
第一選択は Lightweight Python Components Kubeflow Pipelines v2 で Pipeline の書き方がかなり変わる件について https://zenn.dev/asei/articles/introduction-to-kfp-v2
Lightweight Python Component 次のような Python の関数を用意 def hello_world(text: str) ->
str: print(text) return text デコレーターを用いてコンポーネント化 @component(base_image="python:3.9") def hello_world(text: str) -> str: print(text) return text
Hello, world: 全体像 @component(base_image="python:3.9") def hello_world(text: str) -> str: print(text)
return text @dsl.pipeline( name="intro-pipeline-unique", description="A simple intro pipeline", pipeline_root=PIPELINE_ROOT, ) def pipeline(text: str = "hi there"): hw_task = hello_world(text=text) compiler.Compiler().compile( pipeline_func=pipeline, package_path="intro_pipeline.yaml")
Hello, world: コンポーネントの定義 @component(base_image="python:3.9") def hello_world(text: str) -> str: print(text)
return text コンポーネントを定義 宣言したコンポーネントはパイプラインのなかで呼ぶ
Hello, world: パイプラインの定義 @dsl.pipeline( name="intro-pipeline-unique", # 名前の指定 description="A simple intro
pipeline", # 処理内容のコメント pipeline_root="gs://your-ml-bucket", # 結果の保存先 (GCS) ) def pipeline(text: str = "hi there"): # 先程定義したコンポーネント hello_world を呼び出す hw_task = hello_world(text=text) # 返り値は PipelineTask と呼ばれる パイプラインのデコレーターの引数は保存先の指定だけ必要 (あとでも 良い)
Hello, world: パイプラインのコンパイル # コンパイルする compiler.Compiler().compile( pipeline_func=pipeline, package_path="intro_pipeline.yaml" ) Python
で定義したパイプラインを、Vertex Pipelines にわたすための設 定ファイル (YAML) にコンパイル 生成される intro_pipeline.yaml は pipeline_spec という中間言語 になっている
Hello, world: パイプ ラインの実行 YAML ファイルを アップロード パイプラインの名 前や、実行結果の 保存先を指定
Hello, world: 結果 作成したパイプラ インを表示 コンポーネントご とに入出力が表示 される (右下)
コンポーネントの繋げ方: パイプラインの定義 @dsl.pipeline( pipeline_root="gs://your-ml-bucket", ) def pipeline(text: str = "hi
there"): first_task = hello_world(text=text) second_task = hello_world(text=first_task.output) コンポーネントの出力を次のコンポーネントにわたすには、そのまま出 力を渡してあげれば良い
コンポーネントの繋 げ方: 実行結果 実行順から依存関 係が解析され、パ イプラインが定義 される 条件分岐や fun- out,
fun-in も可能
複雑なパイプライン 実際の構築に当たってはチュー トリアルを見ておくと良い Vertex AI Pipelines: Pipelines introduction for KFP
Vertex AI Pipelines: Lightweight Python function-based components, and component I/O Vertex AI Pipelines Jupyter notebooks https://cloud.google.com/vertex- ai/docs/pipelines/notebooks
TOC Basics of Kubeflow Pipelines Migration from v1 to v2
<-
Migration from v1 to v2 Timeline V1 Component YAML support
Container Op Pythonic artifact syntax Fan-out, Fan-in Containerized Python Components
Timeline Vertex Pipelines における KFP SDK 1.8 のサポートは 2024 年
12 月 20 日に終了 KFP SDK v2 を用いても v1 と同じ記述はできるもの の、warning が発生する Supported frameworks list | Vertex AI | Google Cloud https://cloud.google.com/vertex-ai/docs/supported-frameworks- list#pipelines
V1 Component YAML support 今までは YAML をコンポー ネントの定義のために書い ていた 既存の
YAML ファイルは後 方互換性のためサポートさ れる とはいえ移行を考えたほう が良い Migrate from KFP SDK v1 | Kubeflow https://www.kubeflow.org/docs/components/pipelines/v2/migration/
Container Op docker run のような記述ができるコンポーネント Container Components | Kubeflow https://www.kubeflow.org/docs/components/pipelines/v2/components/container-components/
Pythonic artifact syntax (1/2) これまでは入出力を関数の引数として定義する必要があった @dsl.component(base_image="python:3.10") def id_func(input: Input[int], metric:
Output[Metrics]): Path(metric.path).write_text(str(input)) return metric
Pythonic artifact syntax (1/2) v2 では通常の Python 関数のように出力を返り値として定義可能 @dsl.component(base_image="python:3.10") def
id_func(input: int) -> Metrics: from pathlib import Path metric = Metrics( uri=dsl.get_uri(), metadata={'value':input} ) Path(metric.path).write_text(str(input)) return metric
Fan-out, Fan-in (1/4) このようなコンポーネントを用意 @dsl.component(base_image="python:3.10") def id_func(input: int) -> Metrics:
from pathlib import Path metric = Metrics( uri=dsl.get_uri(), metadata={'value':input} ) Path(metric.path).write_text(str(input)) return metric @dsl.component(base_image="python:3.10") def calc_average(models: list[Metrics]) -> float: return sum([float(model.metadata['value']) for model in models]) / len(models)
Fan-out, Fan-in (2/4) Fan-out のために dsl.ParallelFor を利用 Fan-in のために dsl.Collected
を利用 @dsl.pipeline def fanin_pipeline(): with dsl.ParallelFor( items=[i for i in range(10)], ) as item: id_func_task = id_func(input=item) calc_average(models=dsl.Collected(id_func_task.output))
Fan-out, Fan-in (3/4) コンポーネントには Artifact の list が渡される @dsl.component(base_image="python:3.10") def
calc_average(models: list[Metrics]) -> float: # 略
Fan-out, Fan-in (4/4) パイプラインの実行結果は右の ようになる
Containerized Python Components 今回は時間の都合上割愛 解説を書きました Kubeflow Pipelines v2 で Pipeline
の書き方がかなり変わる件について https://zenn.dev/asei/articles/introduction-to-kfp-v2
Resource Migrate from KFP SDK v1 は必読 LayerX のブログ記事がかな り実践的
Vertex AI Pipelinesを用いて爆速ML開発の仕組みを構築する #LayerXテックア ドカレ - LayerX エンジニアブログ https://tech.layerx.co.jp/entry/2023/11/16/185944
まとめ KFP SDK v2 がリリースされて推奨されるパイプラインの書き方がだい ぶ変わりました KFP SDK v1 の書き方をしたパイプラインもしばらく使えますが、
Vertex Pipelines では2024年12月に EOF を迎えます Fun-in といった新しい機能も使えるようになったので、リリースを確認 し、マイグレーションを計画するとよいでしょう