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
gokartの運用と課題について
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
vaaaaanquish
February 05, 2020
Technology
5
15k
gokartの運用と課題について
以下の『MLOps勉強会』 の資料です
https://m3-engineer.connpass.com/event/159721/
vaaaaanquish
February 05, 2020
Tweet
Share
More Decks by vaaaaanquish
See All by vaaaaanquish
人はいかにして 確率的な挙動を 受け入れていくのか
vaaaaanquish
6
3.6k
生成AIによるソフトウェア開発の収束地点 - Hack Fes 2025
vaaaaanquish
36
20k
LLMが機械学習分野と他分野に起こしたキャズムから見極めるエンジニアの未来像
vaaaaanquish
1
370
エムスリー流!難読クイズを作ってPythonの深淵に触れるコツ! - 技育CAMPアカデミア
vaaaaanquish
2
490
pandasはPolarsに性能面で追いつき追い越せるのか
vaaaaanquish
6
6.7k
Pythonのパッケージ管理の中級者の壁を超える stapy#98
vaaaaanquish
19
22k
Tech LT #4 人を選ぶ技術
vaaaaanquish
3
4.8k
CADDi AI LabにおけるマネージドなMLOps
vaaaaanquish
2
3.7k
RustとCADDi AI LabとML
vaaaaanquish
1
1.2k
Other Decks in Technology
See All in Technology
Serverless Agent Architecture on Azure / serverless-agent-on-azure
miyake
1
150
Databricksアシスタントが自分で考えて動く時代に! エージェントモード体験もくもく会
taka_aki
0
320
A Gentle Introduction to Transformers
keio_smilab
PRO
1
120
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.1k
LINE Messengerの次世代ストレージ選定
lycorptech_jp
PRO
19
7.4k
Lookerの最新バージョンv26.2がやばい話
waiwai2111
1
150
クラウド時代における一時権限取得
krrrr38
1
160
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
72k
Evolution of Claude Code & How to use features
oikon48
1
240
作りっぱなしで終わらせない! 価値を出し続ける AI エージェントのための「信頼性」設計 / Designing Reliability for AI Agents that Deliver Continuous Value
aoto
PRO
1
100
白金鉱業Meetup_Vol.22_Orbital Senseを支える衛星画像のマルチモーダルエンベディングと地理空間のあいまい検索技術
brainpadpr
2
210
GitLab Duo Agent Platform + Local LLMサービングで幸せになりたい
jyoshise
0
110
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
3
270
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.1k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Language of Interfaces
destraynor
162
26k
How to Ace a Technical Interview
jacobian
281
24k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
190
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
600
The Curious Case for Waylosing
cassininazir
0
260
Designing Experiences People Love
moore
143
24k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
110
Git: the NoSQL Database
bkeepers
PRO
432
66k
Transcript
【MLOps勉強会】 gokartを利用した ワークフロー運用と課題について エムスリー株式会社 AI・機械学習チーム 河合 俊典 (@vaaaaanquish) https://m3-engineer.connpass.com/event/159721/
Profile • 河合 俊典 - ばんくし @vaaaaanquish • エムスリー株式会社 AI・機械学習チーム •
調べてないけど多分この会場で一番フォロワーが多い
Agenda • gokartとは • gokartを用いた実際の機械学習モデル開発工程 • エムスリーでの運用と実課題
gokartとは
gokart • エムスリーが作成している luigi wrapper ◦ 簡易でテストの行い易い class設計 ◦ パラメータhashによるデータ管理
◦ 自動ログによる再現性 ◦ InstanceをPrameterとして扱えるようサポート ◦ 外部ライブラリ ▪ cookiecutter-gokart : gokartプロジェクトテンプレート ▪ redshells : 機械学習モデル task群 ▪ thunderbolt : データ管理 ▪ luigi_completion : CLI補完ツール • 現状どの機械学習ワークフローライブラリより扱い易く 機械学習プロジェクトの事を考えて作られたライブラリ(だと思っている)
本当にベストか調べた
本当にベストか調べた • 技術書展8 ◦ Day2 お-46 ◦ エムスリーテックブック 2 ◦
『機械学習ワークフローライブラリ選定と運用事例』 ◦ ワークフロー比較と選定のコツとか 20ページ書きました
エムスリーテックブック2より 一部かいつまんで紹介します!
機械学習ワークフローの分類 • 主目的で概ね以下のどこかに分類される ◦ 機械学習モデリング ◦ モデルバージョニング ◦ クラウド、データストレージ管理、規格化 ◦
特徴量生成自動化、学習自動化 ◦ パラメータ最適化 ◦ 機械学習モデル本番運用 ◦ 分散処理、インフラオーケストレーション ◦ クラウドサービス、Function as a Service ◦ データサイエンス、ETLプラットフォーム • luigi, gokart, metaflow, kedro, mlflow, sklearn pipline ...等
機械学習ワークフローがサポートすべき要素 • 機械学習モデルとは外的要因に強く影響を受けるアルゴリズムである • ソフトウェアパターン、デザインパターンの課題を除いて 機械学習ワークフローがサポートすべき機械学習のための要素 ◦ データ、特徴量加工の冪等性、再現性 ◦ MLモデル間の依存性
◦ MLモデルのスケーラビリティ ◦ MLモデルの保守性 ◦ MLモデルの説明可能性
gokartがサポートしている所 • データ、特徴量加工の冪等性、再現性 ◦ 全てのタスクをパラメータから生成した hash値を付けて保存 ◦ ログにも情報保存して実行を再現可能に ◦ pandasのcolumn型チェック、入出力フォーマットの制約などの機能
• MLモデルの保守性 ◦ cookiecutterによるプロジェクト構成共通化 ◦ 拡張パラメータによる管理と実験結果の保持 ◦ Thunderboltによるデータ管理 ◦ Redshellsによる学習アルゴリズムの共通化 ◦ Gitリポジトリとデータを自動保存している作業ディレクトリ ($TASK_WORKSPACE_DIRECTORY) を共有すれば他メンバーがすぐ再現できる高い保守性
gokartがサポートしていない所 • MLモデル間の依存性 ◦ Feature Store管理ツールのような、ある MLモデルが生成した特徴量の管理等は強く行っていない ◦ 複数プロジェクトで複数 $TASK_WORKSPACE_DIRECTORYが更新されるような状態は考慮していない
◦ 1プロジェクト1モジュール • MLモデルのスケーラビリティ ◦ 本番環境でpredictの度にオンライン学習といった状態には不向き ◦ batchでもhadoop, spark等の分散学習サポートは強くない ▪ luigiが一部サポートはしている • MLモデルの説明可能性 ◦ DAG可視化ツールは luigiのものは使える ◦ 特徴量の可視化や EDAは別途必要
外部評価 • 先日公開されたPipeline比較記事 でも良い評価 • nishikaコンペで入賞(審査中) ◦ 自然言語処理とMLのコンペ ◦ コードも公開予定
• (GitHub Star数が少ない…) PythonのPipelineパッケージ比較:Airflow, Luigi, Gokart, Metaflow, Kedro, PipelineX @Minyus86 2020/2/4 - https://qiita.com/Minyus86/items/70622a1502b92ac6b29c より引用
gokartを用いた 機械学習モデル開発工程
cookiecutter-gokartでのproject生成 対話形式による設定 実行可能なディレクトリができる # task run $ python main.py sample.Sample
--local-scheduler # unittest run $ python -m unittest discover -s ./test/unit_test/
cookiecutter-gokartでのproject生成 ・“sample output” 文字列を保存するtask ・データやログの自動保存先は./resource > S3やGCSを設定可能 > $TASK_WORKSPACE_DIRECTORY でも可
・loggingの設定は./conf/logging.iniを使う
gokartでTaskを書く sampleパラメータを dictに含んだものを保存する TaskA あるtaskの結果dictを元に 値を更新し結果を保存する TaskB TaskBのパラメータとしてTaskAを設定 TaskAのパラメータとして”hoge”を設定 TaskBの結果を読み込み更新して保存する
TaskC
gokartタスクを走らせる • python hoge.py [task_namespace].[ClassName] --local-scheduler ◦ luigi_completionを使うと補完してくれるので便利 • モジュールバージョン、実行時間、ログ、パラメータ
TaskA、TaskB、TaskCの結果がパラメータに応じた ハッシュ値付きで ./resource 配下に全て保存されている • パラメータ変えれば勝手に保存してくれるので 手を加えてunittest書いて実行を繰り返すだけ! DDD!
thunderboltによる結果確認 pandas.DataFrameでデータを一覧管理 Thunderbolt.get_data(“Task”) 最新の ”Task” の結果を取得 Thunderbolt.load( task_id ) tbが設定するidに応じたTask結果をロード
luigiとの比較 task instanceは渡せないので runの中でyieldして動的にTaskBを生成 する必要がある input, outputメソッドを書き連ねる形で ファイルI/O部分を記述する必要がある outputを設定 パラメータを自ら管理する記述が必要
redshellsに流す OptunaによるLightGBM最適化 Optunaで最適化したパラメータを利 用してLightGBM学習
redshellsがサポートしているモデル • XGBoost • LightGBM (#PR 49) • CatBoost (#PR
49) • Factorization Machine • Graph Convolutional Neural Network • pairwise similarity • GCMC • LDA • SCDV • TF-IDF • doc2vec • fasttext • word2vec たくさん
gokartを用いた プロダクション運用と課題
エムスリーにおけるgokart開発 • 基本的には1人1プロジェクト ◦ gokartでMLモデルと結果を生成する Batchを書く ◦ AWS ECS Batch
/ GCE / GKE ◦ BigQuery / GCS / S3 • cookiecutter-m3gokart, 共通タスクライブラリ を別途独自に作成 ◦ 各プロジェクトのディレクトリ構成が同じ ◦ GCPやAWS周りの社内向けタスク、 SQLなど共通化
エムスリーにおけるgokart運用 cookiecutter プロジェクト作成 gokart, redshells モデル作成 Thunderbolt モデル検証 Daily Batch化
Storage :共通化
エムスリーにおけるgokart開発の前提 • Dailyでの学習・推論Batchがメイン ◦ オンライン学習、分散処理、画像認識などの大規模 Taskはない ◦ 利用クラウドサービスも増えているが現状多くはない ▪ 今後Elasticsearch等をサポートしていく事になるとは思われるが
◦ ターゲットユーザが医療業界に絞られている ▪ サービス要件が急激に増減しない ▪ ドメイン、データ分布が急変しない • 全員がgokartを利用し、周辺のツールをメンテしていく ◦ プロジェクト、class設計、unittestが統一的に ◦ 機械学習モデルのオフライン評価、 KPIのためのデータ出力まで gokartで通す ▪ メンテナンス、reviewがかなり楽
gokartにおける課題 • タスクごとにリソースがスケールしない ◦ gokartのタスク粒度の設計が難しい ◦ 例: ▪ あるTaskA:メモリは1GBしか使わないが長時間かかる前処理タスク ▪
あるTaskB:メモリを10GB使うモデル学習タスク ▪ gokartのrequiresで接続するとTaskAとTaskBが同じDaily Batchに含まれる • Airflowなどで適切なクラウドサービスを使えれば良いが … • 可視化が個人に委ねられている ◦ 他ワークフローライブラリのようなタスク入出力、統計量の可視化はサポートしていない ◦ あくまでThunderboltのようなツールでのコード管理を徹底 ◦ タスク結合の結果壊れている事に気付きにくい ▪ 一応pandasのcolumn型チェックが最近入りました
• 中間ファイル、キャッシュの取り扱いが難しい ◦ batchのrerun ≠ gokart task rerun ◦ 例:日割りのデータ
▪ 前日分のデータは前日の batchがgokartで生成したファイルで良い • パラメータが同じであれば結果は冪等 ▪ 前日分がバグで空のデータになっている • hash値付データの存在で task.completeと認識されgokart的には動作 • 気付きにくい ◦ 例:他PJで生成されたデータやコード変更の反映 ▪ キャッシュのhash値が変化しない ▪ モデリングした人とデプロイした人の認識があってないと事故 ◦ モデリング時嬉しくても本番で「キャッシュ」のように扱い始めたら注意! ▪ rerunの確認 ▪ versionなどのParameterの設定 gokartにおける課題 2019/2/1 2019/2/2 2019/2/3 データ破損, rerun必要 ファイル自体は存在し gokartは動作
おわりに
まとめ • gokartは機械学習プロジェクトの勘所を抑えたワークフローライブラリ • エムスリーでは小規模ながら統一的で再現性、冪等性の担保された開発が行えている • gokartにもスケール性やオンライン化が難しいなどの課題がある
買ってね! • 技術書展8 ◦ Day2 お-46 ◦ エムスリーテックブック 2 ◦
『機械学習ワークフローライブラリ選定と運用事例』 ◦ ワークフロー比較と選定のコツとか 20ページ書きました