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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
240
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
3
530
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
340
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
390
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
17
13k
Genieを崇めよ
kameitomohiro
0
120
空間オーディオで過去の 自分(ゴースト)と競うランニング 〜HealthKitのルートを足音に変える実装〜
nao_randd
0
190
積み重なった技術負債への挑戦 〜初手としての全社ゴト化〜
techtekt
PRO
0
840
2026_devsumi_ozono.pdf
o3
3
480
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
4
1.6k
新機種発売前に見直そう!端末移行で再ログインが要るアプリ・要らないアプリは何が違うのか 〜シームレスに再開できる設計と実装〜
zozotech
PRO
0
170
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
520
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
320
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Docker and Python
trallard
47
4.2k
Navigating Weather and Climate Data
rabernat
0
520
Accessibility Awareness
sabderemane
1
210
Done Done
chrislema
186
16k
Designing for Performance
lara
611
70k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
240
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
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