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
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
0
2.1k
HDAを駆使したプロシージャルワークフローのスケーリングについて
trsnium
2
1.5k
OpenMetadataとdbtによるデータカタログの構築
trsnium
10
11k
Embulk & Digdag Meetup 2020
trsnium
2
8.9k
Operation and improvement of image search platform
trsnium
1
8.8k
WEARにおけるGAE(Google App Engine)を用いた機械学習アプリケーションの運用について
trsnium
3
3.4k
Other Decks in Technology
See All in Technology
エンジニアリング戦略の作り方 / Crafting Engineering Strategy
iwashi86
19
6.4k
Agentic Web
dynamis
1
200
DevOps Agentで始めるAWS運用 〜フロンティアエージェントが変える運用の現場〜
nyankotaro
1
380
EventBridge Connection
_kensh
5
690
新規事業を牽引する技術選定 〜フルスタックTypeScript開発の実践事例〜
nullnull
3
380
実装は速くなった、レビューはどうする? ― 自身のレビューをAIで再現させるサーヴァントエンジニアリングのすゝめ / Implementation got faster. So what about reviews? — An invitation to Servant Engineering: Recreating your own code reviews with AI
nrslib
8
4.6k
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
1.9k
Android の公式 Skill / Android skills
yanzm
0
120
2026TECHFRESH畢業分享會 - Lightning Talk - E起 See See : 電商推薦讀心術? 數據說了算
line_developers_tw
PRO
0
700
現地で盛り上がった WWDC26 Keynote
zozotech
PRO
1
160
RSA暗号を手計算したくなること、ありますよね?? (20260615_orestudy6_rsa)
thousanda
0
180
Snowflakeと仲良くなる第一歩
coco_se
4
410
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.6k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Deep Space Network (abreviated)
tonyrice
0
170
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
Rails Girls Zürich Keynote
gr2m
96
14k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
420
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
940
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Building Adaptive Systems
keathley
44
3k
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