Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
mlops16 勉強会
Search
Trs
February 16, 2022
Technology
1.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
mlops16 勉強会
https://mlops.connpass.com/event/236071/
Trs
February 16, 2022
More Decks by Trs
See All by Trs
dbt Pythonモデルで実現するSnowflake活用術
trsnium
1
2.2k
HDAを駆使したプロシージャルワークフローのスケーリングについて
trsnium
2
1.5k
OpenMetadataとdbtによるデータカタログの構築
trsnium
10
11k
Embulk & Digdag Meetup 2020
trsnium
2
9k
Operation and improvement of image search platform
trsnium
1
8.9k
WEARにおけるGAE(Google App Engine)を用いた機械学習アプリケーションの運用について
trsnium
3
3.4k
Other Decks in Technology
See All in Technology
OpenTelemetry eBPF Instrumentationの舞台裏 / Behind the Scenes of OpenTelemetry eBPF Instrumentation
ymotongpoo
4
1.3k
おい、エージェントを使って終わらせろ
nwiizo
0
270
Omarchy Quattro の日本語設定周り
simosako
2
180
SREは、MCPとAutopilotをこう使え!
kazumax55
2
810
AIによるクリエイティブ生成を行う上での試行錯誤
plaidtech
PRO
0
150
20260912_スクラムにジェネラリストは必要か
ryugen04
0
420
生成AIエージェントを用いた、 手動テスト手順書から自動テストへの 変換手法の検討
magicpod
0
160
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
160
2026/09/10 Spring Bootから Jakarta EE/MicroProfileへの移行
megascus
0
370
range over func 2年間の軌跡 Issue #56413 はGoのエコシステムをどう変えたか
ryujicre8ive
0
190
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
4
610
積み重なった技術負債への挑戦 〜初手としての全社ゴト化〜
techtekt
PRO
0
1.2k
Featured
See All Featured
Tell your own story through comics
letsgokoyo
1
1.1k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Un-Boring Meetings
codingconduct
0
420
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.9k
Building an army of robots
kneath
307
46k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
510
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Statistics for Hackers
jakevdp
799
230k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
300
Transcript
Vertex Pipelinesなどを用いた開発/運用の効率化 株式会社ZOZO データサイエンス部 ML Opsブロック 平田 拓也 Copyright ©
ZOZO, Inc.
© ZOZO, Inc. 株式会社ZOZO データサイエンス部 ML Opsブロック 平田 拓也 (TrsNium)
2018年中途入社。MLOpsブロックにて機械学習基盤の開発 を行っている。ラーメンが好き。 2
© ZOZO, Inc. https://zozo.jp/ • ファッション通販サイト • 1,500以上のショップ、8,400以上のブランドの取り扱い • 常時83万点以上の商品アイテム数と毎日平均2,900点以上の新着
商品 を掲載(2021年9月末時点) • ブランド古着のファッションゾーン「ZOZOUSED」や コスメ専門モール「ZOZOCOSME」、靴の専門モール 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン 「ZOZOVILLA」を展開 • 即日配送サービス • ギフトラッピングサービス • ツケ払い など 3
© ZOZO, Inc. https://wear.jp/ 4 • ファッションコーディネートアプリ • 1,500万ダウンロード突破、コーディネート投稿総数は1,100万件以上 (2021年9月末時点)
• ピックアップタグから最新のトレンドをチェック • コーディネート着用アイテムを公式サイトで購入可能 • WEAR公認の人気ユーザーをWEARISTAと認定。モデル・タレント・デザ イナー・インフルエンサーといった各界著名人も参加
© ZOZO, Inc. 本日のアジェンダ • これまでの機械学習基盤のパイプラインにおける問題点 • パイプラインの開発/運用を効率化するために • 今後の展望
• まとめ 5
© ZOZO, Inc. 本日のアジェンダ • これまでの機械学習基盤のパイプラインにおける問題点 • パイプラインの開発/運用を効率化するために • 今後の展望
• まとめ 6
© ZOZO, Inc. これまでの機械学習基盤のパイプラインにおける問題点 • 様々なプラットフォームでパイプラインが動いていた ◦ 監視やCI/CDの共通化が行われていなかった
◦ 完全に手放しで運用できるような状態ではなかった ◦ 開発に利用した便利スクリプトを使い回しづらい 7
© ZOZO, Inc. 様々なプラットフォームでパイプラインが動いていた 例えば.... • Cloud Composer • Kubernetes
CronJob • Digdag on GKE • Kubeflow Pipelines on GKE 8
© ZOZO, Inc. 監視やCI/CD等の仕組みを共通化できていなかった • プラットフォームごとに監視すべきメトリクスが違う ◦ CronJobであれば、CrashLoopBackOffになっていないか ◦ Digdagであれば、PostgreSQLのキューがはけているか
◦ Kubeflow Pipelinesであれば、MySQL上のステートが正しいか • 成功可否監視やSLO監視をやろうと思った際にプラットフォームで実装の差異がある • デプロイする際の手順が全てのプラットフォームで異なる 9
© ZOZO, Inc. 完全に手放しで運用できるような状態ではない • 初期構築が必要 ◦ Kubernetes, PostgreSQL,
MySQL • どのプラットフォームでも定期的なインフラのメンテナンスが必要 ◦ Kubernetes Clusterのバージョン ◦ Cloud Composerのバージョン 10
© ZOZO, Inc. 開発に利用したスクリプトを使い回しづらい • 他のプロジェクトで作成したスクリプトを流用したい時、コピー&ペースト以外方法がない ◦ コピー&ペーストされたコードはメンテナンスされづらい傾向 ◦
問題が発生した際に一括でコードを修正する必要がある 11
© ZOZO, Inc. これまでの機械学習基盤のパイプラインにおける問題点 開発者目線 • パイプラインを記述するために、それぞれのプラットフォームに関する学習が必要 • 他のプラットフォームで得たノウハウを流用しづらい •
他のパイプラインで作った便利スクリプトを流用できない場合がある 12 開発効率が落ちがち
© ZOZO, Inc. これまでの機械学習基盤のパイプラインにおける問題点 運用者目線 • それぞれのプラットフォームに目を配らせてメンテナンスするのは大変 • プラットフォームごとにCI/CDや監視の仕組みが異なるためセットアップが手間 13
複数のプラットフォームをメンテナンスするコストは無視できない 仕組みを流用しづらいため運用コストが大きい
© ZOZO, Inc. 本日のアジェンダ • これまでの機械学習基盤のパイプラインにおける問題点 • パイプラインの開発/運用を効率的にするために • 今後の展望
• まとめ 14
© ZOZO, Inc. 15 パイプラインの開発/運用を効率化するために • Vertex Pipelinesを選定
• 新規/既存のパイプラインをVertex Pipelinesへ移行する ◦ テンプレートリポジトリの作成 ▪ kfpの薄いwrapperライブラリの作成 ▪ Vertex Pipelinesを監視できるように ▪ Cloud Scheduler + Cloud Functionsでスケジューリングできるように ▪ CI/CDの整備 ◦ 便利コンポーネントをまとめたリポジトリの作成 ▪ CI/CDの整備
© ZOZO, Inc. 16 パイプラインの開発/運用を効率化するために • Vertex Pipelinesを選定
• 新規/既存のパイプラインをVertex Pipelinesへ移行する ◦ テンプレートリポジトリの作成 ▪ kfpの薄いwrapperライブラリの作成 ▪ Vertex Pipelinesを監視できるように ▪ Cloud Scheduler + Cloud Functionsでスケジューリングできるように ▪ CI/CDの整備 ◦ 便利コンポーネントをまとめたリポジトリの作成 ▪ CI/CDの整備
© ZOZO, Inc. 17 Vertex Pipelinesを選んだ経緯 2020/12 MLの学習からサービングを一括で行える点でKubeflow導入に着手 •
kfctl内部で生成しているyamlを元に運用できるようなyamlを形成 • Kubeflowで利用されているIstioのバージョンが低い問題の解決 • Kubeflowの不要なコンポーネント削除 → 詳しくは弊社テックブログの「KubeflowによるMLOps基盤構築から得られた知見と課題」を参照 してください 2021/05/19 Vertex AIの発表 • フルマネージドのKubeflow Pipelines ◦ インフラは何も管理しなくて良い ◦ Kubeflow PipelinesのSDK v2を利用すれば、これまでのパイプラインも移行可能
© ZOZO, Inc. 18 Vertex Pipelinesを選んだ経緯 2020/12 MLの学習からサービングを一括で行える点でKubeflow導入の着手 •
kfctl内部で生成しているyamlを元に運用できるようなyamlに形成 • Kubeflowで利用されているistioのバージョンが低い問題の解決 • Kubeflowの不要なコンポーネント削除 → 詳しくは弊社テックブログの「KubeflowによるMLOps基盤構築から得られた知見と課題」を参照し てください 2021/05/19 Vertex AIの発表 • フルマネージドのKubeflow Pipelines ◦ インフラは何も管理しなくて良い ◦ Kubeflow PipelinesのSDK v2を利用すれば、これまでのパイプラインも移行可能 →めっちゃいいじゃんとなり、Vertex Pipelinesを利用する方針にした
© ZOZO, Inc. 19 パイプラインの開発/運用を効率的にするために • Vertex Pipelinesを選んだ経緯
• 新規/既存のパイプラインをVertex Pipelinesへ移行する ◦ テンプレートリポジトリの作成 ▪ kfpの薄いwrapperライブラリの作成 ▪ Cloud Scheduler + Cloud Functionsで定期スケジューリングできるように ▪ Vertex Pipelinesを監視できるように ▪ CI/CDの整備 ◦ 便利なコンポーネントをまとめたリポジトリの作成 ▪ CI/CDの整備
© ZOZO, Inc. 20 テンプレートリポジトリの作成 テンプレートリポジトリとは...? GitHubの機能の一部で、既存のリポジトリをテンプレートとして新規リポジトリを作成することができる このテンプレートリポジトリにパイプラインを動かすために必要な機能を全て入れる
© ZOZO, Inc. 21 kfpの薄いwrapperライブラリの作成 • yamlからパイプラインのセットアップをできるように ◦ 認証系の自動設定 ◦
バックエンドのGCSの設定 ◦ パイプライン引数の自動セットアップ • CLIをサポートする • Cloud Scheduler + Cloud Functionsでパイプラインを定期ス ケジューリングできるように # pipelines/example/__main__.py from pipeline_lib import BasePipeline from typing import Dict from kfp.v2.dsl import component import yaml @component def echoOp(message: str): print(message) class ExamplePipeline(BasePipeline): def __init__(self, config: Dict): super().__init__(config) def pipeline(self): echoOp("hello world") if __name__ == "__main__": with open('config/environment.yaml', encoding="utf-8") as f: config = yaml.load(f, Loader=yaml.SafeLoader) pipeline = ExamplePipeline(config) pipeline.cli() $ poetry run python pipelines/example run-pipeline --pipeline-name example --env dev $ poetry run python pipelines/example schedule-pipeline --pipeline-name example --env dev
© ZOZO, Inc. 22 Cloud Scheduler + Cloud Functionsでパイプラインを定期スケジューリングできるように
実験やプロダクトの要件的にスケジューリングの機能は必須で欲しい!! • 以前までkfp.v2.google.client.AIPlatformClientでVertex Pipelinesをスケジューリングできていた • kfp バージョン1.8.xよりkfp.v2.googleが削除され、google-cloud-aiplatformを利用する必要がある ◦ google-cloud-aiplatformにはVertex Pipelinesをスケジューリングする機能がない
© ZOZO, Inc. 23 Cloud Scheduler + Cloud Functionsでパイプラインを定期スケジューリングできるように
kfp.v2.google.client.AIPlatformClientをもとにスケジューリング機能を再実装した • 以前までkfp.v2.google.client.AIPlatformClientでVertex Pipelinesをスケジューリングできていた • kfp バージョン1.8.xよりkfp.v2.googleが削除され、google-cloud-aiplatformを利用する必要がある ◦ google-cloud-aiplatformにはVertex Pipelinesをスケジューリングする機能がない
© ZOZO, Inc. Vertex Pipelines 24 Cloud Scheduler + Cloud
Functionsでパイプラインを定期スケジューリングできるように # pipelines/example/__main__.py from pipeline_lib import BasePipeline from typing import Dict from kfp.v2.dsl import component import yaml @component def echoOp(message: str): print(message) class ExamplePipeline(BasePipeline): def __init__(self, config: Dict): super().__init__(config) def pipeline(self): echoOp("hello world") Compile Cloud Storage Cloud Functions Cloud Scheduler 開発者 / GitHub Actions $ poetry run python pipelines/example schedule-pipeline … https
© ZOZO, Inc. 25 Vertex Pipelinesを監視できるように 監視したい項目 • 実行時間(SLO監視)
• 成功可否 kfpを使って得られる情報 • kfpのexit_handlerによるパイプライン終了情報(成功可否を得ることはできない) 欲しい情報を何も得ることができない...
© ZOZO, Inc. 26 Vertex Pipelinesを監視できるように 監視したい項目 • 実行時間(SLO監視)
• 成功可否 kfpを使って得られる情報 • kfpのexit_handlerによるパイプライン終了情報(成功可否を得ることはできない) Cloud SchedulerとCloud Functionsでいい感じに
© ZOZO, Inc. 27 Vertex Pipelinesを監視できるように Cloud Functions Cloud
Scheduler GitHub Actions https Cloud Scheduler • 監視のスケジューリング • 監視のスケジューリング情報(cron format)をCloud Functionsへ渡す Cloud Functions • Cloud Schedulerのスケジューリング情報をもとに前回の監視がいつ行わ れたかを計算 • 前回の監視からステータスが変わったパイプラインを抽出 • SLOを満たせていないパイプラインを抽出 • Slackへ抽出したパイプライン情報を通知
© ZOZO, Inc. 28 CI/CDの整備 行っていること • Kubeflow Pipelinesのコンポーネントのイメージビルド
◦ component.yamlのイメージhashを自動更新しgit commit&push • パイプラインの実行(feature branchのみ) • パイプラインのスケジューリング • モニタリングのセットアップ • Release PR等の作成 ◦ ブランチ間のコンフリクトを避けるためrelease->mainのようなリリース後のPRを作成&自動マージ
© ZOZO, Inc. gcr.io/something-stg/kfp-component1 Container Registry 29 CI/CDの整備(feature branch) 1.
Dockerfileを含む componentのイメー ジをdocker build & push gcr.io/something-dev/kfp-component1 Container Registry 2. パイプラインの実 行 PR Merged 4a. パイプラインの監 視をセットアップ 4b. パイプラインのス ケジューリング 5. releaseブランチに 向けPRを作成 3. component.yaml のイメージハッシュを 書き換えmainブラン チにcommit&push
© ZOZO, Inc. PR Merged 30 CI/CDの整備(release branch)
gcr.io/something-prd/kfp-component1 Container Registry 3b. パイプラインのス ケジューリング 4. mainブランチに向 けPRを作成&マージ 1. Dockerfileを含む componentのイメー ジをdocker build & push 2. component.yaml のイメージハッシュを 書き換えreleaseブラ ンチにcommit&push 3a. パイプラインの監 視をセットアップ
© ZOZO, Inc. 31 便利コンポーネントをまとめたリポジトリの作成 目的 •
以前に作成したものを再利用できるようにし開発効率を上げるため • 一括でコードを管理しメンテナンスコストを下げるため GitHub Actions gcr.io/mlops/kfp-component-something Container Registry mlops-components Cloud Storage hoge-project-pipelines fuga-project-pipelines
© ZOZO, Inc. 本日のアジェンダ • これまでの機械学習基盤のパイプラインにおける問題点 • パイプラインの開発/運用を効率的にするために • 今後の展望
• まとめ 32
© ZOZO, Inc. 今後の展望 • 実験用のパイプラインの整備 • サービング基盤の構築 33
© ZOZO, Inc. 実験用のパイプラインの整備 34 もっとカジュアルにパイプラインを回せるような環境整備 ◦ コメントベースでのCI/CDの操作 ▪
キャッシュの有効化/無効化 ▪ 利用する設定を選べるように ▪ [WIP]実験のサマリーを出せるように
© ZOZO, Inc. サービング基盤の構築 35 運用負荷を低減できるように • プロジェクト(案件)ごとにあるKubernetesクラスタを単一のクラスタで運用する
• サービスメッシュを導入し、より柔軟なトラフィック制御をできるように • Argo CDやSpinnaker等を導入し、モデルやアプリケーションのContinuous Deliveryを強化する
© ZOZO, Inc. 本日のアジェンダ • これまでの機械学習基盤のパイプラインにおける問題点 • パイプラインの開発/運用を効率的にするために • 今後の展望
• まとめ 36
© ZOZO, Inc. まとめ • Vertex Pipelinesを利用しインフラの運用コストを無くした • テンプレートリポジトリを作成し開発を効率化 •
共通コンポーネントをまとめたリポジトリを作成し再利用可能な環境を整備した 37
None