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.4k
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
キヨさん、67歳。AIコーディングエージェントに挑む
happysamurai294
0
120
「作れる」と「リリースできる」の間にあったもの── PdMを外して見えた、PdMがやるべき仕事/Buildable ≠ Shippable: What Removing the PM Taught Me About the PM’s Job
yappli_developers
0
380
[re:Invent2026事前勉強会(有志開催)]続きは、ラスベガスの廊下で / continue-in-the-vegas-hallway
sh_fk2
0
400
AIコーディングエージェント開発_全体像
happysamurai294
0
120
契約で守るコンパウンドプロダクトのデザインシステム
yug1224
1
1.6k
「社外イベント=意識高い」の壁を壊せ!元々無関心だった僕らが部内で社外イベントを民主化して15人を連れ出すまで
say_no_w
0
160
GitHub、使う?使わない?
happysamurai294
0
120
Devin プロモコードの受け取りと適用(2026.10.27)
kinopeee
1
710
スクラム祭り2026福井トラック_閉じたループから価値のスパイラルへ
kc_nakanishi
0
200
AIエージェント時代、Kaggleにどう取り組むか
takanao
2
390
キヨさん67歳 AIコーディングエージェント物語
happysamurai294
0
120
これだけは抑えておきたい!後悔しない re:Invent の過ごし方 / AWS re:Invent 2026 prestudy
kinunori
2
560
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
2
740
Technical Leadership for Architectural Decision Making
baasie
3
620
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
590
Done Done
chrislema
187
17k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
500
Scaling GitHub
holman
464
140k
Product Roadmaps are Hard
iamctodd
55
13k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
310
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
The Cult of Friendly URLs
andyhume
79
7k
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