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

# PyTorch torchtune

> Utilisez la journalisation W&B dans PyTorch torchtune pour suivre vos expériences de fine-tuning de LLM avec le logger de métriques WandBLogger.

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/torchtune/torchtune_and_wandb.ipynb" />

[torchtune](https://meta-pytorch.org/torchtune/stable/index.html) est une bibliothèque basée sur PyTorch qui simplifie la création, le fine-tuning et l’expérimentation de LLM. torchtune prend également en charge nativement la [journalisation avec W\&B](https://meta-pytorch.org/torchtune/stable/deep_dives/wandb_logging.html), ce qui facilite le suivi et la visualisation des processus d’entraînement.

Ce guide explique comment activer la journalisation W\&B dans les recettes torchtune, configurer le logger de métriques `WandBLogger`, identifier les métriques que torchtune suit par défaut et enregistrer des points de contrôle de modèle dans W\&B Artifacts.

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/torchtune_dashboard.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=66901c71786a69ac2bae0cc5e04dbec4" alt="Tableau de bord d’entraînement torchtune" width="1830" height="1170" data-path="products/wandb/_media/torchtune_dashboard.png" />
</Frame>

Consultez l’article de blog W\&B consacré au [fine-tuning de Mistral 7B avec torchtune](https://forge.coreweave.com/wandb/capecape/torchtune-mistral/reports/torchtune-The-new-PyTorch-LLM-fine-tuning-library---Vmlldzo3NTUwNjM0).

<h2 id="enable-wb-logging">
  Activer la journalisation W\&B
</h2>

Vous pouvez activer la journalisation W\&B de deux façons : redéfinir des arguments au lancement depuis la ligne de commande, ou modifier le fichier de configuration de la recette. Choisissez la méthode la mieux adaptée à votre flux de travail.

<Tabs>
  <Tab title="Ligne de commande">
    Redéfinissez les arguments de ligne de commande au lancement :

    ```bash theme={"system"}
    tune run lora_finetune_single_device --config llama3/8B_lora_single_device \
      metric_logger._component_=torchtune.utils.metric_logging.WandBLogger \
      metric_logger.project="llama3_lora" \
      log_every_n_steps=5
    ```
  </Tab>

  <Tab title="Recette">
    Activez la journalisation W\&B dans la configuration de la recette :

    ```yaml theme={"system"}
    # dans llama3/8B_lora_single_device.yaml
    metric_logger:
      _component_: torchtune.utils.metric_logging.WandBLogger
      project: llama3_lora
    log_every_n_steps: 5
    ```
  </Tab>
</Tabs>

<h2 id="use-the-wb-metric-logger">
  Utiliser le logger de métriques W\&B
</h2>

Activez la journalisation W\&B dans le fichier de configuration de la recette en modifiant la section `metric_logger`. Remplacez la valeur de `_component_` par la classe `torchtune.utils.metric_logging.WandBLogger`. Vous pouvez également transmettre un nom de projet (`project`) et `log_every_n_steps` pour personnaliser le comportement de la journalisation.

Vous pouvez aussi transmettre tout autre argument `kwargs`, comme vous le feriez avec la méthode [wandb.init()](/fr/products/wandb/ref/python/functions/init). Par exemple, si vous travaillez au sein d’une équipe, vous pouvez transmettre l’argument `entity` à la classe `WandBLogger` pour indiquer le nom de l’équipe.

<Tabs>
  <Tab title="Recipe">
    ```yaml theme={"system"}
    # dans llama3/8B_lora_single_device.yaml
    metric_logger:
      _component_: torchtune.utils.metric_logging.WandBLogger
      project: llama3_lora
      entity: my_project
      job_type: lora_finetune_single_device
      group: my_awesome_experiments
    log_every_n_steps: 5
    ```
  </Tab>

  <Tab title="Ligne de commande">
    ```shell theme={"system"}
    tune run lora_finetune_single_device --config llama3/8B_lora_single_device \
      metric_logger._component_=torchtune.utils.metric_logging.WandBLogger \
      metric_logger.project="llama3_lora" \
      metric_logger.entity="my_project" \
      metric_logger.job_type="lora_finetune_single_device" \
      metric_logger.group="my_awesome_experiments" \
      log_every_n_steps=5
    ```
  </Tab>
</Tabs>

<h2 id="logged-data">
  Données journalisées
</h2>

Une fois la journalisation W\&B activée, vous pouvez explorer le tableau de bord W\&B pour consulter les métriques journalisées. Par défaut, W\&B journalise tous les hyperparamètres du fichier de configuration ainsi que les redéfinitions spécifiées au lancement, ce qui vous permet de conserver la configuration de chaque run en regard de ses métriques.

W\&B enregistre la configuration résolue dans l’onglet **Overview**. W\&B stocke également la configuration au format YAML dans l’[onglet Files](https://forge.coreweave.com/wandb/capecape/torchtune/runs/joyknwwa/files).

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/torchtune_config.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=25aa802a1a9e13005aadf0a1773690e2" alt="Configuration torchtune" width="1692" height="1254" data-path="products/wandb/_media/torchtune_config.png" />
</Frame>

<h3 id="logged-metrics">
  Métriques journalisées
</h3>

Chaque recette possède sa propre boucle d’entraînement. Consultez chaque recette pour connaître les métriques qu’elle journalise, dont celles-ci par défaut :

| Métrique | Description |
| - | - |
| `loss` | La perte du modèle. |
| `lr` | Le taux d’apprentissage. |
| `tokens_per_second` | Le nombre de jetons par seconde traités par le modèle. |
| `grad_norm` | La norme du gradient du modèle. |
| `global_step` | Correspond à l’étape en cours dans la boucle d’entraînement. Tient compte de l’accumulation de gradients. À chaque étape de l’optimiseur, le modèle est mis à jour, les gradients s’accumulent et le modèle est mis à jour une fois toutes les `gradient_accumulation_steps` étapes. |

<Note>
  `global_step` ne correspond pas au nombre d’étapes d’entraînement. Il correspond à l’étape en cours dans la boucle d’entraînement et tient compte de l’accumulation de gradients. À chaque étape de l’optimiseur, `global_step` est incrémenté de 1. Par exemple, si le dataloader contient 10 lots, que le nombre d’étapes d’accumulation de gradients est de 2 et que vous lancez l’entraînement sur 3 époques, l’optimiseur effectue 15 étapes : `global_step` varie donc de 1 à 15.
</Note>

La conception de torchtune vous permet d’ajouter des métriques personnalisées ou de modifier les métriques existantes. Pour ce faire, modifiez le [fichier de recette](https://github.com/meta-pytorch/torchtune/tree/main/recipes) correspondant. Par exemple, vous pouvez journaliser `current_epoch` sous forme de pourcentage du nombre total d’époques, comme suit :

```python theme={"system"}
# dans la fonction `train.py` du fichier de recette
self._metric_logger.log_dict(
    {"current_epoch": self.epochs * self.global_step / self._steps_per_epoch},
    step=self.global_step,
)
```

<Note>
  L’ensemble des métriques journalisées peut varier d’une version de torchtune à l’autre. Pour ajouter une métrique personnalisée, modifiez la recette et appelez la fonction `self._metric_logger.*` correspondante.
</Note>

<h2 id="save-and-load-checkpoints">
  Enregistrer et charger des points de contrôle
</h2>

Enregistrez les points de contrôle dans W\&B Artifacts pour versionner les poids du modèle avec les métriques et la configuration de chaque run. Vous pourrez ainsi reproduire les résultats et comparer les versions du modèle par la suite.

La bibliothèque torchtune prend en charge plusieurs [formats de points de contrôle](https://meta-pytorch.org/torchtune/stable/deep_dives/checkpointer.html). Selon l’origine du modèle que vous utilisez, vous devez utiliser la [classe de checkpointer](https://meta-pytorch.org/torchtune/stable/deep_dives/checkpointer.html) appropriée.

Pour enregistrer les points de contrôle du modèle dans [W\&B Artifacts](/fr/products/wandb/artifacts), il est recommandé de redéfinir les fonctions `save_checkpoint` dans la recette correspondante.

L’exemple suivant montre comment redéfinir la fonction `save_checkpoint` pour enregistrer les points de contrôle du modèle dans W\&B Artifacts.

```python theme={"system"}
def save_checkpoint(self, epoch: int) -> None:
    ...
    ## Enregistrer le point de contrôle dans W&B.
    ## Le nom du fichier dépend de la classe Checkpointer.
    ## Voici un exemple pour le cas full_finetune.
    checkpoint_file = Path.joinpath(
        self._checkpointer._output_dir, f"torchtune_model_{epoch}"
    ).with_suffix(".pt")
    wandb_artifact = wandb.Artifact(
        name=f"torchtune_model_{epoch}",
        type="model",
        # description du point de contrôle du modèle
        description="Model checkpoint",
        # vous pouvez ajouter toutes les métadonnées souhaitées sous forme de dict
        metadata={
            utils.SEED_KEY: self.seed,
            utils.EPOCHS_KEY: self.epochs_run,
            utils.TOTAL_EPOCHS_KEY: self.total_epochs,
            utils.MAX_STEPS_KEY: self.max_steps_per_epoch,
        },
    )
    wandb_artifact.add_file(checkpoint_file)
    wandb.log_artifact(wandb_artifact)
```
