Hydra は、研究用途やその他の複雑なアプリケーションの開発を簡素化するオープンソースの Python フレームワークです。主な機能は、階層的な設定を組み合わせによって動的に作成し、設定ファイルやコマンドラインから上書きできることです。このページでは、Hydra ベースの設定管理と W&B の実験管理を組み合わせる方法を説明します。Hydra の組み合わせ可能な設定はそのままに、W&B の可視化、ハイパーパラメーター最適化、run の比較といった機能を活用できます。以下のセクションでは、メトリクスのトラッキング、Hydra の設定からのハイパーパラメーターのログ、マルチプロセッシングのトラブルシューティング、W&B Sweeps によるハイパーパラメーターの最適化について説明します。
メトリクスをトラッキングする
Hydra で設定した run から W&B にメトリクスを送信するには、通常どおりwandb.init() と wandb.Run.log() を使用します。次の例では、wandb.entity と wandb.project を Hydra の設定ファイル内で定義し、同じ設定で Hydra と W&B の両方を制御できるようにしています。
ハイパーパラメーターをトラッキングする
Hydra の設定を W&B にログすると、すべてのハイパーパラメーターを run のメトリクスと並べて確認できるため、実験の比較や再現が容易になります。 Hydra は、設定の辞書を扱うデフォルトのインターフェースとして OmegaConf を使用します。OmegaConf の設定オブジェクト (例:omegaconf.DictConfig) は、通常の Python の dict インスタンスではありません。
wandb.Run.config は読み取り専用のプロパティです。そのため、wandb.Run.config = ... で OmegaConf の設定オブジェクトを渡そうとすると、AttributeError が送出されます。
OmegaConf.to_container() で cfg を通常の dict に変換してから、wandb.init(config=...) に渡してください (または wandb.Run.config.update(...) を呼び出してください) 。
マルチプロセッシングのトラブルシューティング
起動時にプロセスが応答しなくなる場合は、分散トレーニングにおける既知のマルチプロセッシングの問題が原因である可能性があります。この問題を解決するには、W&B のマルチプロセッシングプロトコルを変更します。1 つ目の方法として、次のようにwandb.init() に settings パラメーターを追加します。
ハイパーパラメーターを最適化する
W&B Sweeps は、最小限のコード追加で W&B の実験に関するインサイトと可視化を提供するハイパーパラメーター探索プラットフォームです。Sweeps は、コードを変更することなく Hydra プロジェクトと連携できます。必要なのは、sweep の対象とするパラメーターを記述した設定ファイルだけです。 以下はsweep.yaml ファイルの例です。
wandb agent コマンドを返します。sweep を実行するすべてのマシンで、このコマンドを実行してください。
Hydra のデフォルトに存在しないパラメーターを渡す
Hydra では、コマンドの前に+ を付けることで、デフォルトの設定ファイルに存在しない追加のパラメーターをコマンドラインから渡せます。たとえば、次のように呼び出すと、追加のパラメーターに任意の値を指定して渡せます。
+ 設定に対して sweep を実行できません。この問題を回避するには、実験パラメーターをデフォルトの空ファイルで初期化し、W&B Sweep を使用して、呼び出しごとにその空の設定を上書きします。詳細については、W&B report Configuring W&B Projects with Hydra を参照してください。