Copyright©2019 NTT corp. All Rights Reserved.
MLflowによる機械学習モデルの
ライフサイクルの管理
Takeshi Yamamuro, NTT
このスライドは以下の発表を参考に作成しています
[1] Matei Zaharia, Accelerating Machine Learning Development
with MLflow, XLDB2019
2Copyright©2019 NTT corp. All Rights Reserved.
⾃⼰紹介
3Copyright©2019 NTT corp. All Rights Reserved.
お知らせ - https://bit.ly/30Sh4MU
4Copyright©2019 NTT corp. All Rights Reserved.
MLflow 1.0リリース
https://bit.ly/2Iq1j7F
aa$ pip install mlflow==1.0.0
5Copyright©2019 NTT corp. All Rights Reserved.
• 企業での機械学習の利⽤は「前処理→モデル学習→デプ
ロイ」のライフサイクルで構成されることが多い
機械学習モデルのライフサイクルと特徴
[1]のp4から引用
• データは変化するため,このサ
イクルを繰り返す
• 複数⼈が似た(もしくは同じ)
タスクで学習を⾏う
• 実⾏環境や前処理・モデル学習
に⽤いるライブラリは⼈や時代
によって様々
6Copyright©2019 NTT corp. All Rights Reserved.
• MLflowは企業における機械学習モデルの再現性や再利
⽤性を向上させるための機能を提供
• 先⾏する取り組みにTFX@Google,FBLearner@Facebook,
Michelangelo@Uberなど
• MLflowは以下3つの機能を提供
• MLflow Tracking:
追跡性と再現性を⾼めるため,学習条件やスコアなど実験
内容を記録するロギングフレームワークを提供
• MLflow Projects:
再利⽤性を⾼めるため,学習スクリプトの実⾏環境の再現
と起動(パラメータの与え⽅など)を⽀援
• MLflow Models:
学習モデルのフォーマットを定め,デプロイを⽀援
MLflowは何をしてくれるの?
7Copyright©2019 NTT corp. All Rights Reserved.
• ライブラリ⾮依存性(Library-Agnostic)
• MLflow⾃体に前処理や学習を⾏う機能があるわけではなく,
あくまで既存のライブラリ(pandas,scikit-learn,
XGBoost/LightGBM,PyTorch,Spark,TensorFlowなど)
を⽀援する位置づけ
MLflowは何をしてくれるの?
8Copyright©2019 NTT corp. All Rights Reserved.
• ログ記録のためのAPIsと,記録されたログを確認・⽐
較するためのViewを提供
MLflow Tracking
MLflow Web UIs ([1]のp10から引用)
# 学習条件の記録
mlflow.log_param(‘training_data’, data)
mlflow.log_param(‘n’, n)
mlflow.log_param(‘learning_rate’, lr)
# スコアの記録
mlflow.log_metric(‘score’, rmse)
# 学習したモデルの記録
mlflow.sklearn.log_model(clf)
9Copyright©2019 NTT corp. All Rights Reserved.
• MLflow Tracking Server
• デフォルトではログはローカルに保存されるが,Tracking
Serverを起動することで複数⼈で実験内容を共有可
MLflow Tracking
$ mlflow server 
--backend-store-uri /mnt/persistent-disk 
--default-artifact-root s3://my-mlflow-bucket/ 
--host 0.0.0.0
10Copyright©2019 NTT corp. All Rights Reserved.
MLflow Projects
• 簡潔なパッケージフォーマットを提供
• conda(もしくはdocker)を使った学習スクリプトの依存関係
の解決,学習スクリプトの実⾏を⾃動化
MLProjectの内容(Makefile的なもの)
11Copyright©2019 NTT corp. All Rights Reserved.
MLflow Projects
• 実⾏は「mlflow run <project path>」
• Makefileのmake的なもの
• <project path>にはgitのURI(git://...)も⼊⼒可能
12Copyright©2019 NTT corp. All Rights Reserved.
MLflow Models
[1]のp18から引用
13Copyright©2019 NTT corp. All Rights Reserved.
• 公式ドキュメント
• https://www.mlflow.org/docs/latest/index.html
• 公式のexamples
• https://github.com/mlflow/mlflow/tree/master/examples
• ⽤途ごとに例があるのでテンプレートとして使いやすいかも
• Spark+AI Summit 2019でのチュートリアル
• Managing the Complete Machine Learning Lifecycle
with MLflow
• https://github.com/amesar/mlflow-spark-summit-2019
MLflowを始めるうえで参考になりそうな情報
14Copyright©2019 NTT corp. All Rights Reserved.
• 1.0リリースに関して@Keynote
• Accelerating the Machine Learning Lifecycle with MLflow 1.0
• ハイパーパラメータチューニングの⽅法論とMLflowによる実践
• Best Practices for Hyperparameter Tuning with MLflow
• Advanced Hyperparameter Optimization for Deep Learning
with MLflow
• 前処理・学習をMLflowで管理し,Kubeflow環境にデプロイ
• How to Utilize MLflow and Kubernetes to Build an Enterprise
ML Platform
その他のSummitでの関連発表
15Copyright©2019 NTT corp. All Rights Reserved.
• サンプルコード
• https://bit.ly/2KpCVWe
• 起動⽅法の例: 「mlflow run . -P learning_rate=12」
MLflowを試す
モデルの学習用のスクリプト
実行環境の依存関係情報(conda env export)
「mlflow run」 から読まれる定義ファイル(Makefile的なもの)
- 依存関係を記述したファイル(conda.yaml)の場所
- 学習スクリプト(train.py)の起動方法
MLflowと関係のないファイル
16Copyright©2019 NTT corp. All Rights Reserved.
• サンプルシナリオ(train.pyの内容)
• ① 外部キー制約をもつ3つの⼊⼒データ(下図)をSparkでJoinして
⾮正規化したDataFrameを作成
• ② DataFrameをpandasのフォーマットに変換
• ③ XGBoostを⽤いてモデルを学習
• ④ 最後に学習に⽤いた条件/モデル/スコアをMLflowに記録
MLflowを試す
S_sales
R1_indicators
R2_stores
csv
csv
csv
Spark dfpandas df学習モデル
② toPandas ① Join③ Learn
R2_stores{store, …}_

S_sales{weekly_sales, sid, …, purchaseid, store}
^^^^^^^^^^^^^ /
R1_indicators{purchaseid, …} _/
目的変数
④ Log
17Copyright©2019 NTT corp. All Rights Reserved.
• Web UIs上でモデル学習のログを確認
MLflowを試す
スコアが最も良い条件
18Copyright©2019 NTT corp. All Rights Reserved.
• Web UIs上でモデル学習のログを確認
MLflowを試す
出力された学習モデルの場所
19Copyright©2019 NTT corp. All Rights Reserved.
• 学習したモデルをデプロイ
MLflowを試す
aa
// 「mlflow pyfunc」でRESTサーバにデプロイ
$ mlflow pyfunc serve -p 4321 -m <学習モデルの場所>
• Running on http://127.0.0.1:4321/ (Press CTRL+C to quit)
aa
$ curl -X POST -H “Content-Type:application/json;format=pandas-split”
--data ‘<特徴量ベクトル>’ http://127.0.0.1:4321/invocations
[4]
20Copyright©2019 NTT corp. All Rights Reserved.
• 覚えることが少なく,⾮常にシンプルな設計
• この⼿のツールは覚えなければいけない”お約束”が多く導⼊コ
ストが⾼い印象があるが,その⼼配は少ない
• モデル構築に使⽤したスクリプトが既にあるのであれば,
importして学習に⽤いた条件/モデル/スコアを記録するように
数⾏エントリを追加するだけでも⼤丈夫そう
• プラガブルな設計による⾼い拡張性
• 独⾃の学習アルゴリズム実装を使っていても簡単に対応可能
• また今後流⾏る学習ライブラリが出てきた場合にでもコミュニ
ティとして容易に追従可能
MLflowに関する所感

MLflowによる機械学習モデルのライフサイクルの管理

  • 1.
    Copyright©2019 NTT corp.All Rights Reserved. MLflowによる機械学習モデルの ライフサイクルの管理 Takeshi Yamamuro, NTT このスライドは以下の発表を参考に作成しています [1] Matei Zaharia, Accelerating Machine Learning Development with MLflow, XLDB2019
  • 2.
    2Copyright©2019 NTT corp.All Rights Reserved. ⾃⼰紹介
  • 3.
    3Copyright©2019 NTT corp.All Rights Reserved. お知らせ - https://bit.ly/30Sh4MU
  • 4.
    4Copyright©2019 NTT corp.All Rights Reserved. MLflow 1.0リリース https://bit.ly/2Iq1j7F aa$ pip install mlflow==1.0.0
  • 5.
    5Copyright©2019 NTT corp.All Rights Reserved. • 企業での機械学習の利⽤は「前処理→モデル学習→デプ ロイ」のライフサイクルで構成されることが多い 機械学習モデルのライフサイクルと特徴 [1]のp4から引用 • データは変化するため,このサ イクルを繰り返す • 複数⼈が似た(もしくは同じ) タスクで学習を⾏う • 実⾏環境や前処理・モデル学習 に⽤いるライブラリは⼈や時代 によって様々
  • 6.
    6Copyright©2019 NTT corp.All Rights Reserved. • MLflowは企業における機械学習モデルの再現性や再利 ⽤性を向上させるための機能を提供 • 先⾏する取り組みにTFX@Google,FBLearner@Facebook, Michelangelo@Uberなど • MLflowは以下3つの機能を提供 • MLflow Tracking: 追跡性と再現性を⾼めるため,学習条件やスコアなど実験 内容を記録するロギングフレームワークを提供 • MLflow Projects: 再利⽤性を⾼めるため,学習スクリプトの実⾏環境の再現 と起動(パラメータの与え⽅など)を⽀援 • MLflow Models: 学習モデルのフォーマットを定め,デプロイを⽀援 MLflowは何をしてくれるの?
  • 7.
    7Copyright©2019 NTT corp.All Rights Reserved. • ライブラリ⾮依存性(Library-Agnostic) • MLflow⾃体に前処理や学習を⾏う機能があるわけではなく, あくまで既存のライブラリ(pandas,scikit-learn, XGBoost/LightGBM,PyTorch,Spark,TensorFlowなど) を⽀援する位置づけ MLflowは何をしてくれるの?
  • 8.
    8Copyright©2019 NTT corp.All Rights Reserved. • ログ記録のためのAPIsと,記録されたログを確認・⽐ 較するためのViewを提供 MLflow Tracking MLflow Web UIs ([1]のp10から引用) # 学習条件の記録 mlflow.log_param(‘training_data’, data) mlflow.log_param(‘n’, n) mlflow.log_param(‘learning_rate’, lr) # スコアの記録 mlflow.log_metric(‘score’, rmse) # 学習したモデルの記録 mlflow.sklearn.log_model(clf)
  • 9.
    9Copyright©2019 NTT corp.All Rights Reserved. • MLflow Tracking Server • デフォルトではログはローカルに保存されるが,Tracking Serverを起動することで複数⼈で実験内容を共有可 MLflow Tracking $ mlflow server --backend-store-uri /mnt/persistent-disk --default-artifact-root s3://my-mlflow-bucket/ --host 0.0.0.0
  • 10.
    10Copyright©2019 NTT corp.All Rights Reserved. MLflow Projects • 簡潔なパッケージフォーマットを提供 • conda(もしくはdocker)を使った学習スクリプトの依存関係 の解決,学習スクリプトの実⾏を⾃動化 MLProjectの内容(Makefile的なもの)
  • 11.
    11Copyright©2019 NTT corp.All Rights Reserved. MLflow Projects • 実⾏は「mlflow run <project path>」 • Makefileのmake的なもの • <project path>にはgitのURI(git://...)も⼊⼒可能
  • 12.
    12Copyright©2019 NTT corp.All Rights Reserved. MLflow Models [1]のp18から引用
  • 13.
    13Copyright©2019 NTT corp.All Rights Reserved. • 公式ドキュメント • https://www.mlflow.org/docs/latest/index.html • 公式のexamples • https://github.com/mlflow/mlflow/tree/master/examples • ⽤途ごとに例があるのでテンプレートとして使いやすいかも • Spark+AI Summit 2019でのチュートリアル • Managing the Complete Machine Learning Lifecycle with MLflow • https://github.com/amesar/mlflow-spark-summit-2019 MLflowを始めるうえで参考になりそうな情報
  • 14.
    14Copyright©2019 NTT corp.All Rights Reserved. • 1.0リリースに関して@Keynote • Accelerating the Machine Learning Lifecycle with MLflow 1.0 • ハイパーパラメータチューニングの⽅法論とMLflowによる実践 • Best Practices for Hyperparameter Tuning with MLflow • Advanced Hyperparameter Optimization for Deep Learning with MLflow • 前処理・学習をMLflowで管理し,Kubeflow環境にデプロイ • How to Utilize MLflow and Kubernetes to Build an Enterprise ML Platform その他のSummitでの関連発表
  • 15.
    15Copyright©2019 NTT corp.All Rights Reserved. • サンプルコード • https://bit.ly/2KpCVWe • 起動⽅法の例: 「mlflow run . -P learning_rate=12」 MLflowを試す モデルの学習用のスクリプト 実行環境の依存関係情報(conda env export) 「mlflow run」 から読まれる定義ファイル(Makefile的なもの) - 依存関係を記述したファイル(conda.yaml)の場所 - 学習スクリプト(train.py)の起動方法 MLflowと関係のないファイル
  • 16.
    16Copyright©2019 NTT corp.All Rights Reserved. • サンプルシナリオ(train.pyの内容) • ① 外部キー制約をもつ3つの⼊⼒データ(下図)をSparkでJoinして ⾮正規化したDataFrameを作成 • ② DataFrameをpandasのフォーマットに変換 • ③ XGBoostを⽤いてモデルを学習 • ④ 最後に学習に⽤いた条件/モデル/スコアをMLflowに記録 MLflowを試す S_sales R1_indicators R2_stores csv csv csv Spark dfpandas df学習モデル ② toPandas ① Join③ Learn R2_stores{store, …}_ S_sales{weekly_sales, sid, …, purchaseid, store} ^^^^^^^^^^^^^ / R1_indicators{purchaseid, …} _/ 目的変数 ④ Log
  • 17.
    17Copyright©2019 NTT corp.All Rights Reserved. • Web UIs上でモデル学習のログを確認 MLflowを試す スコアが最も良い条件
  • 18.
    18Copyright©2019 NTT corp.All Rights Reserved. • Web UIs上でモデル学習のログを確認 MLflowを試す 出力された学習モデルの場所
  • 19.
    19Copyright©2019 NTT corp.All Rights Reserved. • 学習したモデルをデプロイ MLflowを試す aa // 「mlflow pyfunc」でRESTサーバにデプロイ $ mlflow pyfunc serve -p 4321 -m <学習モデルの場所> • Running on http://127.0.0.1:4321/ (Press CTRL+C to quit) aa $ curl -X POST -H “Content-Type:application/json;format=pandas-split” --data ‘<特徴量ベクトル>’ http://127.0.0.1:4321/invocations [4]
  • 20.
    20Copyright©2019 NTT corp.All Rights Reserved. • 覚えることが少なく,⾮常にシンプルな設計 • この⼿のツールは覚えなければいけない”お約束”が多く導⼊コ ストが⾼い印象があるが,その⼼配は少ない • モデル構築に使⽤したスクリプトが既にあるのであれば, importして学習に⽤いた条件/モデル/スコアを記録するように 数⾏エントリを追加するだけでも⼤丈夫そう • プラガブルな設計による⾼い拡張性 • 独⾃の学習アルゴリズム実装を使っていても簡単に対応可能 • また今後流⾏る学習ライブラリが出てきた場合にでもコミュニ ティとして容易に追従可能 MLflowに関する所感