機械学習用Template準備-2(Hydra)
はじめに
HydraはHyper parameterを一括管理でき、その他ToolとのBridgingを効率的にできるのが魅力です。今まではmainで引数をParseして...という煩雑な部分をyamlファイルで一括管理できるのが魅力です。
想定としては、機械学習でよく行う少しパラメータを変更して学習し精度のTrend解析するというような場合には非常に便利です。さらにObjectのインスタンス化もサポートしているので、使い勝手が良いものです。言葉だけでは伝わらないので、実際の使い方を示していこうと思います。
インストール
インストール自体は非常に簡単です。pip一発で導入可能です。pytorch-lightningの様な複雑な方法は不要です。
> pip install hydra-core==1.1.0rc1
今回は1.1.0rc1を使用します。安定板の1.0ではないことがPointとなります。理由は後ほど出てくるoptunaとの連携をスムーズにするためです。特にエラー等がなく終了したら、次にお決まりのVersion確認をしましょう。
Name: hydra-core
Version: 1.1.0rc1
Summary: A framework for elegantly configuring complex applications
Home-page: https://github.com/facebookresearch/hydra
Author: Omry Yadan
Author-email: omry@fb.com
License: MIT
このように表示されたらOkです。
サンプル
導入が完了したので、実際にHydraを使用してみましょう。まずはテスト用のフォルダーとファイルを準備します。
> mkdir hydra_sample && cd hydra_sample
> mkdir config && cd config && touch config.yaml
> cd ..
> touch hydra_sample.py
サンプルとして"hydra_sample"というフォルダーを作成し、その中にサブフォルダーして"config"を作っています。さらに"config"フォルダー内に"config.yaml"という空のファイルを作成しました。
次に"hydra_sample"直下に戻り"hydra_sample.py"という空のファイルを作成しています。
''' config.yaml file '''
arg:
word: hello_hydra
'''hydra_sample.py'''
import hydra
@hydra.main(config_path='./config', config_name='config.yaml')
def main(cfg):
print(cfg.arg.word)
if __name__ == "__main__":
main()
非常に簡単ですね。
config.yaml内でargというカテゴリーを作成し、その階層下にworkというKeywordを定義し、valueを"hello_hydra"としています。
次に、main(cfg)で@hydra.mainで読み込んだconfig情報を引数として渡し、main関数内でworkのKeyにアクセスしています。アクセス方法は"."の連結です。非常にわかりやすいです。
さらに詳しく知りたい方はこちらをご参照ください。
まとめ
今回はHydraの導入と簡単な使い方を取り上げました。次はもう少し複雑なHydraの使用方法を取り上げたいと思います。私もいくつかぶつかったとことろがあるのでご参考になればと思います。
アメリカSilicon Valley在住のエンジニアです。日本企業から突然アメリカ企業に転職して気が付いた事や知って役に立った事を書いています。