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

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

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

ふたばと

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を利用した実験管理 