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