> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

> W&B を Hydra と統合して、ML 実験の複雑な設定を管理し、ハイパーパラメーターを自動的にログします。

# Hydra

> [Hydra](https://hydra.cc) は、研究用途やその他の複雑なアプリケーションの開発を簡素化するオープンソースの Python フレームワークです。主な機能は、階層的な設定を組み合わせによって動的に作成し、設定ファイルやコマンドラインから上書きできることです。

このページでは、Hydra ベースの設定管理と W\&B の実験管理を組み合わせる方法を説明します。Hydra の組み合わせ可能な設定はそのままに、W\&B の可視化、ハイパーパラメーター最適化、run の比較といった機能を活用できます。以下のセクションでは、メトリクスのトラッキング、Hydra の設定からのハイパーパラメーターのログ、マルチプロセッシングのトラブルシューティング、W\&B Sweeps によるハイパーパラメーターの最適化について説明します。

<h2 id="track-metrics">
  メトリクスをトラッキングする
</h2>

Hydra で設定した run から W\&B にメトリクスを送信するには、通常どおり `wandb.init()` と `wandb.Run.log()` を使用します。次の例では、`wandb.entity` と `wandb.project` を Hydra の設定ファイル内で定義し、同じ設定で Hydra と W\&B の両方を制御できるようにしています。

```python theme={"system"}
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})
```

<h2 id="track-hyperparameters">
  ハイパーパラメーターをトラッキングする
</h2>

Hydra の設定を W\&B にログすると、すべてのハイパーパラメーターを run のメトリクスと並べて確認できるため、実験の比較や再現が容易になります。

Hydra は、設定の辞書を扱うデフォルトのインターフェースとして [OmegaConf](https://omegaconf.readthedocs.io/en/2.1_branch/) を使用します。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(...)` を呼び出してください) 。

```python theme={"system"}
import hydra
import omegaconf
import wandb


@hydra.main(version_base=None, config_path="configs/", config_name="defaults")
def run_experiment(cfg):
    cfg_dict = omegaconf.OmegaConf.to_container(
        cfg, resolve=True, throw_on_missing=True
    )
    # オプション: W&B のメタデータ（entity や project など）を run 設定に含めてログしないようにします
    cfg_dict.pop("wandb", None)
    with wandb.init(
        entity=cfg.wandb.entity,
        project=cfg.wandb.project,
        config=cfg_dict,
    ) as run:
        run.log({"loss": loss})
        model = Model(**run.config["model"]["configs"])
```

<h2 id="troubleshoot-multiprocessing">
  マルチプロセッシングのトラブルシューティング
</h2>

起動時にプロセスが応答しなくなる場合は、[分散トレーニングにおける既知のマルチプロセッシングの問題](/ja/products/wandb/track/log/distributed-training)が原因である可能性があります。この問題を解決するには、W\&B のマルチプロセッシングプロトコルを変更します。1 つ目の方法として、次のように `wandb.init()` に settings パラメーターを追加します。

```python theme={"system"}
wandb.init(settings=wandb.Settings(start_method="thread"))
```

または、シェルでグローバルな環境変数を設定します。

```bash theme={"system"}
export WANDB_START_METHOD=thread
```

<h2 id="optimize-hyperparameters">
  ハイパーパラメーターを最適化する
</h2>

[W\&B Sweeps](/ja/products/wandb/sweeps) は、最小限のコード追加で W\&B の実験に関するインサイトと可視化を提供するハイパーパラメーター探索プラットフォームです。Sweeps は、コードを変更することなく Hydra プロジェクトと連携できます。必要なのは、sweep の対象とするパラメーターを記述した設定ファイルだけです。

以下は `sweep.yaml` ファイルの例です。

```yaml theme={"system"}
program: main.py
method: bayes
metric:
  goal: maximize
  name: test/accuracy
parameters:
  dataset:
    values: [mnist, cifar10]

command:
  - ${env}
  - python
  - ${program}
  - ${args_no_hyphens}
```

次のように sweep を実行します。

```bash theme={"system"}
wandb sweep sweep.yaml
```

W\&B は project 内に sweep を自動的に作成し、`wandb agent` コマンドを返します。sweep を実行するすべてのマシンで、このコマンドを実行してください。

<h3 id="pass-parameters-not-present-in-hydra-defaults">
  Hydra のデフォルトに存在しないパラメーターを渡す
</h3>

<a id="pitfall-3-sweep-passing-parameters-not-present-in-defaults" aria-label="Hydra のデフォルトに存在しないパラメーターを渡す" />

Hydra では、コマンドの前に `+` を付けることで、デフォルトの設定ファイルに存在しない追加のパラメーターをコマンドラインから渡せます。たとえば、次のように呼び出すと、追加のパラメーターに任意の値を指定して渡せます。

```bash theme={"system"}
python program.py +experiment=some_experiment
```

[Hydra Experiments](https://hydra.cc/docs/patterns/configuring_experiments/) を設定するときと同じ方法では、このような `+` 設定に対して sweep を実行できません。この問題を回避するには、実験パラメーターをデフォルトの空ファイルで初期化し、W\&B Sweep を使用して、呼び出しごとにその空の設定を上書きします。詳細については、W\&B report [Configuring W\&B Projects with Hydra](https://forge.coreweave.com/wandb/adrishd/hydra-example/reports/Configuring-W-B-Projects-with-Hydra--VmlldzoxNTA2MzQw?galleryTag=posts\&utm_source=fully_connected\&utm_medium=blog\&utm_campaign=hydra) を参照してください。


## Related topics

- [Why does my process stop responding when using Hydra with Weights & Biases?](/support/models/articles/process-hangs-when-using-hydra-with-wan.md)
