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

> Intégrez W&B à Hydra pour gérer des configurations complexes pour les expériences de machine learning et journaliser automatiquement les hyperparamètres.

# Hydra

> [Hydra](https://hydra.cc) est un framework Python open source qui simplifie le développement d'applications de recherche et d'autres applications complexes. Sa principale fonctionnalité est de permettre la création dynamique d'une configuration hiérarchique par composition, puis sa surcharge via des fichiers de configuration et la ligne de commande.

Vous pouvez continuer à utiliser Hydra pour gérer la configuration tout en tirant parti de la puissance de W\&B.

<div id="track-metrics">
  ## Suivre les métriques
</div>

Suivez vos métriques normalement avec `wandb.init()` et `wandb.Run.log()`. Ici, `wandb.entity` et `wandb.project` sont définis dans un fichier de configuration Hydra.

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

<div id="track-hyperparameters">
  ## Suivre les hyperparamètres
</div>

Hydra utilise [OmegaConf](https://omegaconf.readthedocs.io/en/2.1_branch/) comme interface par défaut pour gérer les dictionnaires de configuration. Les objets de configuration OmegaConf (par exemple, `omegaconf.DictConfig`) ne sont pas de simples instances Python de `dict`.

`wandb.Run.config` est une propriété en lecture seule, ce qui signifie que `wandb.Run.config = ...` lève une exception `AttributeError` si vous essayez de lui passer un objet de configuration OmegaConf.

Convertissez `cfg` en `dict` Python standard avec `OmegaConf.to_container()`, puis passez-le à `wandb.init(config=...)` (ou appelez `wandb.Run.config.update(...)`).

```python theme={null}
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
    )
    # Facultatif : éviter d'inclure les métadonnées W&B (comme l'entité/le projet) dans la configuration du 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"])
```

<div id="troubleshoot-multiprocessing">
  ## Résoudre les problèmes liés au multiprocessing
</div>

Si votre processus se bloque au démarrage, cela peut être dû à [ce problème connu](/fr/models/track/log/distributed-training). Pour y remédier, essayez de modifier le protocole de multiprocessing de wandb, en ajoutant par exemple un paramètre de configuration supplémentaire à `wandb.init()` comme suit :

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

ou en définissant une variable d’environnement globale dans votre shell :

```bash theme={null}
$ export WANDB_START_METHOD=thread
```

<div id="optimize-hyperparameters">
  ## Optimiser les hyperparamètres
</div>

[W\&B Sweeps](/fr/models/sweeps) est une plateforme de recherche d'hyperparamètres très évolutive, qui fournit des insights et des visualisations sur les expériences W\&B avec un minimum de code. Sweeps s'intègre parfaitement aux projets Hydra sans nécessiter d'écrire de code. La seule chose requise est un fichier de configuration décrivant, comme d'habitude, les différents paramètres à balayer.

Un exemple simple de fichier `sweep.yaml` serait :

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

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

Exécutez le balayage :

```bash theme={null}
wandb sweep sweep.yaml
```

W\&B crée automatiquement un balayage dans votre projet et renvoie une commande `wandb agent` à exécuter sur chaque machine où vous souhaitez lancer ce balayage.

<div id="pass-parameters-not-present-in-hydra-defaults">
  ### Passer des paramètres non présents dans les valeurs par défaut d’Hydra
</div>

<a id="pitfall-3-sweep-passing-parameters-not-present-in-defaults" aria-label="Passer des paramètres non présents dans les valeurs par défaut d’Hydra" />

Hydra prend en charge le passage de paramètres supplémentaires via la ligne de commande qui ne figurent pas dans le fichier de configuration par défaut, en utilisant un `+` avant la commande. Par exemple, vous pouvez passer un paramètre supplémentaire avec une certaine valeur en appelant simplement :

```bash theme={null}
$ python program.py +experiment=some_experiment
```

Vous ne pouvez pas exécuter de balayage sur de telles configurations `+`, comme on le fait lors de la configuration des [Hydra Expériences](https://hydra.cc/docs/patterns/configuring_experiments/). Pour contourner ce problème, vous pouvez initialiser le paramètre d'expérience avec un fichier vide par défaut, puis utiliser W\&B Sweep pour remplacer ces configurations vides à chaque appel. Pour plus d'informations, consultez [ce Reports W\&B](https://wandb.ai/adrishd/hydra-example/reports/Configuring-W-B-Projects-with-Hydra--VmlldzoxNTA2MzQw?galleryTag=posts\&utm_source=fully_connected\&utm_medium=blog\&utm_campaign=hydra).
