メインコンテンツへスキップ
Hydra は、研究用途やその他の複雑なアプリケーションの開発を簡素化するオープンソースの Python フレームワークです。主な特徴は、コンポジションにより階層的な設定を動的に構築し、それを設定ファイルやコマンドラインから上書きできることです。
W&B の強力な機能を活用しながら、設定管理には引き続き Hydra を使用できます。

メトリクスを記録する

wandb.init()wandb.Run.log() を使って、通常どおりメトリクスを記録します。ここでは、wandb.entitywandb.project は Hydra の設定ファイル内で定義されています。
import wandb


@hydra.main(config_path="configs/", config_name="defaults")
def run_experiment(cfg):

    with wandb.init(entity=cfg.wandb.entity, project=cfg.wandb.project) as run:
      run.log({"loss": loss})

ハイパーパラメータを追跡する

Hydra は、設定用の辞書とやり取りするためのデフォルトの方法として omegaconf を使用します。OmegaConf の辞書は組み込みの辞書型のサブクラスではないため、Hydra の Config をそのまま wandb.Run.config に渡すと、ダッシュボード上で予期しない挙動になります。wandb.Run.config に渡す前に、omegaconf.DictConfig を組み込みの dict 型に変換する必要があります。
@hydra.main(config_path="configs/", config_name="defaults")
def run_experiment(cfg):
  with wandb.init(entity=cfg.wandb.entity, project=cfg.wandb.project) as run:
    run.config = omegaconf.OmegaConf.to_container(
        cfg, resolve=True, throw_on_missing=True
    )
    run = wandb.init(entity=cfg.wandb.entity, project=cfg.wandb.project)
    run.log({"loss": loss})
    model = Model(**run.config.model.configs)

マルチプロセッシングのトラブルシューティング

プロセスが起動時にハングする場合は、この既知の問題 が原因の可能性があります。これを解決するには、wandb.init() に追加の設定パラメータを指定して、次のように wandb のマルチプロセッシングプロトコルを変更してみてください。
wandb.init(settings=wandb.Settings(start_method="thread"))
または、シェルでグローバル環境変数を設定します:
$ export WANDB_START_METHOD=thread

ハイパーパラメータを最適化する

W&B Sweeps は高いスケーラビリティを備えたハイパーパラメータ探索プラットフォームで、コードの追加は最小限に抑えつつ、W&B の実験に関する有用なインサイトと可視化を提供します。Sweeps は Hydra プロジェクトと追加コードなしでシームレスに統合できます。必要なのは、通常どおりスイープする各種パラメータを記述した設定ファイルだけです。 簡単な sweep.yaml ファイルの例を以下に示します。
program: main.py
method: bayes
metric:
  goal: maximize
  name: test/accuracy
parameters:
  dataset:
    values: [mnist, cifar10]

command:
  - ${env}
  - python
  - ${program}
  - ${args_no_hyphens}
スイープを実行します:
wandb sweep sweep.yaml
W&B はプロジェクト内にスイープを自動的に作成し、スイープを実行したい各マシン上で実行するための wandb agent コマンドを返します。

Hydra のデフォルトに存在しないパラメータを渡す

Hydra では、コマンド名の前に + を付けることで、デフォルトの設定ファイルに存在しない追加パラメータをコマンドラインから渡せます。たとえば、次のように呼び出すだけで、任意の値を持つ追加パラメータを渡すことができます。
$ python program.py +experiment=some_experiment
Hydra Experiments を設定するときに行うような + 設定に対しては、スイープを実行できません。これを回避するには、実験パラメータをデフォルトの空ファイルで初期化し、各呼び出しごとに W&B Sweep を使ってその空の設定を上書きします。詳細については、この W&B レポート を参照してください。