

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Partitionnement de l'état de l'optimiseur
<a name="model-parallel-extended-features-pytorch-optimizer-state-sharding"></a>

Le *partitionnement de l'état de l'optimiseur* est une technique d'économie de mémoire utile qui partitionne l'état de l'optimiseur (l'ensemble de poids qui décrit l'état de l'optimiseur) entre des groupes d'appareils parallèles aux données. Vous pouvez utiliser le sharding de l'état de l'optimiseur chaque fois que vous utilisez un optimiseur dynamique (tel qu'Adam) ou un FP16 optimiseur (qui stocke les deux FP16 et des FP32 copies des paramètres).

**Note**  
Le sharding d'état de l'optimiseur est disponible PyTorch dans la bibliothèque de parallélisme des SageMaker modèles v1.6.0 et versions ultérieures.

## Utilisation du partitionnement de l'état de l'optimiseur
<a name="model-parallel-extended-features-pytorch-optimizer-state-sharding-how-to-use"></a>

Vous pouvez activer le *partitionnement de l'état de l'optimiseur* en définissant `"shard_optimizer_state": True` dans la configuration `modelparallel`. 

Lorsque cette fonction est activée, la bibliothèque partitionne l'ensemble des paramètres du modèle en fonction du degré de parallélisme de données. Les gradients correspondant à la `i`-ième partition ne sont réduits qu'au `i`-ième rang parallèle de données. À la fin du premier appel à une fonction de décorateur `smp.step`, l'optimiseur enveloppé par `smp.DistributedOptimizer` redéfinit ses paramètres pour qu'ils ne soient limités qu'aux paramètres correspondant à la partition du rang parallèle aux données actuel. Les paramètres redéfinis sont appelés *paramètres virtuels* et partagent le stockage sous-jacent avec les paramètres d'origine. Lors du premier appel à `optimizer.step`, les états de l'optimiseur sont créés en fonction de ces paramètres redéfinis, qui sont partitionnés en raison de la partition d'origine. Après la mise à jour de l'optimiseur, l' AllGatheropération (dans le cadre de l'`optimizer.step`appel) s'exécute sur les rangs parallèles des données pour obtenir des états de paramètres cohérents.

**Astuce**  
Le partitionnement de l'état de l'optimiseur peut être utile lorsque le degré de parallélisme de données est supérieur à 1 et que le modèle comporte plus d'un milliard de paramètres.   
Le degré de parallélisme de données est calculé par `(processes_per_host * instance_count / pipeline_parallel_degree)` et la fonction `smp.dp_size()` gère le dimensionnement en arrière-plan.

**Configuration d'un SageMaker PyTorch estimateur**

```
mpi_options = {
    "enabled" : True,
    "processes_per_host" : 8,               # 8 processes
    "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none "
}

smp_options = {
    "enabled":True,
    "parameters": {
        "microbatches": 4,
        "pipeline_parallel_degree": 2,    # alias for "partitions"
        "placement_strategy": "cluster",
        "tensor_parallel_degree": 2,      # tp over 2 devices
        "ddp": True,
        "shard_optimizer_state": True
    }
}
```

**Adaptez votre script PyTorch d'entraînement**

Voir [Adapter votre script PyTorch d'entraînement](model-parallel-extended-features-pytorch-tensor-parallelism-examples.md#model-parallel-extended-features-pytorch-tensor-and-pipeline-parallelism-script) dans la section Parallélisme de *Tensor combiné au parallélisme de pipeline*. Aucune modification supplémentaire n'est requise pour le script.