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
vaaaaanquish
February 05, 2020
Technology
15k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
gokartの運用と課題について
以下の『MLOps勉強会』 の資料です
https://m3-engineer.connpass.com/event/159721/
vaaaaanquish
February 05, 2020
More Decks by vaaaaanquish
See All by vaaaaanquish
人はいかにして 確率的な挙動を 受け入れていくのか
vaaaaanquish
6
3.9k
生成AIによるソフトウェア開発の収束地点 - Hack Fes 2025
vaaaaanquish
36
21k
LLMが機械学習分野と他分野に起こしたキャズムから見極めるエンジニアの未来像
vaaaaanquish
1
430
エムスリー流!難読クイズを作ってPythonの深淵に触れるコツ! - 技育CAMPアカデミア
vaaaaanquish
2
540
pandasはPolarsに性能面で追いつき追い越せるのか
vaaaaanquish
6
6.8k
Pythonのパッケージ管理の中級者の壁を超える stapy#98
vaaaaanquish
19
23k
Tech LT #4 人を選ぶ技術
vaaaaanquish
3
4.9k
CADDi AI LabにおけるマネージドなMLOps
vaaaaanquish
2
3.8k
RustとCADDi AI LabとML
vaaaaanquish
1
1.2k
Other Decks in Technology
See All in Technology
AIの性能が向上しても未解決な組織の重大問題は何か?/An Unsolved Organizational Problem in the Age of AI
moriyuya
3
560
小さくはじめるSLI/SLO ~育てながら組織に定着させる実践知~ / Starting Small with SLI/SLOs: Building Adoption Through Continuous Growth
nari_ex
2
1.1k
DevOps Agentで始めるAWS運用 〜フロンティアエージェントが変える運用の現場〜
nyankotaro
1
360
製造業のクラウド活用最適解〜AI,DXを加速するデータ基盤の作り方〜
hamadakoji
0
430
チームで進めるAI駆動アジャイル×ウォーターフォール
kumaiu
0
140
Agentic Web
dynamis
1
200
AIっぽい文章を採点して人間らしく直すアプリを作ってみた
yama3133
2
110
Databricks における 生成AIガバナンスの実践
taka_aki
1
370
AIソロプレナー時代に2ヶ月で20人増員した事業創造会社の開発組織の話
miyatakoji
0
510
Agentic ERPをどう設計するか ー 受発注エージェントを動かす、現場の知見と設計思想ー
recerqainc
1
2.1k
2026 TECHFRESH 畢業分享會 - 開發日常大解密!從領域驅動到企業級上線
line_developers_tw
PRO
0
570
新しいVibe Codingと”自走”について
watany
5
270
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Speed Design
sergeychernyshev
33
1.8k
Designing for humans not robots
tammielis
254
26k
Tell your own story through comics
letsgokoyo
1
950
Practical Orchestrator
shlominoach
191
11k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Ethics towards AI in product and experience design
skipperchong
2
310
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
190
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Test your architecture with Archunit
thirion
1
2.3k
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ページ書きました