> ## 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.

> Utilisez un objet de type dictionnaire pour enregistrer la configuration de votre expérience

# Configurer des expériences

export const ColabLink = ({url}) => <a href={url} target="_blank" rel="noopener noreferrer" className="colab-link">
    <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
      <path d="M14.25.18l.9.2.73.26.59.3.45.32.34.34.25.34.16.33.1.3.04.26.02.2-.01.13V8.5l-.05.63-.13.55-.21.46-.26.38-.3.31-.33.25-.35.19-.35.14-.33.1-.3.07-.26.04-.21.02H8.77l-.69.05-.59.14-.5.22-.41.27-.33.32-.27.35-.2.36-.15.37-.1.35-.07.32-.04.27-.02.21v3.06H3.17l-.21-.03-.28-.07-.32-.12-.35-.18-.36-.26-.36-.36-.35-.46-.32-.59-.28-.73-.21-.88-.14-1.05-.05-1.23.06-1.22.16-1.04.24-.87.32-.71.36-.57.4-.44.42-.33.42-.24.4-.16.36-.1.32-.05.24-.01h.16l.06.01h8.16v-.83H6.18l-.01-2.75-.02-.37.05-.34.11-.31.17-.28.25-.26.31-.23.38-.2.44-.18.51-.15.58-.12.64-.1.71-.06.77-.04.84-.02 1.27.05zm-6.3 1.98l-.23.33-.08.41.08.41.23.34.33.22.41.09.41-.09.33-.22.23-.34.08-.41-.08-.41-.23-.33-.33-.22-.41-.09-.41.09zm13.09 3.95l.28.06.32.12.35.18.36.27.36.35.35.47.32.59.28.73.21.88.14 1.04.05 1.23-.06 1.23-.16 1.04-.24.86-.32.71-.36.57-.4.45-.42.33-.42.24-.4.16-.36.09-.32.05-.24.02-.16-.01h-8.22v.82h5.84l.01 2.76.02.36-.05.34-.11.31-.17.29-.25.25-.31.24-.38.2-.44.17-.51.15-.58.13-.64.09-.71.07-.77.04-.84.01-1.27-.04-1.07-.14-.9-.2-.73-.25-.59-.3-.45-.33-.34-.34-.25-.34-.16-.33-.1-.3-.04-.25-.02-.2.01-.13v-5.34l.05-.64.13-.54.21-.46.26-.38.3-.32.33-.24.35-.2.35-.14.33-.1.3-.06.26-.04.21-.02.13-.01h5.84l.69-.05.59-.14.5-.21.41-.28.33-.32.27-.35.2-.36.15-.36.1-.35.07-.32.04-.28.02-.21V6.07h2.09l.14.01.21.03zm-6.47 14.25l-.23.33-.08.41.08.41.23.33.33.23.41.08.41-.08.33-.23.23-.33.08-.41-.08-.41-.23-.33-.33-.23-.41-.08-.41.08z" />
    </svg>
    Try in Colab
  </a>;

<ColabLink url="https://colab.research.google.com/github/wandb/examples/blob/master/colabs/wandb-log/Configs_in_W%26B.ipynb" />

Utilisez la propriété `config` d’un run pour enregistrer votre configuration d’entraînement :

* hyperparamètres
* paramètres d’entrée, comme le nom du dataset ou le type de modèle
* toute autre variable indépendante de vos expériences.

La propriété `wandb.Run.config` facilite l’analyse de vos expériences et la reproductibilité de vos travaux. Dans la W\&B App, vous pouvez regrouper les données par valeurs de configuration, comparer les configurations de différents runs W\&B et évaluer l’influence de chaque configuration d’entraînement sur la sortie. La propriété `config` est un objet de type dictionnaire qui peut être composé de plusieurs objets de type dictionnaire.

<Note>
  Pour journaliser des métriques de sortie ou des variables dépendantes comme la perte et la précision, utilisez `wandb.Run.log()` plutôt que `wandb.Run.config`.
</Note>

<h2 id="set-up-an-experiment-configuration">
  Définir la configuration d’une expérience
</h2>

Les configurations sont généralement définies au début d’un script d’entraînement. Les flux de travail de machine learning pouvant toutefois varier, vous n’êtes pas tenu de définir une configuration au début de votre script d’entraînement.

Utilisez des tirets (`-`) ou des caractères de soulignement (`_`) plutôt que des points (`.`) dans les noms de vos variables de configuration.

Si votre script accède à des clés de `wandb.Run.config` situées sous la racine, utilisez la syntaxe d’accès par dictionnaire `["key"]["value"]` plutôt que la syntaxe d’accès par attribut `config.key.value`.

Les sections suivantes présentent plusieurs scénarios courants de définition de la configuration de vos expériences.

<h3 id="set-the-configuration-at-initialization">
  Définir la configuration à l’initialisation
</h3>

Transmettez un dictionnaire au début de votre script lorsque vous appelez l’API `wandb.init()`, qui génère un processus en arrière-plan chargé de synchroniser et de journaliser les données sous forme de run W\&B.

L’extrait de code suivant montre comment définir un dictionnaire Python contenant des valeurs de configuration, puis comment transmettre ce dictionnaire en argument lors de l’initialisation d’un run W\&B.

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

# Définir un dictionnaire de configuration
config = {
    "hidden_layer_sizes": [32, 64],
    "kernel_sizes": [3],
    "activation": "ReLU",
    "pool_sizes": [2],
    "dropout": 0.5,
    "num_classes": 10,
}

# Transmettre le dictionnaire de configuration lors de l’initialisation de W&B
with wandb.init(project="config_example", config=config) as run:
    ...
```

Si vous transmettez un dictionnaire imbriqué comme `config`, W\&B aplatit les noms en les séparant par des points.

Accédez aux valeurs du dictionnaire comme vous le feriez pour n’importe quel autre dictionnaire en Python :

```python theme={"system"}
# Accéder aux valeurs en utilisant la clé comme index
hidden_layer_sizes = run.config["hidden_layer_sizes"]
kernel_sizes = run.config["kernel_sizes"]
activation = run.config["activation"]

# Méthode get() des dictionnaires Python
hidden_layer_sizes = run.config.get("hidden_layer_sizes")
kernel_sizes = run.config.get("kernel_sizes")
activation = run.config.get("activation")
```

<Note>
  Dans l’ensemble du guide du développeur et des exemples, nous copions les valeurs de configuration dans des variables distinctes. Cette étape est facultative et sert uniquement à améliorer la lisibilité.
</Note>

<h3 id="set-the-configuration-with-argparse">
  Définir la configuration avec argparse
</h3>

Vous pouvez définir votre configuration avec un objet argparse. [argparse](https://docs.python.org/3/library/argparse.html), abréviation de « argument parser », est un module de la bibliothèque standard de Python 3.2 et versions ultérieures qui facilite l’écriture de scripts exploitant toute la souplesse et la puissance des arguments de ligne de commande.

Cette approche est utile pour assurer le suivi des résultats de scripts lancés depuis la ligne de commande.

Le script Python suivant montre comment utiliser un objet parser pour définir et renseigner la configuration de votre expérience. Les fonctions `train_one_epoch` et `evaluate_one_epoch` sont fournies pour simuler une boucle d’entraînement dans le cadre de cette démonstration :

```python theme={"system"}
# config_experiment.py
import argparse
import random

import numpy as np
import wandb


# Code de démonstration pour l’entraînement et l’évaluation
def train_one_epoch(epoch, lr, bs):
    acc = 0.25 + ((epoch / 30) + (random.random() / 10))
    loss = 0.2 + (1 - ((epoch - 1) / 10 + random.random() / 5))
    return acc, loss


def evaluate_one_epoch(epoch):
    acc = 0.1 + ((epoch / 20) + (random.random() / 10))
    loss = 0.25 + (1 - ((epoch - 1) / 10 + random.random() / 6))
    return acc, loss


def main(args):
    # Démarrer un run W&B
    with wandb.init(project="config_example", config=args) as run:
        # Accéder aux valeurs du dictionnaire de configuration et les stocker
        # dans des variables pour plus de lisibilité
        lr = run.config["learning_rate"]
        bs = run.config["batch_size"]
        epochs = run.config["epochs"]

        # Simuler l’entraînement et journaliser les valeurs dans W&B
        for epoch in np.arange(1, epochs):
            train_acc, train_loss = train_one_epoch(epoch, lr, bs)
            val_acc, val_loss = evaluate_one_epoch(epoch)

            run.log(
                {
                    "epoch": epoch,
                    "train_acc": train_acc,
                    "train_loss": train_loss,
                    "val_acc": val_acc,
                    "val_loss": val_loss,
                }
            )


if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter
    )

    parser.add_argument("-b", "--batch_size", type=int, default=32, help="Batch size")
    parser.add_argument(
        "-e", "--epochs", type=int, default=50, help="Number of training epochs"
    )
    parser.add_argument(
        "-lr", "--learning_rate", type=float, default=0.001, help="Learning rate"
    )

    args = parser.parse_args()
    main(args)
```

<h3 id="set-the-configuration-throughout-your-script">
  Définir la configuration au fil de votre script
</h3>

Vous pouvez ajouter des paramètres à votre objet de configuration à n’importe quel endroit de votre script.

L’extrait de code suivant montre comment ajouter de nouvelles paires clé-valeur à un objet de configuration existant :

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

# Définir un objet dictionnaire de configuration
config = {
    "hidden_layer_sizes": [32, 64],
    "kernel_sizes": [3],
    "activation": "ReLU",
    "pool_sizes": [2],
    "dropout": 0.5,
    "num_classes": 10,
}

# Transmettre le dictionnaire de configuration lors de l’initialisation de W&B
with wandb.init(project="config_example", config=config) as run:
    # Mettre à jour la configuration une fois W&B initialisé
    run.config["epochs"] = 4
    run.config["batch_size"] = 32
```

Vous pouvez ajouter plusieurs valeurs à la fois. L’extrait de code suivant montre comment mettre à jour plusieurs paires clé-valeur dans un objet de configuration existant :

```python theme={"system"}
# Définir un objet dictionnaire de configuration
config = {
    "channels": 24,
    "lr": 1.0,
}

with wandb.init(project="config_example", config=config) as run:
    run.config.update(
        {
            "lr": 0.1,
            "channels": 16,
        },
        allow_val_change=True,
    )
```

Veillez à définir `allow_val_change=True` si vous souhaitez modifier la valeur d’une clé existante. Si ce paramètre n’est pas défini, W\&B génère une erreur lorsque vous essayez de modifier la valeur d’une clé existante.

<h3 id="set-the-configuration-after-your-run-finishes">
  Définir la configuration une fois votre run terminé
</h3>

Utilisez l’[API publique de W\&B](/fr/products/wandb/ref/python/public-api) pour mettre à jour la configuration d’un run terminé.

Vous devez fournir à l’API votre entity, le nom de votre projet et l’ID du run. Ces informations sont disponibles dans l’objet Run ou dans la [W\&B App](/fr/products/wandb/track/workspaces) :

```python theme={"system"}
with wandb.init() as run:
    ...

# Récupérez les valeurs suivantes dans l’objet Run s’il a été initialisé depuis le
# script ou le notebook en cours, ou copiez-les depuis l’interface de l’application W&B.
username = run.entity
project = run.project
run_id = run.id

# Notez que api.run() renvoie un type d’objet différent de celui renvoyé par wandb.init().
api = wandb.Api()
api_run = api.run(f"{username}/{project}/{run_id}")
api_run.config["bar"] = 32
api_run.update()
```

<h2 id="highlight-config-values">
  Mettre en évidence les valeurs de configuration
</h2>

Épinglez des clés de configuration dans la section **References** en haut de la page d'aperçu d'un run.

Utilisez [`wandb.Run.pin_config_keys`](/fr/products/wandb/ref/python/experiments/run#method-run-pin_config_keys) pour épingler une ou plusieurs clés de configuration avec le SDK Python.

Par exemple, si vous surveillez vos runs d'entraînement dans un tableau de bord Grafana, ajoutez l'URL du tableau de bord à votre configuration et épinglez la clé `grafana_url` :

```python theme={"system"}
config = {
    "hidden_layer_sizes": [32, 64],
    "kernel_sizes": [3],
    "activation": "ReLU",
    "pool_sizes": [2],
    "dropout": 0.5,
    "num_classes": 10,
    "grafana_url": "[Grafana dashboard](https://my-grafana-instance.com/)"
}

with wandb.init(config=config) as run:
    # Ajoute la clé de configuration « grafana_url » à la section References.
    run.pin_config_keys(["grafana_url"])
```

<h2 id="view-config-values">
  Afficher les valeurs de configuration
</h2>

Vous pouvez accéder à vos valeurs de configuration dans la W\&B App, pendant un run ou à partir de runs existants. Vous pouvez également y accéder depuis votre système de fichiers local.

<Tabs>
  <Tab title="W&B App">
    Pour afficher la configuration d’un run dans la W\&B App :

    1. Accédez à votre projet dans la W\&B App.
    2. Sélectionnez le run que vous souhaitez afficher.
    3. Sélectionnez l’onglet **Overview**.
    4. Faites défiler jusqu’à la section **Config**.
    5. Facultatif : cliquez sur **View raw data** pour afficher la configuration au format JSON.

    Le format JSON brut est utile lorsque vous écrivez des expressions pour créer ou transformer des graphiques en courbes à partir de valeurs de configuration, de métriques journalisées ou de valeurs de synthèse. Pour plus de détails, consultez [Expressions](/fr/products/wandb/app/features/panels/line-plot/reference#expressions).
  </Tab>

  <Tab title="Pendant un run">
    Utilisez la propriété [`wandb.Run.config`](/fr/products/wandb/ref/python/experiments/run#property-config) pour accéder aux valeurs de configuration d’un run pendant son exécution. `wandb.Run.config` renvoie un objet dictionnaire contenant les paires clé-valeur de la configuration.

    L’exemple suivant montre comment accéder aux valeurs de configuration d’un run pendant son exécution. Remplacez les valeurs du dictionnaire de configuration par vos propres hyperparamètres, architecture de modèle, nom du dataset et autres paramètres. Remplacez `"<my-project>"` par le nom de votre projet W\&B :

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

    config = {
        "epochs": 100,
        "learning_rate": 0.001,
        "model_type": "CNN",
        "dataset_id": "cats-0192"
    }

    with wandb.init(project="<my-project>", config=config) as run:
      print(dict(run.config))
    ```

    L’extrait suivant montre un exemple de sortie possible dans votre terminal lorsque vous exécutez le code ci-dessus :

    ```shell theme={"system"}
    {'_runtime': 0.0970615, '_step': 97, 'accuracy': 0.9746484067793967, 'loss': 0.025044765547545846, '_timestamp': 1785255343.65151}
    ```
  </Tab>

  <Tab title="Run existant">
    Utilisez l’API publique de W\&B pour accéder à la configuration d’un run déjà journalisé. Transmettez l’entity, le nom du projet et l’ID du run à `wandb.Api.run()`, puis accédez à la configuration du run avec la propriété wandb.Api.Run.config.

    Dans l’exemple suivant, remplacez `"<entity>"`, `"<project>"` et `"<run_id>"` par votre entity W\&B, le nom de votre projet et l’ID du run.

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

    api = wandb.Api()
    run = api.run("<entity>/<project>/<run_id>")

    print(run.name)
    print(run.config)
    ```

    Pour accéder aux valeurs de configuration de plusieurs runs d’un projet, récupérez les runs avec `wandb.Api.runs()`, puis parcourez les objets Run renvoyés :

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

    api = wandb.Api()
    runs = api.runs("<entity>/<project>")

    for run in runs:
        print(f"Run name: {run.name}")
        print(f"Run ID: {run.id}")
        print(f"Run config: {run.config}")
        print("----------")
    ```

    L’extrait suivant montre un exemple de sortie possible dans votre terminal lorsque vous exécutez le code ci-dessus :

    ```shell theme={"system"}

    Run name: clean-oath-11
    Run ID: mt2dasoz
    Run config: {'epochs': 1000, 'learning_rate': 0.1, 'model_type': 'Multivariate_neural_network_classifier'}
    ----------

    Run name: zesty-snowball-7
    Run ID: qne08r7u
    Run config: {'epochs': 1000, 'learning_rate': 0.1, 'model_type': 'Multivariate_neural_network_classifier'}
    ----------
    ```
  </Tab>

  <Tab title="Système de fichiers local">
    W\&B stocke les valeurs de configuration du run dans le fichier `config.yaml` du répertoire du run. Pour consulter ces valeurs localement, ouvrez le fichier `config.yaml`.

    Par défaut, le répertoire du run se trouve à l’emplacement `./wandb/run-<timestamp>-<run_id>`.
  </Tab>
</Tabs>

<h2 id="file-based-configs">
  Configurations à partir de fichiers
</h2>

Si vous placez un fichier nommé `config-defaults.yaml` dans le même répertoire que votre script de run, le run récupère automatiquement les paires clé-valeur définies dans ce fichier et les transmet à `wandb.Run.config`.

L’extrait de code suivant présente un exemple de fichier YAML `config-defaults.yaml` :

```yaml theme={"system"}
batch_size:
  desc: Size of each mini-batch
  value: 32
```

Vous pouvez remplacer les valeurs par défaut chargées automatiquement depuis `config-defaults.yaml` en indiquant de nouvelles valeurs dans l’argument `config` de `wandb.init()`. Par exemple :

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

# Remplacer les valeurs de config-defaults.yaml en passant des valeurs personnalisées
with wandb.init(config={"epochs": 200, "batch_size": 64}) as run:
    ...
```

Pour charger un fichier de configuration autre que `config-defaults.yaml`, utilisez l’argument `--configs command-line` et indiquez le chemin du fichier :

```bash theme={"system"}
python train.py --configs other-config.yaml
```

<h3 id="nested-dictionaries-in-config">
  Dictionnaires imbriqués dans la configuration
</h3>

Pour stocker des valeurs imbriquées dans une configuration de run, passez un dictionnaire imbriqué à `wandb.init()`. L’exemple suivant définit les dictionnaires imbriqués `optimizer` et `training` dans `config` :

```python theme={"system"}
config = {
    "optimizer": {
        "type": "adamw",
        "learning_rate": 0.0001,
        "weight_decay": 0.01,
    },
    "training": {
        "epochs": 20,
        "batch_size": 64,
    },
}

with wandb.init(project="project", config=config) as run:
    ...
```

Chaque clé de premier niveau doit contenir un champ `value`. Attribuez le dictionnaire imbriqué à value :

```yaml theme={"system"}
optimizer:
  value:
    type: adamw
    learning_rate: 0.0001
    weight_decay: 0.01

training:
  value:
    epochs: 20
    batch_size: 64
```

En Python, utilisez l’indexation de dictionnaire pour accéder aux valeurs imbriquées.

L’exemple suivant récupère la valeur `learning_rate` dans le dictionnaire imbriqué de l’optimiseur de la configuration de run :

```python theme={"system"}
with wandb.init(project="project", config=config) as run:
    run.config["optimizer"]["learning_rate"]
```

Dans les contextes qui font référence aux valeurs de configuration par leur chemin, comme les filtres de l'API publique ou les expressions de graphiques en courbes, utilisez la notation pointée. Par exemple, utilisez `config.optimizer.learning_rate` dans un filtre de l'API publique et `${config:optimizer.learning_rate}` dans une expression de graphique en courbes.

L'exemple suivant crée un run avec une configuration imbriquée et journalise la perte à chaque époque d'entraînement. Il utilise ensuite l'API publique pour trouver les runs dont le taux d'apprentissage est de `1e-4`, puis affiche le nom et le taux d'apprentissage de chacun d'eux.

```python theme={"system"}
import random
import wandb

config = {
    "optimizer": {
        "type": "adamw",
        "learning_rate": 1e-4,
        "weight_decay": 0.01,
    },
    "training": {
        "epochs": 3,
        "batch_size": 64,
    },
}

with wandb.init(project="nested-config-example", config=config) as run:
    lr = run.config["optimizer"]["learning_rate"]

    for epoch in range(run.config["training"]["epochs"]):
        loss = 1.0 / (epoch + 1) + random.random() * 0.05
        run.log({"epoch": epoch, "train/loss": loss})

api = wandb.Api()
runs = api.runs(
    "wandb/nested-config-example",
    filters={"config.optimizer.learning_rate": 1e-4},
)

for run in runs:
    print(run.name, run.config["optimizer"]["learning_rate"])
```

<Info>
  En pratique, on utilise généralement des scripts distincts pour créer les runs, puis pour les interroger ultérieurement à l’aide de filtres.
</Info>

<h3 id="example-use-case-for-file-based-configs">
  Exemple de cas d’usage des configurations basées sur des fichiers
</h3>

Supposons que vous disposiez d’un fichier YAML contenant des métadonnées pour le run, ainsi que d’un dictionnaire d’hyperparamètres dans votre script Python. Vous pouvez enregistrer les deux dans l’objet `config` imbriqué :

```python theme={"system"}
hyperparameter_defaults = dict(
    dropout=0.5,
    batch_size=100,
    learning_rate=0.001,
)

config_dictionary = dict(
    yaml=my_yaml_file,
    params=hyperparameter_defaults,
)

with wandb.init(config=config_dictionary) as run:
    ...
```

<h2 id="tensorflow-v1-flags">
  Flags TensorFlow v1
</h2>

Vous pouvez transmettre directement des flags TensorFlow à l’objet `wandb.Run.config`.

```python theme={"system"}
with wandb.init() as run:
    run.config.epochs = 4

    flags = tf.app.flags
    flags.DEFINE_string("data_dir", "/tmp/data")
    flags.DEFINE_integer("batch_size", 128, "Batch size.")
    run.config.update(flags.FLAGS)  # ajouter les flags TensorFlow à la configuration
```
