Hydra
2 minute read
Hydra は、 研究 および他の複雑な アプリケーション の開発を簡素化するオープンソースの Python フレームワーク です。主な機能は、構成ファイルと コマンドライン を介して、構成を構成してオーバーライドすることにより、階層的な構成を動的に作成できることです。
W&B のパワーを利用しながら、構成管理に Hydra を引き続き使用できます。
メトリクス の 追跡
wandb.init
と wandb.log
を使用して、通常どおりに メトリクス を 追跡 します。ここでは、 wandb.entity
と wandb.project
は hydra 構成ファイル内で定義されています。
import wandb
@hydra.main(config_path="configs/", config_name="defaults")
def run_experiment(cfg):
run = wandb.init(entity=cfg.wandb.entity, project=cfg.wandb.project)
wandb.log({"loss": loss})
ハイパーパラメーター の 追跡
Hydra は、構成 辞書 とのインターフェースをとるためのデフォルトの方法として omegaconf を使用します。 OmegaConf
の 辞書 は、プリミティブ 辞書 のサブクラスではないため、Hydra の Config
を wandb.config
に直接渡すと、 ダッシュボード で予期しない結果が生じます。 omegaconf.DictConfig
をプリミティブな dict
型に変換してから wandb.config
に渡す必要があります。
@hydra.main(config_path="configs/", config_name="defaults")
def run_experiment(cfg):
wandb.config = omegaconf.OmegaConf.to_container(
cfg, resolve=True, throw_on_missing=True
)
wandb.init(entity=cfg.wandb.entity, project=cfg.wandb.project)
wandb.log({"loss": loss})
model = Model(**wandb.config.model.configs)
マルチプロセッシング の トラブルシューティング
開始時に プロセス がハングする場合は、この既知の問題 が原因である可能性があります。これを解決するには、次のいずれかとして、wandb.init
に追加の settings パラメータ を追加して、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}
sweep を呼び出します。
wandb sweep sweep.yaml` \
W&B は プロジェクト 内に sweep を自動的に作成し、sweep を実行する各マシンで実行する wandb agent
コマンド を返します。
Hydra の デフォルト に存在しない パラメータ を渡す
Hydra は、 コマンド の前に +
を使用して、デフォルト の構成ファイルに存在しない追加の パラメータ を コマンドライン から渡すことをサポートしています。たとえば、次のように呼び出すだけで、いくつかの 値 を持つ追加の パラメータ を渡すことができます。
$ python program.py +experiment=some_experiment
Hydra Experiments を構成するときと同様に、このような +
構成を スイープ することはできません。これを回避するには、デフォルト の空のファイルで experiment パラメータ を初期化し、W&B Sweep を使用して、呼び出しごとにこれらの空の構成をオーバーライドします。詳細については、この W&B Report をお読みください。**
[i18n] feedback_title
[i18n] feedback_question
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.