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
AI との良い付き合い方を僕らは誰も知らない (WSS 2026 静岡版)
asei
1
470
AI との良い付き合い方を僕らは誰も知らない
asei
1
460
最近の生成 AI の活用事例紹介
asei
3
340
AI エージェント活用のベストプラクティスと今後の課題
asei
2
650
エージェントの継続的改善のためのメトリクス再考
asei
3
810
生成AI活用のベストプラクティス集を作ってる件
asei
1
880
GenAIOps: 生成AI時代の DevOps
asei
0
88
生成AI活用の実践解説 (速報版)
asei
1
1.7k
実践AIガバナンス
asei
3
1.1k
Other Decks in Technology
See All in Technology
Tebiki Engineering Team Deck
tebiki
0
24k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
Agent Skils
dip_tech
PRO
0
140
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
3
220
Context Engineeringの取り組み
nutslove
0
380
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
SREが向き合う大規模リアーキテクチャ 〜信頼性とアジリティの両立〜
zepprix
0
480
Cloud Runでコロプラが挑む 生成AI×ゲーム『神魔狩りのツクヨミ』の裏側
colopl
0
140
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
1.1k
顧客の言葉を、そのまま信じない勇気
yamatai1212
1
370
量子クラウドサービスの裏側 〜Deep Dive into OQTOPUS〜
oqtopus
0
150
こんなところでも(地味に)活躍するImage Modeさんを知ってるかい?- Image Mode for OpenShift -
tsukaman
1
170
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
Designing for Timeless Needs
cassininazir
0
130
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
240
sira's awesome portfolio website redesign presentation
elsirapls
0
150
ラッコキーワード サービス紹介資料
rakko
1
2.3M
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
The Curse of the Amulet
leimatthew05
1
8.7k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
140
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
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 といった新しい機能も使えるようになったので、リリースを確認 し、マイグレーションを計画するとよいでしょう