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

> Des algorithmes de pointe pour entraîner vos réseaux neuronaux

# MosaicML Composer

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>
    Essayer sur Colab
  </a>;

<ColabLink url="https://colab.research.google.com/github/wandb/examples/blob/master/colabs/mosaicml/MosaicML_Composer_and_wandb.ipynb" />

[Composer](https://github.com/mosaicml/composer) est une bibliothèque conçue pour entraîner des réseaux neuronaux plus efficacement, plus rapidement et à moindre coût. Elle propose de nombreuses méthodes de pointe pour accélérer l’entraînement des réseaux neuronaux et améliorer la généralisation, ainsi qu’une API [Trainer](https://docs.mosaicml.com/projects/composer/en/stable/trainer/using_the_trainer.html) facultative qui permet de *composer* facilement de nombreuses améliorations.

W\&B fournit un wrapper léger pour consigner vos expériences de ML. Mais vous n’avez pas besoin de les combiner vous-même : W\&B est directement intégré à la bibliothèque Composer via [WandBLogger](https://docs.mosaicml.com/projects/composer/en/stable/trainer/file_uploading.html#weights-biases-artifacts).

<div id="start-logging-to-wb">
  ## Commencez à journaliser avec W\&B
</div>

```python theme={null}
from composer import Trainer
from composer.loggers import WandBLogger

trainer = Trainer(..., logger=WandBLogger())
```

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541/mVjDwbx0mC8gYx-b/images/integrations/n6P7K4M.gif?s=7d3d0917631ff3ad6467018fc770f984" alt="Tableaux de bord interactifs" width="1920" height="1080" data-path="images/integrations/n6P7K4M.gif" />
</Frame>

<div id="use-composers-wandblogger">
  ## Utiliser le `WandBLogger` de Composer
</div>

La bibliothèque Composer utilise la classe [WandBLogger](https://docs.mosaicml.com/projects/composer/en/stable/trainer/file_uploading.html#weights-biases-artifacts) dans le `Trainer` pour journaliser des métriques dans W\&B. Il suffit d'instancier le logger et de le passer au `Trainer`.

```python theme={null}
wandb_logger = WandBLogger(project="gpt-5", log_artifacts=True)
trainer = Trainer(logger=wandb_logger)
```

<div id="logger-arguments">
  ## Arguments du logger
</div>

Vous trouverez ci-dessous les paramètres de `WandbLogger` ; consultez la [documentation Composer](https://docs.mosaicml.com/projects/composer/en/stable/api_reference/generated/composer.loggers.WandBLogger.html) pour obtenir la liste complète et leur description.

| Paramètre        | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `project`        | Nom du projet W\&B (str, facultatif)                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `group`          | Nom du groupe W\&B (str, facultatif)                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `name`           | Nom de l'exécution W\&B. S'il n'est pas spécifié, `State.run&#95;name` est utilisé (str, facultatif)                                                                                                                                                                                                                                                                                                                                                                                     |
| `entity`         | Nom de l'entité W\&B, par exemple votre nom d'utilisateur ou votre nom Teams W\&B (str, facultatif)                                                                                                                                                                                                                                                                                                                                                                                      |
| `tags`           | Tags W\&B (List\[str], facultatif)                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `log_artifacts`  | Indique s'il faut journaliser les checkpoints dans wandb, par défaut : `false` (bool, facultatif)                                                                                                                                                                                                                                                                                                                                                                                        |
| `rank_zero_only` | Indique s'il faut journaliser uniquement sur le processus de rang zéro. Lors de la journalisation des Artifacts, il est fortement recommandé de journaliser sur tous les rangs. Les Artifacts des rangs ≥1 ne sont pas stockés, ce qui peut entraîner la perte d'informations pertinentes. Par exemple, lors de l'utilisation de Deepspeed ZeRO, il serait impossible de restaurer à partir des checkpoints sans les Artifacts de tous les rangs, par défaut : `True` (bool, facultatif) |
| `init_kwargs`    | Paramètres à transmettre à `wandb.init()`, comme votre `config` wandb, entre autres. Voir les [paramètres de `wandb.init()`](/fr/models/ref/python/functions/init) pour les paramètres acceptés par `wandb.init()`.                                                                                                                                                                                                                                                                      |

Voici un exemple d’utilisation :

```
init_kwargs = {"notes":"Testing higher learning rate in this experiment", 
               "config":{"arch":"Llama",
                         "use_mixed_precision":True
                         }
               }

wandb_logger = WandBLogger(log_artifacts=True, init_kwargs=init_kwargs)
```

<div id="log-prediction-samples">
  ## Journaliser des échantillons de prédictions
</div>

Vous pouvez utiliser le système de [Callbacks de Composer](https://docs.mosaicml.com/projects/composer/en/stable/trainer/callbacks.html) pour contrôler quand vous journalisez dans W\&B via le `WandBLogger` ; dans cet exemple, un échantillon d’images de validation et de prédictions est journalisé :

```python theme={null}
import wandb
from composer import Callback, State, Logger

class LogPredictions(Callback):
    def __init__(self, num_samples=100, seed=1234):
        super().__init__()
        self.num_samples = num_samples
        self.data = []
        
    def eval_batch_end(self, state: State, logger: Logger):
        """Calcule les prédictions par lot et les stocke dans self.data"""
        
        if state.timer.epoch == state.max_duration: #à la dernière époque de validation
            if len(self.data) < self.num_samples:
                n = self.num_samples
                x, y = state.batch_pair
                outputs = state.outputs.argmax(-1)
                data = [[wandb.Image(x_i), y_i, y_pred] for x_i, y_i, y_pred in list(zip(x[:n], y[:n], outputs[:n]))]
                self.data += data
            
    def eval_end(self, state: State, logger: Logger):
        with wandb.init() as run:
            "Crée un wandb.Table et le journalise"
            columns = ['image', 'ground truth', 'prediction']
            table = wandb.Table(columns=columns, data=self.data[:self.num_samples])
            run.log({'sample_table':table}, step=int(state.timer.batch))         
...

trainer = Trainer(
    ...
    loggers=[WandBLogger()],
    callbacks=[LogPredictions()]
)
```
