hydra-mlflow-optuna
by
Taiki Nakamura
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Hydra で始める ハイパラ管理 音声G M1 中村泰貴 1
Slide 2
Slide 2 text
2 https://github.com/supikiti/hydra-mlflow-optuna-sample 本日のコード
Slide 3
Slide 3 text
ハイパーパラメータ 管理 3
Slide 4
Slide 4 text
/32 Argparse による管理 4 指定する量多すぎ… ファイル編集しなくて いいけどさぁ… https://github.com/ibab/tensorflow-wavenet/blob/master/train.py
Slide 5
Slide 5 text
/32 hparams.py 等による管理 5 Argparseのように コマンドラインから直接 いじれたらなぁ… パラメータを変更するごとに 設定ファイルが増えていく… https://github.com/xcmyz/FastSpeech/blob/master/hparams.py
Slide 6
Slide 6 text
/32 パラメータ管理の問題点 6 ▸ ありがちなパラメータ管理の例 • パラメータを数種類変更して学習を回したいとき ▸ シェルスクリプトでパラメータのリストを定義して 学習スクリプトの引数に for のループ内で渡す ▸ パラメータを一部変更した設定ファイルを別に用意 & 都度実行 ▸ Hydra + mlflow によるパラメータ管理では • 設定パラメータをコマンドラインから数種類変更 & 実行できる ▸ 変更のたびに設定ファイルが増えない & 上記の問題が解決 本発表:Hydra + mlflowによるパラメータ管理の紹介
Slide 7
Slide 7 text
Hydra 7
Slide 8
Slide 8 text
/32 Hydra について 8 ▸ 特徴 • Facebook AI Research が公開しているパラメータ管理ツール • パラメータを階層立てて構造的に YAML ファイルに記述 • コマンドラインから設定値を上書き & 実行 • 1つのコマンドで複数のジョブを実行 https://hydra.cc/
Slide 9
Slide 9 text
/32 基本的な使い方 9 • Config ファイルに yaml 形式で設定を記述 • 関数に @hydra.mainデコレータを渡す
Slide 10
Slide 10 text
/32 Config の構造化 10 • Config ディレクトリを階層構造にすることで階層化 • 例 • Root の Config に指定したい設定をそれぞれ記述
Slide 11
Slide 11 text
/32 実装例 11 階層的に設定ファイルを 記述可能
Slide 12
Slide 12 text
/32 実装例 12 デコレータを通して パラメータが読み込まれる
Slide 13
Slide 13 text
/32 機能1: 値の変更 & 実行 13 • コマンドラインから設定値を直接変更 & 実行可能 • 先の例でcifar10 のバッチサイズを変えたい場合 設定ファイルを上書きすることなく コマンドラインから変更 & 実行可能
Slide 14
Slide 14 text
/32 機能2: グリッドサーチ 14 複数の Config ファイルの設定を全通り実行可能
Slide 15
Slide 15 text
/32 機能2: グリッドサーチ 15 パラメータのグリッドサーチも可能
Slide 16
Slide 16 text
/32 機能3: 16 • 実行ごとの設定値や実行中の出力等を自動で保存 • Outputs ディレクトリに実行日/実行毎/種々の設定ファイルが 自動保存 保存されるのはありがたいが可読性が低い mlflow を導入し改善
Slide 17
Slide 17 text
mlflow 17
Slide 18
Slide 18 text
/32 mlflowとは 18 ▸ 概要 • 機械学習の実験管理を自動で行うツール • 実験に用いたパラメータ等を保存し再現性を担保 ▸ インストール https://mlflow.org/
Slide 19
Slide 19 text
/32 実装例 19 • start_run(): runIDの発行 • log_param: パラメータの登録 • log_metric: メトリックの記録 • log_artifact: 生成物の記録 https://future-architect.github.io/articles/20200626/ サーバーが立ち上がりGUIで 確認可能
Slide 20
Slide 20 text
20 Hydra と mlflow の実装例
Slide 21
Slide 21 text
21 hydra.mainデコレータ パラメータの登録 (log_params()) メトリックの登録
Slide 22
Slide 22 text
22 モデル定義 複数パラメータのグリッドサーチ
Slide 23
Slide 23 text
23 全試行過程が自動保存 & 比較可能 loss accuracy
Slide 24
Slide 24 text
/32 Hydra + mlflow まとめ 24 ▸ Hydra • Facebook AI Research が公開しているパラメータ管理ツール • コマンドラインから設定値を複数変更 & 実行可能 ▸ mlflow • 機械学習の実験管理を自動で行うツール • GUI 上でパラメータの違いによる結果の比較が容易に可能 ▸ Hydra + mlflow • パラメータのグリッドサーチから記録・管理までを一元化可能
Slide 25
Slide 25 text
(+ Optuna) 25
Slide 26
Slide 26 text
/32 Optuna の導入 26 ▸ Optuna とは • オープンソースのハイパーパラメータ自動最適化フレームワーク • ハイパーパラメータの値に関する試行錯誤を自動化 • 優れた性能を発揮するハイパーパラメータの値を自動的に発見 ▸ Hydra + mlflow + Optuna • 設定ファイルに最適化したい変数と条件を記述することで Hydra で管理可能 • 最適化される変数と条件をコマンドラインから変更可能 Hydra のプラグインによりOptuna の導入が非常に容易に
Slide 27
Slide 27 text
/32 変更点 27 config.yaml に optuna の設定を記述
Slide 28
Slide 28 text
/32 変更点 28 デコレータを渡した関数の返り値を最適化したい変数に
Slide 29
Slide 29 text
/32 実行 29 コマンドラインから直接最適化したい変数と条件を変更可能 変数の種類 具体例 設定方法 整数型 [16, 17, …, 512] range(16, 512) カテゴリ型 [0.1, 0.01, 0.001] choice(0.1, 0.01, 0.001) 連続値 [-5.0, 5.0] 区間の連続値 interval(-5.0, 5.0) Optuna.distributions にマッピングされる
Slide 30
Slide 30 text
/32 mlflow での可視化 30 mlflow 上でも試行過程の可視化が可能
Slide 31
Slide 31 text
/32 総まとめ 31 ▸ Hydra + mlflow + Optuna • 学習時に煩雑になりがちなパラメータ管理の決定版 • Hydra と Optuna でパラメータを容易に変更・探索し mlflow で全パラメータを一元管理 ▸ さらに学びたい方には • Kedro: Workflow のパイプライン管理ツール ▸ Hydra + mlflow + Optuna + Kedro ▸ より再現性のある使い回しを意識したコードに https://github.com/quantumblacklabs/kedro
Slide 32
Slide 32 text
/32 参考資料 32 • https://cyberagent.ai/blog/research/12898/ • https://ymym3412.hatenablog.com/entry/2020/02/09/034644 • https://zerebom.hatenablog.com/#Hydra • https://speakerdeck.com/chck/sok-xiao-sakushi-meteda- kikuyu-terumlops2020