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