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
5
14k
gokartの運用と課題について
以下の『MLOps勉強会』 の資料です
https://m3-engineer.connpass.com/event/159721/
vaaaaanquish
February 05, 2020
Tweet
Share
More Decks by vaaaaanquish
See All by vaaaaanquish
エムスリー流!難読クイズを作ってPythonの深淵に触れるコツ! - 技育CAMPアカデミア
vaaaaanquish
1
170
pandasはPolarsに性能面で追いつき追い越せるのか
vaaaaanquish
6
5.6k
Pythonのパッケージ管理の中級者の壁を超える stapy#98
vaaaaanquish
19
20k
Tech LT #4 人を選ぶ技術
vaaaaanquish
3
4.2k
CADDi AI LabにおけるマネージドなMLOps
vaaaaanquish
2
3.4k
RustとCADDi AI LabとML
vaaaaanquish
1
970
機械学習OSSの変遷と未来
vaaaaanquish
2
3.9k
文字列(ダジャレを言いシャレ)
vaaaaanquish
1
16k
xonshとかいうshellの話
vaaaaanquish
1
1.8k
Other Decks in Technology
See All in Technology
Storage Browser for Amazon S3
miu_crescent
1
340
Visual StudioとかIDE関連小ネタ話
kosmosebi
1
240
効率的な技術組織が作れる!書籍『チームトポロジー』要点まとめ
iwamot
2
190
React Routerで実現する型安全なSPAルーティング
sansantech
PRO
4
850
新しいスケーリング則と学習理論
taiji_suzuki
9
3.6k
サーバーなしでWordPress運用、できますよ。
sogaoh
PRO
0
170
Qiita埋め込み用スライド
naoki_0531
0
5.5k
怖くない!ゼロから始めるPHPソースコードコンパイル入門
colopl
0
230
.NET AspireでAzure Functionsやクラウドリソースを統合する
tsubakimoto_s
0
110
事業貢献を考えるための技術改善の目標設計と改善実績 / Targeted design of technical improvements to consider business contribution and improvement performance
oomatomo
0
410
Formal Development of Operating Systems in Rust
riru
1
360
プロダクト組織で取り組むアドベントカレンダー/Advent Calendar in Product Teams
mixplace
0
660
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
427
64k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
GitHub's CSS Performance
jonrohan
1030
460k
Designing for Performance
lara
604
68k
Automating Front-end Workflow
addyosmani
1366
200k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Documentation Writing (for coders)
carmenintech
67
4.5k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
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ページ書きました