

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.

# Utiliser la bibliothèque de parallélisme des SageMaker modèles v2
<a name="model-parallel-use-api-v2"></a>

Sur cette page, vous allez apprendre à utiliser la bibliothèque de parallélisme de SageMaker modèles v2 APIs et à commencer à exécuter une tâche de formation FSDP ( PyTorch Fully Sharded Data Parallel) sur la plateforme de formation ou sur un SageMaker cluster. SageMaker HyperPod 

Il existe différents scénarios pour exécuter une tâche de PyTorch formation avec SMP v2.

1. Pour la SageMaker formation, utilisez l'un des conteneurs SageMaker Framework prédéfinis pour PyTorch v2.0.1 et versions ultérieures, qui sont préemballés avec SMP v2.

1. Utilisez le fichier binaire SMP v2 pour configurer un environnement Conda afin d'exécuter une charge de travail d'entraînement distribuée sur un SageMaker HyperPod cluster.

1. Étendez les conteneurs SageMaker Framework prédéfinis pour PyTorch les versions 2.0.1 et ultérieures afin d'installer toute exigence fonctionnelle supplémentaire adaptée à votre cas d'utilisation. Pour découvrir comment étendre un conteneur prédéfini, consultez [Extension d’un conteneur préconçu](prebuilt-containers-extend.md).

1. Vous pouvez également apporter votre propre conteneur Docker, configurer manuellement tous les environnements de SageMaker formation à l'aide de la boîte à [outils de SageMaker formation](https://github.com/aws/sagemaker-training-toolkit) et installer le fichier binaire SMP v2. Il s’agit de l’option la moins recommandée en raison de la complexité des dépendances. Pour découvrir comment exécuter votre propre conteneur Docker, consultez [Adaptation de votre propre conteneur d’entraînement](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html).

Ce guide de démarrage couvre les deux premiers scénarios.

**Topics**
+ [Étape 1 : Adaptez votre script d' PyTorch entraînement FSDP](#model-parallel-adapt-pytorch-script-v2)
+ [Étape 2 : lancer une tâche d’entraînement](#model-parallel-launch-a-training-job-v2)

## Étape 1 : Adaptez votre script d' PyTorch entraînement FSDP
<a name="model-parallel-adapt-pytorch-script-v2"></a>

Pour activer et configurer la bibliothèque SMP v2, commencez par importer et ajouter le module `torch.sagemaker.init()` au début du script. Ce module intègre le dictionnaire de configuration SMP de [Paramètres de configuration des caractéristiques principales de SMP v2](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config) que vous allez préparer dans [Étape 2 : lancer une tâche d’entraînement](#model-parallel-launch-a-training-job-v2). De plus, pour utiliser les différentes caractéristiques de base proposées par SMP v2, vous devrez peut-être apporter quelques modifications supplémentaires pour adapter votre script d’entraînement. Des instructions plus détaillées sur l’adaptation de votre script d’entraînement à l’utilisation des caractéristiques de base de SMP v2 sont fournies sur la page [Principales fonctionnalités de la bibliothèque de parallélisme de SageMaker modèles v2](model-parallel-core-features-v2.md).

------
#### [ SageMaker Training ]

Dans votre script d’entraînement, ajoutez les deux lignes de code suivantes, qui constituent le minimum requis pour commencer un entraînement avec SMP v2. Dans[Étape 2 : lancer une tâche d’entraînement](#model-parallel-launch-a-training-job-v2), vous allez configurer un objet de la classe d' SageMaker `PyTorch`estimateur avec un dictionnaire de configuration SMP via l'`distribution`argument de la classe d'estimateur.

```
import torch.sagemaker as tsm
tsm.init()
```

**Note**  
Vous pouvez aussi transmettre directement un dictionnaire de configuration des [Paramètres de configuration des caractéristiques principales de SMP v2](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config) dans le module `torch.sagemaker.init()`. Cependant, les paramètres transmis à l' PyTorch estimateur sont prioritaires et remplacent ceux spécifiés dans [Étape 2 : lancer une tâche d’entraînement](#model-parallel-launch-a-training-job-v2) le module. `torch.sagemaker.init()`

------
#### [ SageMaker HyperPod ]

Ajoutez les deux lignes de code suivantes à votre script d’entraînement. Dans[Étape 2 : lancer une tâche d’entraînement](#model-parallel-launch-a-training-job-v2), vous allez configurer un `smp_config.json` fichier pour configurer les configurations SMP au format JSON et le télécharger sur un système de stockage ou de fichiers mappé avec votre SageMaker HyperPod cluster. Nous vous recommandons de conserver le fichier de configuration dans même le répertoire que celui où vous avez chargé votre script d’entraînement.

```
import torch.sagemaker as tsm
tsm.init("/dir_to_training_files/smp_config.json")
```

**Note**  
Vous pouvez aussi transmettre directement un dictionnaire de configuration des [Paramètres de configuration des caractéristiques principales de SMP v2](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config) dans le module `torch.sagemaker.init()`.

------

## Étape 2 : lancer une tâche d’entraînement
<a name="model-parallel-launch-a-training-job-v2"></a>

Découvrez comment configurer les options de distribution SMP pour lancer une tâche de formation PyTorch FSDP avec les fonctionnalités principales du SMP.

------
#### [ SageMaker Training ]

Lorsque vous configurez un objet lanceur de tâches d'entraînement de la classe [PyTorch framework estimator](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html) dans le SDK SageMaker Python, configurez-le [Paramètres de configuration des caractéristiques principales de SMP v2](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config) via `distribution` un argument comme suit.

**Note**  
La `distribution` configuration de SMP v2 est intégrée dans le SDK SageMaker Python à partir de la version 2.200. Assurez-vous d'utiliser le SDK SageMaker Python v2.200 ou version ultérieure.

**Note**  
Dans SMP v2, vous devez configurer `smdistributed` avec `torch_distributed` pour l'`distribution`argument de l' SageMaker `PyTorch`estimateur. [Avec`torch_distributed`, SageMaker AI s'exécute`torchrun`, qui est le lanceur de tâches multi-nœuds par défaut de PyTorch Distributed.](https://pytorch.org/tutorials/beginner/dist_overview.html)

```
from sagemaker.pytorch import PyTorch

estimator = PyTorch(
    framework_version=2.2.0,
    py_version="310"
    # image_uri="<smp-docker-image-uri>" # For using prior versions, specify the SMP image URI directly.
    entry_point="your-training-script.py", # Pass the training script you adapted with SMP from Step 1.
    ... # Configure other required and optional parameters
    distribution={
        "torch_distributed": { "enabled": True },
        "smdistributed": {
            "modelparallel": {
                "enabled": True,
                "parameters": {
                    "hybrid_shard_degree": Integer,
                    "sm_activation_offloading": Boolean,
                    "activation_loading_horizon": Integer,
                    "fsdp_cache_flush_warnings": Boolean,
                    "allow_empty_shards": Boolean,
                    "tensor_parallel_degree": Integer,
                    "expert_parallel_degree": Integer,
                    "random_seed": Integer
                }
            }
        }
    }
)
```

**Important**  
Pour utiliser l'une des versions précédentes de PyTorch ou SMP au lieu de la dernière, vous devez spécifier l'image Docker SMP directement en utilisant l'`image_uri`argument au lieu de la `framework_version` paire et. `py_version` Voici un exemple :   

```
estimator = PyTorch(
    ...,
    image_uri="658645717510.dkr.ecr.us-west-2.amazonaws.com/smdistributed-modelparallel:2.2.0-gpu-py310-cu121"
)
```
Pour trouver une image SMP Docker URIs, consultez. [Cadres pris en charge](distributed-model-parallel-support-v2.md#distributed-model-parallel-supported-frameworks-v2)

------
#### [ SageMaker HyperPod ]

Avant de commencer, vérifiez que vous respectez les prérequis suivants.
+ Un répertoire FSx partagé Amazon monté (`/fsx`) sur votre HyperPod cluster.
+ Conda est installé dans le répertoire FSx partagé. Pour découvrir comment installer Conda, suivez les instructions de la page [Installing on Linux](https://docs.conda.io/projects/conda/en/latest/user-guide/install/linux.html) dans le *Guide de l’utilisateur Conda*.
+ `cuda11.8`ou `cuda12.1` installé sur la tête et les nœuds de calcul de votre HyperPod cluster.

Si les conditions préalables sont toutes remplies, suivez les instructions suivantes pour lancer un workload avec SMP v2 sur un HyperPod cluster.

1. Préparez un fichier `smp_config.json` contenant un dictionnaire de [Paramètres de configuration des caractéristiques principales de SMP v2](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config). Assurez-vous de charger ce fichier JSON dans l’endroit où vous stockez votre script d’entraînement ou au chemin que vous avez spécifié pour accéder au module `torch.sagemaker.init()` à l’[Étape 1](#model-parallel-adapt-pytorch-script-v2). Si vous avez déjà transmis le dictionnaire de configuration au module `torch.sagemaker.init()` dans le script d’entraînement à l’[Étape 1](#model-parallel-adapt-pytorch-script-v2), vous pouvez ignorer cette étape. 

   ```
   // smp_config.json
   {
       "hybrid_shard_degree": Integer,
       "sm_activation_offloading": Boolean,
       "activation_loading_horizon": Integer,
       "fsdp_cache_flush_warnings": Boolean,
       "allow_empty_shards": Boolean,
       "tensor_parallel_degree": Integer,
       "expert_parallel_degree": Integer,
       "random_seed": Integer
   }
   ```

1. Chargez le fichier `smp_config.json` dans un répertoire de votre système de fichiers. Le chemin du répertoire doit correspondre à celui que vous avez spécifié à l’[Étape 1](#model-parallel-adapt-pytorch-script-v2). Si vous avez déjà transmis le dictionnaire de configuration au module `torch.sagemaker.init()` dans le script d’entraînement, vous pouvez ignorer cette étape.

1. Sur les nœuds de calcul de votre cluster, lancez une session de terminal avec la commande suivante.

   ```
   sudo su -l ubuntu
   ```

1. Créez un environnement Conda sur les nœuds de calcul. Le code suivant est un exemple de script de création d’un environnement Conda et d’installation de SMP, [SMDDP](data-parallel.md), CUDA et d’autres dépendances.

   ```
   # Run on compute nodes
   SMP_CUDA_VER=<11.8 or 12.1>
   
   source /fsx/<path_to_miniconda>/miniconda3/bin/activate
   
   export ENV_PATH=/fsx/<path to miniconda>/miniconda3/envs/<ENV_NAME>
   conda create -p ${ENV_PATH} python=3.10
   
   conda activate ${ENV_PATH}
   
   # Verify aws-cli is installed: Expect something like "aws-cli/2.15.0*"
   aws ‐‐version
   # Install aws-cli if not already installed
   # https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html#cliv2-linux-install
   
   # Install the SMP library
   conda install pytorch="2.0.1=sm_py3.10_cuda${SMP_CUDA_VER}*" packaging ‐‐override-channels \
     -c https://sagemaker-distributed-model-parallel.s3.us-west-2.amazonaws.com/smp-2.0.0-pt-2.0.1/2023-12-11/smp-v2/ \
     -c pytorch -c numba/label/dev \
     -c nvidia -c conda-forge
   
   # Install dependencies of the script as below
   python -m pip install packaging transformers==4.31.0 accelerate ninja tensorboard h5py datasets \
       && python -m pip install expecttest hypothesis \
       && python -m pip install "flash-attn>=2.0.4" ‐‐no-build-isolation
   
   # Install the SMDDP wheel
   SMDDP_WHL="smdistributed_dataparallel-2.0.2-cp310-cp310-linux_x86_64.whl" \
     && wget -q https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.0.1/cu118/2023-12-07/${SMDDP_WHL} \
     && pip install ‐‐force ${SMDDP_WHL} \
     && rm ${SMDDP_WHL}
   
   # cuDNN installation for Transformer Engine installation for CUDA 11.8
   # Please download from below link, you need to agree to terms 
   # https://developer.nvidia.com/downloads/compute/cudnn/secure/8.9.5/local_installers/11.x/cudnn-linux-x86_64-8.9.5.30_cuda11-archive.tar.xz
   
   tar xf cudnn-linux-x86_64-8.9.5.30_cuda11-archive.tar.xz \
       && rm -rf /usr/local/cuda-$SMP_CUDA_VER/include/cudnn* /usr/local/cuda-$SMP_CUDA_VER/lib/cudnn* \
       && cp ./cudnn-linux-x86_64-8.9.5.30_cuda11-archive/include/* /usr/local/cuda-$SMP_CUDA_VER/include/ \
       && cp ./cudnn-linux-x86_64-8.9.5.30_cuda11-archive/lib/* /usr/local/cuda-$SMP_CUDA_VER/lib/ \
       && rm -rf cudnn-linux-x86_64-8.9.5.30_cuda11-archive.tar.xz \
       && rm -rf cudnn-linux-x86_64-8.9.5.30_cuda11-archive/
   
   # Please download from below link, you need to agree to terms 
   # https://developer.download.nvidia.com/compute/cudnn/secure/8.9.7/local_installers/12.x/cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz \
   # cuDNN installation for TransformerEngine installation for cuda12.1
   tar xf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz \
       && rm -rf /usr/local/cuda-$SMP_CUDA_VER/include/cudnn* /usr/local/cuda-$SMP_CUDA_VER/lib/cudnn* \
       && cp ./cudnn-linux-x86_64-8.9.7.29_cuda12-archive/include/* /usr/local/cuda-$SMP_CUDA_VER/include/ \
       && cp ./cudnn-linux-x86_64-8.9.7.29_cuda12-archive/lib/* /usr/local/cuda-$SMP_CUDA_VER/lib/ \
       && rm -rf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz \
       && rm -rf cudnn-linux-x86_64-8.9.7.29_cuda12-archive/
       
   # TransformerEngine installation
   export CUDA_HOME=/usr/local/cuda-$SMP_CUDA_VER
   export CUDNN_PATH=/usr/local/cuda-$SMP_CUDA_VER/lib
   export CUDNN_LIBRARY=/usr/local/cuda-$SMP_CUDA_VER/lib
   export CUDNN_INCLUDE_DIR=/usr/local/cuda-$SMP_CUDA_VER/include
   export PATH=/usr/local/cuda-$SMP_CUDA_VER/bin:$PATH
   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-$SMP_CUDA_VER/lib
   
   python -m pip install ‐‐no-build-isolation git+https://github.com/NVIDIA/TransformerEngine.git@v1.0
   ```

1. Exécutez une tâche d’entraînement test.

   1. Dans le système de fichiers partagé (`/fsx`), clonez le [ GitHub référentiel Awsome Distributed Training](https://github.com/aws-samples/awsome-distributed-training/) et accédez au `3.test_cases/11.modelparallel` dossier.

      ```
      git clone https://github.com/aws-samples/awsome-distributed-training/
      cd awsome-distributed-training/3.test_cases/11.modelparallel
      ```

   1. Soumettez une tâche à l’aide de `sbatch` en procédant comme suit.

      ```
      conda activate <ENV_PATH>
      sbatch -N 16 conda_launch.sh
      ```

      Si la soumission de la tâche est réussie, le message de sortie de cette commande `sbatch` doit être similaire à `Submitted batch job ABCDEF`.

   1. Consultez le fichier journal dans le répertoire en cours sous `logs/`.

      ```
      tail -f ./logs/fsdp_smp_ABCDEF.out
      ```

------