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

# Comment exécuter des sweeps sur SLURM ?

Pour exécuter des sweeps W\&B sur le [système d'ordonnancement SLURM](https://slurm.schedmd.com/documentation.html), lancez `wandb agent --count 1 SWEEP_ID` dans chaque job planifié. L'agent exécute un seul run d'entraînement puis s'arrête, ce qui simplifie l'estimation des ressources et permet à l'ordonnanceur SLURM de paralléliser les recherches d'hyperparamètres sur plusieurs jobs.

Pour les jobs multi-GPU ou d'entraînement distribué, une règle supplémentaire s'applique : un seul processus par job SLURM doit appeler `wandb.agent()`. Si chaque rank appelle l'agent, chacun récupère sa propre configuration d'hyperparamètres auprès du contrôleur du sweep, et les ranks n'entraînent plus le même modèle.

Les sections ci-dessous présentent la commande de soumission pour les jobs à processus unique, le modèle de gating par rank pour les jobs multi-GPU en entraînement distribué, les cas où le gate doit porter sur le rank global plutôt que sur le rank local, ainsi que la manière de journaliser depuis les ranks autres que le rank 0.

<h2 id="single-process-or-single-gpu-jobs">
  Jobs à processus unique ou à GPU unique
</h2>

Soumettez chaque job planifié avec la commande suivante :

```bash theme={"system"}
wandb agent --count 1 SWEEP_ID
```

<h2 id="multi-gpu-jobs-with-distributed-training">
  Jobs multi-GPU avec entraînement distribué
</h2>

Lorsque vous exécutez un sweep W\&B avec un entraînement distribué (par exemple, des jobs multi-GPU avec `--gpus-per-node`), réservez l’appel à `wandb.agent()` à un seul rank à l’aide de la variable d’environnement `SLURM_PROCID`. Les autres ranks doivent exécuter l’entraînement distribué sans appeler l’agent de sweep ni `wandb.init()`. Pour en savoir plus sur la prise en charge de l’entraînement distribué côté W\&B, voir [Journaliser des expériences d’entraînement distribué](/fr/products/wandb/track/log/distributed-training).

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

def train():
    with wandb.init() as run:
        config = run.config
        # Diffuser la configuration aux autres ranks, puis lancer l’entraînement distribué.
        ...

if os.environ.get("SLURM_PROCID", "0") == "0":
    wandb.agent(sweep_id, function=train, count=1)
else:
    # Les ranks autres que le rank 0 reçoivent de celui-ci la configuration et lancent l’entraînement
    # sans appeler wandb.agent() ni wandb.init().
    run_worker()
```

Ce modèle garantit que :

* Chaque job SLURM enregistre exactement un run auprès du contrôleur de sweep.
* Les ranks autres que le rank 0 exécutent leur part de l’entraînement distribué sans créer de runs en double et déconnectés.
* Le contrôleur de sweep suit correctement la progression et planifie de nouvelles configurations d’hyperparamètres.

Si vous utilisez `submitit` ou un lanceur similaire, appliquez la même vérification dans le point d’entrée de votre entraînement avant d’appeler `wandb.agent()`.

<h3 id="choose-between-slurm_procid-and-slurm_localid">
  Choisir entre `SLURM_PROCID` et `SLURM_LOCALID`
</h3>

`SLURM_PROCID` correspond au rank global sur l’ensemble du job SLURM. Conditionnez l’exécution à `SLURM_PROCID == 0` si vous voulez un seul agent pour l’ensemble du groupe distribué, ce qui est généralement le cas pour les sweeps.

`SLURM_LOCALID` correspond au rank au sein d’un même nœud. Conditionnez l’exécution à `SLURM_LOCALID == 0` si vous voulez un agent par nœud, par exemple pour lancer en parallèle des runs de sweep indépendants sur plusieurs nœuds.

<h3 id="log-from-non-rank-0-ranks">
  Journaliser depuis les ranks autres que le rank 0
</h3>

L’exemple ci-dessus suit le modèle [Suivre un seul processus](/fr/products/wandb/track/log/distributed-training#track-a-single-process), dans lequel seul le rank 0 journalise dans W\&B. Si vous souhaitez que les autres ranks journalisent également dans le même run, par exemple pour capturer les métriques système de chaque rank, utilisez le mode partagé et transmettez l’ID du run du rank 0 à chaque worker. Voir [Suivre tous les processus dans un seul run](/fr/products/wandb/track/log/distributed-training#track-all-processes-to-a-single-run).

***

<Badge stroke shape="pill" color="blue" size="md">[Sweeps](/fr/support/models/tags/sweeps)</Badge><Badge stroke shape="pill" color="blue" size="md">[Experiments](/fr/support/models/tags/experiments)</Badge>
