Slide 1

Slide 1 text

MLFLOWとHYDRAを利用した実験管理 MLFLOWとHYDRAを利用した実験管理 2021-07-13 futabato https://github.com/futabato/mlops_demo 1 MLflowとHydraを利用した実験管理 

Slide 2

Slide 2 text

自己紹介 自己紹介 Name: futabato GitHub: futabato Twitter: @01futabato10 2 MLflowとHydraを利用した実験管理 

Slide 3

Slide 3 text

今回の勉強回に関して 今回の勉強回に関して サンプルコードを用意しています。 CLONE CLONE INSTALL INSTALL or https://github.com/futabato/mlops_demo $ git clone https://github.com/futabato/mlops_demo $ cd mlops_demo/ $ pip install -r requirements.txt $ docker build -t mlops_demo . $ docker run --rm -it -v "${PWD}:/home" --name mlops_demo \ -p 5000:5000 -p 8888:8888 mlops_demo /bin/bash 3 . 1 MLflowとHydraを利用した実験管理 

Slide 4

Slide 4 text

扱う内容 扱う内容 MLflow TrackingとHydraの概要。 Mlflow単体, Hydra単体, MLflow+Hydraの 組み合わせをデモ(ハンズオン)形式での発表。 どのようにコードを記述して実行すればよいか、 どのような実験結果が得られるかを意識。 プロジェクトへの実際の導入・利用を意識。 3 . 2 MLflowとHydraを利用した実験管理 

Slide 5

Slide 5 text

学習目標 学習目標 本資料と公式Documentを合わせれば イメージを持って実装ができるようになること。 MLflow: Hydra: https://www.mlflow.org/docs/latest/index.html https://hydra.cc/docs/intro/ 3 . 3 MLflowとHydraを利用した実験管理 

Slide 6

Slide 6 text

扱わない内容 扱わない内容 MLflow, Hydra以外のMLOps関連ツール MLflow Projects, MLflow Models, MLflow Model Registry 3 . 4 MLflowとHydraを利用した実験管理 

Slide 7

Slide 7 text

目次 目次 1. MLOpsに関して 2. MLflowの基礎 3. Hydraの基礎 4. MLflowとHydraを組み合わせた実験管理 5. ABCIでの実行に関して 6. 既存コードの改修 4 MLflowとHydraを利用した実験管理 

Slide 8

Slide 8 text

MLOPSに関して MLOPSに関して 5 . 1 MLflowとHydraを利用した実験管理 

Slide 9

Slide 9 text

MLOPSの概要 MLOPSの概要 (O’Reilly) Introducing MLOps Machine learning operations (MLOps) is quickly becoming a critical component of successful data science project deployment in the enterprise. It’s a process that helps organizations and business leaders generate long-term value and reduce risk associated with data science, machine learning, and AI initiatives. 5 . 2 MLflowとHydraを利用した実験管理 

Slide 10

Slide 10 text

REAL-WORLD ML SYSTEMS REAL-WORLD ML SYSTEMS 機械学習プロジェクトで機械学習に関わるコードは 全体からみるとごくごく一部である。 このシステムの複雑さが 隠れた技術的負債を生み出してしまう。 Hidden Technical Debt in Machine Learning Systems 5 . 3 MLflowとHydraを利用した実験管理 

Slide 11

Slide 11 text

DEPENDENCIES DEPENDENCIES データが常に変化していくだけでなく、 ビジネスのニーズも常に変化する。 本番環境や本番データ上のモデルが 期待通りのものであるか 当初の問題に対処しているか 当初の目標を達成しているかを確認する 結果を継続的にビジネスに還元する必要がある。 5 . 4 MLflowとHydraを利用した実験管理 

Slide 12

Slide 12 text

PIPELINE JUNGLES PIPELINE JUNGLES パイプラインを管理し、エラーを検出して、 障害から復旧しようとすることは どれも困難でコストがかかる。 研究とエンジニアリングが過度に分離していると パイプラインが複雑化してしまうと言われる。 5 . 5 MLflowとHydraを利用した実験管理 

Slide 13

Slide 13 text

DIFFERENCE BETWEEN MLOPS AND DEVOPS DIFFERENCE BETWEEN MLOPS AND DEVOPS ソフトウェアコードを本番環境にデプロイすることと 機械学習モデルを本番環境にデプロイすることは 根本的に異なる。 機械学習モデルの運用・CI/CDの原則に加え、 機械学習プロジェクト固有の課題がある。 CT(継続的トレーニング) CM(継続的モニタリング) 5 . 6 MLflowとHydraを利用した実験管理 

Slide 14

Slide 14 text

KEEPING TRACK OF THE RESULTS OF EACH EXPERIMENT KEEPING TRACK OF THE RESULTS OF EACH EXPERIMENT 仮説検証サイクルを回すと大量の実験を行い、 大量の情報の記録・管理が発生する。 コードの再利用性を最大化しつつ、 定型的なプロセスは自動化することで 高速な仮説検証サイクルを回す。 実験の効率化と標準化が 機械学習モデル開発の効率に影響を与える。 今回は仮説検証サイクル回すためのツールとして MLflowとHydraを採用した実験管理を学んでいく。 5 . 7 MLflowとHydraを利用した実験管理 

Slide 15

Slide 15 text

MLFLOWの基礎 MLFLOWの基礎 6 . 1 MLflowとHydraを利用した実験管理 

Slide 16

Slide 16 text

ABOUT MLFLOW ABOUT MLFLOW MLflowは機械学習のライフサイクルを end-to-end で管理するための オープンソースプラットフォームである。 MLflow Trackingではパラメータと結果の 記録と比較ができる。 WebUIが用意されていて、GUIでパラメータの 違いによる結果の比較が容易にできる。 https://github.com/mlflow/mlflow 6 . 2 MLflowとHydraを利用した実験管理 

Slide 17

Slide 17 text

MOTIVATION MOTIVATION 1. 実験管理をしたい。 使用したパラメータや評価指標、結果、 出力されるファイル等を同一のフォーマット でロギングしてくれる。 これらを手動で管理しようとするのは とても大変。 2. 実験同士の比較が容易。 WebUIを開くことで 実験同士の比較がGUIでできる。 3. 実験の再現性の確保。 6 . 3 MLflowとHydraを利用した実験管理 

Slide 18

Slide 18 text

INSTALL INSTALL $ pip install mlflow 6 . 4 MLflowとHydraを利用した実験管理 

Slide 19

Slide 19 text

MLflowにはRunとExperimentという概念がある。 RUN RUN パラメータとそのパラメータに 紐づいたスコアをまとめた概念のこと。 1つの実験ごとに Runのオブジェクトが1つ生成される。 EXPERIMENT EXPERIMENT Runを取りまとめた集合のこと。 違うExperiment同士では 実験の比較はできない。 6 . 5 MLflowとHydraを利用した実験管理 

Slide 20

Slide 20 text

後ほど紹介するMLflowのWebUIでいう RunとExperimentの位置。 6 . 6 MLflowとHydraを利用した実験管理 

Slide 21

Slide 21 text

CONCEPTS CONCEPTS 各Runでは以下の情報を記録することができる。 Code Version Start & End Time Source Parameters Metrics Artifacts 6 . 7 MLflowとHydraを利用した実験管理 

Slide 22

Slide 22 text

ARTIFACTに関して ARTIFACTに関して 学習済みモデルを含めた 出力されるファイル群をArtifactという。 Hydraで利用するYAMLファイルも MLflowのArtifactとして記録ができる。(後述) 6 . 8 MLflowとHydraを利用した実験管理 

Slide 23

Slide 23 text

WHERE RUNS ARE RECORDED WHERE RUNS ARE RECORDED MLflowを利用すると、 実行したPythonスクリプトがあるパスに mlrunsディレクトリが生成される。 RDB, HTTPサーバ等に保存することもできる。 リモートで実行したりHydraと併用する場合は、 mlflow.set_tracking_uri()を利用する必要がある。 (後述) 6 . 9 MLflowとHydraを利用した実験管理 

Slide 24

Slide 24 text

WHERE ARTIFACTS ARE RECORDED WHERE ARTIFACTS ARE RECORDED Artifactとして保存するデータは大きくなる場合 があるため、ArtifactsはRunsと違う場所への 保存を指定できる。 ローカルのストレージ 各種クラウドストレージ (Amazon S3, Azure Blob Storage, Google Cloud Storage) FTPサーバ HDSF(Hadoop Distributed File System) 6 . 10 MLflowとHydraを利用した実験管理 

Slide 25

Slide 25 text

MINIMUM MLFLOW MINIMUM MLFLOW $ cat mlflow/example0.py 6 . 11 MLflowとHydraを利用した実験管理 

Slide 26

Slide 26 text

LAUNCHING THE TRACKING UI LAUNCHING THE TRACKING UI mlruns ディレクトリがある場所でWebUIを開く コマンドを叩くと、実験の可視化、検索、比較等が GUIで可能になる。 以下のコマンドを実行して、 にアクセス。 添付のDockerfileを利用している場合 http://localhost:5000 $ mlflow ui $ mlflow ui -h `hostname` 6 . 12 MLflowとHydraを利用した実験管理 

Slide 27

Slide 27 text

DEMO DEMO にアクセス $ cd mflow/ $ python3 example0.py $ mlflow ui http://localhost:5000 6 . 13 MLflowとHydraを利用した実験管理 

Slide 28

Slide 28 text

AUTOMATIC LOGGING AUTOMATIC LOGGING 各種フレームワークの自動ロギングを使うとよい。 Model, Metrics, Parameterを 自動で保存してくれる。 フレームワークのversionの指定があることには 注意が必要である。 version外の実装であれば、 個別にロギングする必要がある。 PyTorchの自動ロギングは PyTorch Lightningのみ用意されている。 6 . 14 MLflowとHydraを利用した実験管理 

Slide 29

Slide 29 text

DEMO DEMO $ cat example1.py 6 . 15 MLflowとHydraを利用した実験管理 

Slide 30

Slide 30 text

DEMO DEMO にアクセス $ python3 example1.py $ mlflow ui http://localhost:5000 6 . 16 MLflowとHydraを利用した実験管理 

Slide 31

Slide 31 text

DEMO DEMO $ cat example2.py $ python3 example2.py $ mlflow ui 6 . 17 MLflowとHydraを利用した実験管理 

Slide 32

Slide 32 text

VISUALIZE, SEARCH AND COMPARE RUNS VISUALIZE, SEARCH AND COMPARE RUNS 6 . 18 MLflowとHydraを利用した実験管理 

Slide 33

Slide 33 text

パラメータも管理したくなる パラメータも管理したくなる MLflowを使うことで出力をよしなにできそう。 これでバンバン実験回せそう! -> パラメータもシュッと管理したくなる…。 6 . 19 MLflowとHydraを利用した実験管理 

Slide 34

Slide 34 text

HYDRAの基礎 HYDRAの基礎 7 . 1 MLflowとHydraを利用した実験管理 

Slide 35

Slide 35 text

ABOUT HYDRA ABOUT HYDRA Hydraは研究やアプリケーション開発を簡素化 してくれるOSS Pythonフレームワークである。 設定ファイルの階層的な構成を 動的に作成してくれる。 設定の内容はコマンドラインから 設定を上書きできる。 https://github.com/facebookresearch/hydra 7 . 2 MLflowとHydraを利用した実験管理 

Slide 36

Slide 36 text

MOTIVATION MOTIVATION どの前処理をしたデータを使っているのか、 どのような実験条件で学習させているのかを 管理したい。 Argument Parserの引数が多くて単純に面倒。 7 . 3 MLflowとHydraを利用した実験管理 

Slide 37

Slide 37 text

INSTALL INSTALL $ pip install hydra-core 7 . 4 MLflowとHydraを利用した実験管理 

Slide 38

Slide 38 text

MINIMUM HYDARA MINIMUM HYDARA $ cd ../hydra/ $ cat example0.py $ python3 example0.py 7 . 5 MLflowとHydraを利用した実験管理 

Slide 39

Slide 39 text

DEMO DEMO $ cat example1.py $ python3 example1.py 7 . 6 MLflowとHydraを利用した実験管理 

Slide 40

Slide 40 text

HOW YAML FILES ARE REFERENCED HOW YAML FILES ARE REFERENCED $ cd conf/ $ tree 7 . 7 MLflowとHydraを利用した実験管理 

Slide 41

Slide 41 text

HOW YAML FILES ARE REFERENCED HOW YAML FILES ARE REFERENCED $ cat config.yaml data/data1.yaml model/model1.yaml 7 . 8 MLflowとHydraを利用した実験管理 

Slide 42

Slide 42 text

HOW YAML FILES ARE REFERENCED HOW YAML FILES ARE REFERENCED $ cat example1.py 7 . 9 MLflowとHydraを利用した実験管理 

Slide 43

Slide 43 text

OMEGACONF OMEGACONF OmegaConfを利用することで YAMLで設定した内容を階層的に利用できる。 https://github.com/omry/omegaconf 7 . 10 MLflowとHydraを利用した実験管理 

Slide 44

Slide 44 text

OVERRIDE CONFIGURATION FROM THE COMMAND LINE OVERRIDE CONFIGURATION FROM THE COMMAND LINE コマンドラインから設定を上書きして 実行することができる。 上書きした内容は 別途その内容がファイルに保存される。(後述) $ python3 example1.py \ data.train.image_path=./data/preprocessed/train/images/ \ model.hyperparam.epochs=30 7 . 11 MLflowとHydraを利用した実験管理 

Slide 45

Slide 45 text

AUTOMATIC WORKING DIRECTORY AUTOMATIC WORKING DIRECTORY Hydraを使ったPythonスクリプトを実行するごとに、 新たなworking directoryが自動的に作成される。 この仕様はMLflowと組み合わせて利用する際に 注意すべき点となる。 $ ls $ cd output/日付/時間/ $ ls -a 7 . 12 MLflowとHydraを利用した実験管理 

Slide 46

Slide 46 text

OUTPUT OUTPUT .hydra/config.yaml: まとめられたYAMLの内容。 .hydra/hydra.yaml: Hydraの構成をdumpしたもの。 .hydra/overrides.yaml: コマンドラインから上書きした内容 example1.log: example1.pyを実行した際のログ。 $ tree -a $ cat .hydra/config.yaml 7 . 13 MLflowとHydraを利用した実験管理 

Slide 47

Slide 47 text

MULTIRUN MULTIRUN 引数に–multirun (-m)をつけて実行すると、 同一のPythonスクリプトを 複数の異なる設定で動かすことができる。 $ cd ../../../ $ python3 example1.py --multirun \ data.train.image_path=./data/train/images/,./data/preprocessed/ 7 . 14 MLflowとHydraを利用した実験管理 

Slide 48

Slide 48 text

OUTPUT OUTPUT Multirunの実行後は、 通常のoutput以下ではなく、multirun/日付/時間/に Hydraの出力ファイルが保存されている。 $ ls $ cd multirun/日付/時間/ $ ls $ cd 0/ $ ls -a 7 . 15 MLflowとHydraを利用した実験管理 

Slide 49

Slide 49 text

実験管理をしたくなるお気持ち 実験管理をしたくなるお気持ち Hydraを使うことで入力をよしなにできた。 これでバンバン実験回せそう! → YAMLを読み解くのは大変>< 実験結果をいい感じに 管理してくれるものがあればなぁ…。 7 . 16 MLflowとHydraを利用した実験管理 

Slide 50

Slide 50 text

MLFLOWとHYDRAを MLFLOWとHYDRAを 組み合わせた実験管理 組み合わせた実験管理 8 . 1 MLflowとHydraを利用した実験管理 

Slide 51

Slide 51 text

MOTIVATION MOTIVATION MLFLOW MLFLOW 実験に利用した値や精度、 出力されるファイル群のロギングができる。 実験同士の比較をGUIで行える。 → より効率よく実験を回せるようになりたい。 8 . 2 MLflowとHydraを利用した実験管理 

Slide 52

Slide 52 text

MOTIVATION MOTIVATION HYDRA HYDRA parameterの管理が容易になる。 コードの再利用時は構成ファイルの パスを変更するだけ。 実行ごとの設定値等が自動で保存される。 → 入力をよしなにしてくれるなら、 実行結果もよしなに管理したい。 8 . 3 MLflowとHydraを利用した実験管理 

Slide 53

Slide 53 text

INTEGRATION INTEGRATION InputはHydra, OutputはMLflowに任せることで、 実験の記録・管理を一元管理できる。 実装する上ではある1点に注意して、 今までに紹介した内容を組み合わせればよい。 $ cd ../../../../../Integration/ 8 . 4 MLflowとHydraを利用した実験管理 

Slide 54

Slide 54 text

INTEGRATION INTEGRATION $ cat example0.py 8 . 5 MLflowとHydraを利用した実験管理 

Slide 55

Slide 55 text

SET TRACKING URI SET TRACKING URI Hydraを使おうとするとworking directory が変更されてしまうので、以下の設定が必要になる。 mlflow.set_tracking_uri(“file://” + hydra.utils.get_original_cwd() + “/mlruns”) 8 . 6 MLflowとHydraを利用した実験管理 

Slide 56

Slide 56 text

DEMO DEMO $ python3 example0.py $ mlflow ui 8 . 7 MLflowとHydraを利用した実験管理 

Slide 57

Slide 57 text

DEMO DEMO Hydraでパラメータ管理をした上で、 MLflowによる実験管理ができている。 8 . 8 MLflowとHydraを利用した実験管理 

Slide 58

Slide 58 text

ABCIでの実行に関して ABCIでの実行に関して 9 . 1 MLflowとHydraを利用した実験管理 

Slide 59

Slide 59 text

ABCIでの実行に関して ABCIでの実行に関して 大規模AIクラウド計算システム「ABCI」上でも 問題なく使えることが確認できた。 MLflowのWebUIも SSH port fowardingすることで開けた。 Groupの領域にmlrunsディレクトリをおけば チームで各自が確認できるはずである。 9 . 2 MLflowとHydraを利用した実験管理 

Slide 60

Slide 60 text

ABCIでMLFLOWのWEBUIを開く ABCIでMLFLOWのWEBUIを開く 1. ABCIにSSHしてWebUIを開く 2. 別のターミナルを開きSSH portforwardingを行う 3. PCのブラウザで以下のURLにアクセス $ ssh abci $ qrsh -g gXXXXXXX -l rt_F=1 -l h_rt=1:00:00 $ module load gcc/9.3.0 python/3.8/3.8.7 $ source /bin/activate $ cd $ python3 example0.py $ mlflow ui -h `hostname` $ ssh -L 5000:gXXXX:5000 abci http://localhost:5000/ 9 . 3 MLflowとHydraを利用した実験管理 

Slide 61

Slide 61 text

既存コードの改修 既存コードの改修 10 . 1 MLflowとHydraを利用した実験管理 

Slide 62

Slide 62 text

既存コードの改修 既存コードの改修 既存の実装コードに対して MLflowとHydraを組み込む必要がある。 10 . 2 MLflowとHydraを利用した実験管理 

Slide 63

Slide 63 text

MLFLOWの導入 MLFLOWの導入 MLflowを導入に対する改修コストは そこまで高くない。 Auto Loggingが使えるなら利用する。 Auto Loggingが使えない場合は、 チームで議論した上で一定のルールを持って 実装した方がよさそう。 mlrunsディレクトリは消さないように! 10 . 3 MLflowとHydraを利用した実験管理 

Slide 64

Slide 64 text

MLFLOWの導入 MLFLOWの導入 Auto Loggingが使えない場合に チームで議論しておいたほうがよさそうなこと。 mlflowでロギングする内容は? mlflow.log_paramはHydraのYAMLから ロードされた段階で保存すべき? mlflow.log_metricsは 記録された段階でよさそう? mlflow.log_artifactで保存すべきファイルは? 10 . 4 MLflowとHydraを利用した実験管理 

Slide 65

Slide 65 text

HYDRAの導入 HYDRAの導入 Hydraに関しては、 MLflowに比べると改修コストは高くなる。 まずはmain(となる)関数を作成して、 Hydraのデコレータをつける。 良い実装ほどHydra化は簡単だと思われる。 データとコード実行に必要なパラメータで YAMLは分けた方がよさそう。 メインのYAMLでは参照するデータのYAML とパラメータのYAMLを指定する感じ。 10 . 5 MLflowとHydraを利用した実験管理 

Slide 66

Slide 66 text

HYDRAの導入 HYDRAの導入 YAMLの構成、Hydraで管理する内容で チームで議論しておいたほうがよさそうなこと。 YAMLに記載するのは ArgumentParserの内容だけで良い? 例えば医用画像セグメンテーションタスク ならLossも管理できるとよさそう。 このあたりは実装とタスクによる。 10 . 6 MLflowとHydraを利用した実験管理 

Slide 67

Slide 67 text

TIPS TIPS YAMLに記載するパスは 相対パスではなく絶対パスの方が安心。 いきなりいい感じにYAMLを分割するよりかは、 まずは1つのYAMLで実装→複数のYAMLに分割 していくと実装しやすい。 10 . 7 MLflowとHydraを利用した実験管理 

Slide 68

Slide 68 text

既存コードの改修まとめ 既存コードの改修まとめ MLflowのauto loggingが 使えないなら漏れがないように注意する。 Hydra化を一気に行うのは混乱してしまうので、 1つのYAMLにまとめた後、 複数のYAMLに分割した方がよさそう。 YAMLの構造は実装やタスクによって 変わってきそうなので、チーム内で 相談しながら最適な形を模索する。 10 . 8 MLflowとHydraを利用した実験管理 

Slide 69

Slide 69 text

INTRODUCING MLOPS(O’REILLY) INTRODUCING MLOPS(O’REILLY) MLFLOW DOCUMENTATION MLFLOW DOCUMENTATION HYDRA DOCUMENTATION HYDRA DOCUMENTATION SAMPLE CODE SAMPLE CODE https://itlligenze.com/uploads/5/137039/files/oreilly- ml-ops.pdf https://mlflow.org/docs/latest/index.html https://hydra.cc/docs/intro/ https://github.com/futabato/mlops_demo 11 MLflowとHydraを利用した実験管理 

Slide 70

Slide 70 text

END END 12 MLflowとHydraを利用した実験管理   