Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MLflowとHydraを利用した実験管理

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 MLflowとHydraを利用した実験管理

Avatar for ふたばと

ふたばと

July 13, 2021
Tweet

More Decks by ふたばと

Other Decks in Programming

Transcript

  1. 今回の勉強回に関して 今回の勉強回に関して サンプルコードを用意しています。 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を利用した実験管理 
  2. 目次 目次 1. MLOpsに関して 2. MLflowの基礎 3. Hydraの基礎 4. MLflowとHydraを組み合わせた実験管理

    5. ABCIでの実行に関して 6. 既存コードの改修 4 MLflowとHydraを利用した実験管理 
  3. 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を利用した実験管理 
  4. DIFFERENCE BETWEEN MLOPS AND DEVOPS DIFFERENCE BETWEEN MLOPS AND DEVOPS

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

    OF THE RESULTS OF EACH EXPERIMENT 仮説検証サイクルを回すと大量の実験を行い、 大量の情報の記録・管理が発生する。 コードの再利用性を最大化しつつ、 定型的なプロセスは自動化することで 高速な仮説検証サイクルを回す。 実験の効率化と標準化が 機械学習モデル開発の効率に影響を与える。 今回は仮説検証サイクル回すためのツールとして MLflowとHydraを採用した実験管理を学んでいく。 5 . 7 MLflowとHydraを利用した実験管理 
  6. ABOUT MLFLOW ABOUT MLFLOW MLflowは機械学習のライフサイクルを end-to-end で管理するための オープンソースプラットフォームである。 MLflow Trackingではパラメータと結果の

    記録と比較ができる。 WebUIが用意されていて、GUIでパラメータの 違いによる結果の比較が容易にできる。 https://github.com/mlflow/mlflow 6 . 2 MLflowとHydraを利用した実験管理 
  7. MOTIVATION MOTIVATION 1. 実験管理をしたい。 使用したパラメータや評価指標、結果、 出力されるファイル等を同一のフォーマット でロギングしてくれる。 これらを手動で管理しようとするのは とても大変。 2.

    実験同士の比較が容易。 WebUIを開くことで 実験同士の比較がGUIでできる。 3. 実験の再現性の確保。 6 . 3 MLflowとHydraを利用した実験管理 
  8. CONCEPTS CONCEPTS 各Runでは以下の情報を記録することができる。 Code Version Start & End Time Source

    Parameters Metrics Artifacts 6 . 7 MLflowとHydraを利用した実験管理 
  9. WHERE RUNS ARE RECORDED WHERE RUNS ARE RECORDED MLflowを利用すると、 実行したPythonスクリプトがあるパスに

    mlrunsディレクトリが生成される。 RDB, HTTPサーバ等に保存することもできる。 リモートで実行したりHydraと併用する場合は、 mlflow.set_tracking_uri()を利用する必要がある。 (後述) 6 . 9 MLflowとHydraを利用した実験管理 
  10. 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を利用した実験管理 
  11. MINIMUM MLFLOW MINIMUM MLFLOW $ cat mlflow/example0.py 6 . 11

    MLflowとHydraを利用した実験管理 
  12. 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を利用した実験管理 
  13. DEMO DEMO にアクセス $ cd mflow/ $ python3 example0.py $

    mlflow ui http://localhost:5000 6 . 13 MLflowとHydraを利用した実験管理 
  14. AUTOMATIC LOGGING AUTOMATIC LOGGING 各種フレームワークの自動ロギングを使うとよい。 Model, Metrics, Parameterを 自動で保存してくれる。 フレームワークのversionの指定があることには

    注意が必要である。 version外の実装であれば、 個別にロギングする必要がある。 PyTorchの自動ロギングは PyTorch Lightningのみ用意されている。 6 . 14 MLflowとHydraを利用した実験管理 
  15. DEMO DEMO にアクセス $ python3 example1.py $ mlflow ui http://localhost:5000

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

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

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

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

    6 MLflowとHydraを利用した実験管理 
  20. HOW YAML FILES ARE REFERENCED HOW YAML FILES ARE REFERENCED

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

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

    $ cat example1.py 7 . 9 MLflowとHydraを利用した実験管理 
  23. 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を利用した実験管理 
  24. MULTIRUN MULTIRUN 引数に–multirun (-m)をつけて実行すると、 同一のPythonスクリプトを 複数の異なる設定で動かすことができる。 $ cd ../../../ $

    python3 example1.py --multirun \ data.train.image_path=./data/train/images/,./data/preprocessed/ 7 . 14 MLflowとHydraを利用した実験管理 
  25. DEMO DEMO $ python3 example0.py $ mlflow ui 8 .

    7 MLflowとHydraを利用した実験管理 
  26. 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 <path/to/virtualenv>/bin/activate $ cd <path/to/mlops_demo/Integration> $ python3 example0.py $ mlflow ui -h `hostname` $ ssh -L 5000:gXXXX:5000 abci http://localhost:5000/ 9 . 3 MLflowとHydraを利用した実験管理 
  27. 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を利用した実験管理 