> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-docs-2626.mintlify.site/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 les 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>
    Essayer sur 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 conçue pour simplifier le développement, le fine-tuning et l’expérimentation pour les LLM. De plus, torchtune intègre une prise en charge native du [logging avec W\&B](https://meta-pytorch.org/torchtune/stable/deep_dives/wandb_logging.html), ce qui améliore le suivi et la visualisation des processus d’entraînement.

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

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-2626/XhmnNyiZ55KfxLZn/images/integrations/torchtune_dashboard.png?fit=max&auto=format&n=XhmnNyiZ55KfxLZn&q=85&s=6a15cc1d35d972f216d05633584f3f10" alt="tableau de bord d’entraînement de torchtune" width="1942" height="1286" data-path="images/integrations/torchtune_dashboard.png" />
</Frame>

Consultez l’article de blog de W\&B sur le [Fine-tuning de Mistral 7B avec torchtune](https://wandb.ai/capecape/torchtune-mistral/reports/torchtune-The-new-PyTorch-LLM-fine-tuning-library---Vmlldzo3NTUwNjM0).

<div id="enable-wb-logging">
  ## Activez la journalisation W\&B
</div>

Vous pouvez activer la journalisation W\&B de deux façons : redéfinir les arguments au lancement depuis la ligne de commande, ou modifier le fichier de configuration de la recette. Choisissez l’option qui convient le mieux à votre flux de travail.

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

    ```bash theme={null}
    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={null}
    # 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>

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

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

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

<Tabs>
  <Tab title="Recette">
    ```yaml theme={null}
    # 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={null}
    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>

<div id="logged-data">
  ## Données enregistrées
</div>

Après avoir activé la journalisation W\&B, vous pouvez explorer le tableau de bord W\&B pour consulter les métriques enregistrées. Par défaut, W\&B enregistre tous les hyperparamètres du fichier de configuration ainsi que les paramètres remplacés au lancement, afin de conserver un enregistrement de la configuration de chaque run à côté de ses métriques.

W\&B capture la configuration résolue dans l’onglet **Aperçu**. W\&B stocke également la configuration au format YAML dans l’[onglet Files](https://wandb.ai/capecape/torchtune/runs/joyknwwa/files).

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-2626/XhmnNyiZ55KfxLZn/images/integrations/torchtune_config.png?fit=max&auto=format&n=XhmnNyiZ55KfxLZn&q=85&s=6a4a2ee8a4e752b8cda8cb7690048ef4" alt="Configuration TorchTune" width="1806" height="1362" data-path="images/integrations/torchtune_config.png" />
</Frame>

<div id="logged-metrics">
  ### Métriques enregistrées
</div>

Chaque recette a sa propre boucle d’entraînement. Consultez chaque recette pour voir les métriques enregistrées, qui incluent par défaut les suivantes :

| Métrique            | Description                                                                                                                                                                                                                                                                                     |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `loss`              | La perte du modèle.                                                                                                                                                                                                                                                                             |
| `lr`                | Le taux d’apprentissage.                                                                                                                                                                                                                                                                        |
| `tokens_per_second` | Le nombre de jetons par seconde du modèle.                                                                                                                                                                                                                                                      |
| `grad_norm`         | La norme du gradient du modèle.                                                                                                                                                                                                                                                                 |
| `global_step`       | Correspond à l’étape actuelle de la boucle d’entraînement. Tient compte de l’accumulation des gradients. Chaque fois qu’une étape de l’optimiseur s’exécute, le modèle est mis à jour, les gradients s’accumulent, et le modèle est mis à jour une fois tous les `gradient_accumulation_steps`. |

<Note>
  `global_step` n'est pas identique au nombre d’étapes d’entraînement. Il correspond à l’étape actuelle de la boucle d’entraînement et tient compte de l’accumulation des gradients. Chaque fois qu’une étape de l’optimiseur s’exécute, `global_step` est incrémenté de 1. Par exemple, si le chargeur de données comporte 10 lots, que le nombre d’étapes d’accumulation des gradients est de 2 et que vous exécutez 3 époques, l’optimiseur effectue 15 étapes, donc `global_step` va de 1 à 15.
</Note>

La conception de torchtune vous permet d’ajouter des métriques personnalisées ou de modifier celles qui existent déjà. Modifiez le [fichier de recette](https://github.com/meta-pytorch/torchtune/tree/main/recipes) correspondant. Par exemple, vous pouvez enregistrer `current_epoch` en pourcentage du nombre total d’époques comme ceci :

```python theme={null}
# 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 enregistré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>

<div id="save-and-load-checkpoints">
  ## Enregistrer et charger des points de contrôle du modèle
</div>

Enregistrez les points de contrôle du modèle dans W\&B Artifacts pour versionner les poids du modèle en même temps que les métriques et la configuration de chaque run, afin de pouvoir reproduire les résultats et comparer les versions du modèle ultérieurement.

La bibliothèque torchtune prend en charge plusieurs [formats de point de contrôle du modè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 checkpointer](https://meta-pytorch.org/torchtune/stable/deep_dives/checkpointer.html) appropriée.

Pour enregistrer les points de contrôle du modèle du modèle dans [W\&B Artifacts](/fr/models/artifacts/), l’approche recommandée consiste à redéfinir les fonctions `save_checkpoint` de la recette correspondante.

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

```python theme={null}
def save_checkpoint(self, epoch: int) -> None:
    ...
    ## Enregistrez le point de contrôle du modè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 du modèle
        description="Model checkpoint",
        # vous pouvez ajouter les métadonnées de votre choix sous forme de dictionnaire
        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)
```
