$30 off During Our Annual Pro Sale. View Details »

hydra-mlflow-optuna

 hydra-mlflow-optuna

Taiki Nakamura

December 21, 2020
Tweet

More Decks by Taiki Nakamura

Other Decks in Programming

Transcript

  1. Hydra で始める
    ハイパラ管理
    音声G M1 中村泰貴
    1

    View Slide

  2. 2
    https://github.com/supikiti/hydra-mlflow-optuna-sample
    本日のコード

    View Slide

  3. ハイパーパラメータ
    管理
    3

    View Slide

  4. /32
    Argparse による管理
    4
    指定する量多すぎ…
    ファイル編集しなくて
    いいけどさぁ…
    https://github.com/ibab/tensorflow-wavenet/blob/master/train.py

    View Slide

  5. /32
    hparams.py 等による管理
    5
    Argparseのように
    コマンドラインから直接
    いじれたらなぁ…
    パラメータを変更するごとに
    設定ファイルが増えていく…
    https://github.com/xcmyz/FastSpeech/blob/master/hparams.py

    View Slide

  6. /32
    パラメータ管理の問題点
    6
    ▸ ありがちなパラメータ管理の例
    • パラメータを数種類変更して学習を回したいとき
    ▸ シェルスクリプトでパラメータのリストを定義して
    学習スクリプトの引数に for のループ内で渡す
    ▸ パラメータを一部変更した設定ファイルを別に用意 & 都度実行
    ▸ Hydra + mlflow によるパラメータ管理では
    • 設定パラメータをコマンドラインから数種類変更 & 実行できる
    ▸ 変更のたびに設定ファイルが増えない & 上記の問題が解決
    本発表:Hydra + mlflowによるパラメータ管理の紹介

    View Slide

  7. Hydra
    7

    View Slide

  8. /32
    Hydra について
    8
    ▸ 特徴
    • Facebook AI Research が公開しているパラメータ管理ツール
    • パラメータを階層立てて構造的に YAML ファイルに記述
    • コマンドラインから設定値を上書き & 実行
    • 1つのコマンドで複数のジョブを実行
    https://hydra.cc/

    View Slide

  9. /32
    基本的な使い方
    9
    • Config ファイルに yaml 形式で設定を記述
    • 関数に @hydra.mainデコレータを渡す

    View Slide

  10. /32
    Config の構造化
    10
    • Config ディレクトリを階層構造にすることで階層化
    • 例
    • Root の Config に指定したい設定をそれぞれ記述

    View Slide

  11. /32
    実装例
    11
    階層的に設定ファイルを
    記述可能

    View Slide

  12. /32
    実装例
    12
    デコレータを通して
    パラメータが読み込まれる

    View Slide

  13. /32
    機能1: 値の変更 & 実行
    13
    • コマンドラインから設定値を直接変更 & 実行可能
    • 先の例でcifar10 のバッチサイズを変えたい場合
    設定ファイルを上書きすることなく
    コマンドラインから変更 & 実行可能

    View Slide

  14. /32
    機能2: グリッドサーチ
    14
    複数の Config ファイルの設定を全通り実行可能

    View Slide

  15. /32
    機能2: グリッドサーチ
    15
    パラメータのグリッドサーチも可能

    View Slide

  16. /32
    機能3:
    16
    • 実行ごとの設定値や実行中の出力等を自動で保存
    • Outputs ディレクトリに実行日/実行毎/種々の設定ファイルが
    自動保存
    保存されるのはありがたいが可読性が低い
    mlflow を導入し改善

    View Slide

  17. mlflow
    17

    View Slide

  18. /32
    mlflowとは
    18
    ▸ 概要
    • 機械学習の実験管理を自動で行うツール
    • 実験に用いたパラメータ等を保存し再現性を担保
    ▸ インストール
    https://mlflow.org/

    View Slide

  19. /32
    実装例
    19
    • start_run(): runIDの発行
    • log_param: パラメータの登録
    • log_metric: メトリックの記録
    • log_artifact: 生成物の記録
    https://future-architect.github.io/articles/20200626/
    サーバーが立ち上がりGUIで
    確認可能

    View Slide

  20. 20
    Hydra と mlflow の実装例

    View Slide

  21. 21
    hydra.mainデコレータ
    パラメータの登録
    (log_params())
    メトリックの登録

    View Slide

  22. 22
    モデル定義
    複数パラメータのグリッドサーチ

    View Slide

  23. 23
    全試行過程が自動保存 & 比較可能
    loss accuracy

    View Slide

  24. /32
    Hydra + mlflow まとめ
    24
    ▸ Hydra
    • Facebook AI Research が公開しているパラメータ管理ツール
    • コマンドラインから設定値を複数変更 & 実行可能
    ▸ mlflow
    • 機械学習の実験管理を自動で行うツール
    • GUI 上でパラメータの違いによる結果の比較が容易に可能
    ▸ Hydra + mlflow
    • パラメータのグリッドサーチから記録・管理までを一元化可能

    View Slide

  25. (+ Optuna)
    25

    View Slide

  26. /32
    Optuna の導入
    26
    ▸ Optuna とは
    • オープンソースのハイパーパラメータ自動最適化フレームワーク
    • ハイパーパラメータの値に関する試行錯誤を自動化
    • 優れた性能を発揮するハイパーパラメータの値を自動的に発見
    ▸ Hydra + mlflow + Optuna
    • 設定ファイルに最適化したい変数と条件を記述することで
    Hydra で管理可能
    • 最適化される変数と条件をコマンドラインから変更可能
    Hydra のプラグインによりOptuna の導入が非常に容易に

    View Slide

  27. /32
    変更点
    27
    config.yaml に optuna の設定を記述

    View Slide

  28. /32
    変更点
    28
    デコレータを渡した関数の返り値を最適化したい変数に

    View Slide

  29. /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 にマッピングされる

    View Slide

  30. /32
    mlflow での可視化
    30
    mlflow 上でも試行過程の可視化が可能

    View Slide

  31. /32
    総まとめ
    31
    ▸ Hydra + mlflow + Optuna
    • 学習時に煩雑になりがちなパラメータ管理の決定版
    • Hydra と Optuna でパラメータを容易に変更・探索し
    mlflow で全パラメータを一元管理
    ▸ さらに学びたい方には
    • Kedro: Workflow のパイプライン管理ツール
    ▸ Hydra + mlflow + Optuna + Kedro
    ▸ より再現性のある使い回しを意識したコードに
    https://github.com/quantumblacklabs/kedro

    View Slide

  32. /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

    View Slide