Utiliser la bibliothèque de parallélisme des SageMaker modèles v2 - Amazon SageMaker

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

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 PyTorch Fully Sharded Data Parallel (FSDP) sur la plateforme de SageMaker formation ou sur un cluster. SageMaker HyperPod

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

  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 la v2. SMP

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

  3. É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 savoir comment étendre un conteneur préfabriqué, voirExtension d'un conteneur préconçu.

  4. Vous pouvez également apporter votre propre conteneur Docker et configurer manuellement tous les environnements de SageMaker formation à l'aide de la boîte à outils de SageMaker formation 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 savoir comment exécuter votre propre conteneur Docker, consultez Adapter votre propre conteneur de formation.

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

Étape 1 : Adaptez votre script PyTorch FSDP d'entraînement

Pour activer et configurer la bibliothèque SMP v2, commencez par importer et ajouter le torch.sagemaker.init() module en haut du script. Ce module prend en compte le dictionnaire de SMP configuration SMPparamètres de configuration des fonctionnalités principales de la v2 que vous allez préparerÉtape 2 : Lancer une offre de formation. De plus, pour utiliser les différentes fonctionnalités de base proposées par SMP la version 2, 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 fonctionnalités de base de la SMP v2 sont fournies à l'adressePrincipales fonctionnalités de la bibliothèque de parallélisme de SageMaker modèles v2.

SageMaker Training

Dans votre script d'entraînement, ajoutez les deux lignes de code suivantes, qui constituent le minimum requis pour commencer l'entraînement avec la SMP version v2. DansÉtape 2 : Lancer une offre de formation, vous allez configurer un objet de la classe d' SageMaker PyTorchestimateur avec un dictionnaire de SMP configuration via l'distributionargument de la classe d'estimateur.

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

Vous pouvez également transmettre directement un dictionnaire de configuration du SMPparamètres de configuration des fonctionnalités principales de la v2 au torch.sagemaker.init() module. Cependant, les paramètres transmis à l' PyTorch estimateur sont prioritaires et remplacent ceux spécifiés dans Étape 2 : Lancer une offre de formation le module. torch.sagemaker.init()

SageMaker HyperPod

Dans votre script d'entraînement, ajoutez les deux lignes de code suivantes. DansÉtape 2 : Lancer une offre de formation, vous allez configurer un smp_config.json fichier pour configurer les SMP configurations au JSON format 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 le répertoire 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 également transmettre directement un dictionnaire de configuration du SMPparamètres de configuration des fonctionnalités principales de la v2 au torch.sagemaker.init() module.

Étape 2 : Lancer une offre de formation

Découvrez comment configurer les options SMP de distribution pour lancer une tâche de PyTorch FSDP formation dotée de fonctionnalités de SMP base.

SageMaker Training

Lorsque vous configurez un objet lanceur de tâches d'entraînement de la classe PyTorch Framework Estimator en SageMaker PythonSDK, configurez-le SMPparamètres de configuration des fonctionnalités principales de la v2 via un distribution argument comme suit.

Note

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

Note

Dans la SMP version 2, vous devez configurer smdistributed avec torch_distributed pour l'distributionargument de l' SageMaker PyTorchestimateur. Avectorch_distributed, SageMaker runstorchrun, qui est le lanceur de tâches multi-nœuds par défaut de PyTorch Distributed.

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 PyTorch ou à la SMP place de la dernière, vous devez spécifier l'image SMP Docker directement en utilisant l'image_uriargument au lieu de la py_version paire framework_version et. Ce qui suit est un exemple de

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 DockerURIs, voirFrameworks pris en charge.

SageMaker HyperPod

Avant de commencer, assurez-vous que les conditions préalables suivantes sont remplies.

  • Un répertoire FSx partagé Amazon monté (/fsx) sur votre HyperPod cluster.

  • Conda est installé dans le répertoire FSx partagé. Pour savoir comment installer Conda, suivez les instructions de la section Installation sous Linux dans le guide de l'utilisateur de Conda.

  • cuda11.8ou 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 une charge de travail avec la SMP version v2 sur un HyperPod cluster.

  1. Préparez un smp_config.json fichier contenant un dictionnaire deSMPparamètres de configuration des fonctionnalités principales de la v2. Assurez-vous de télécharger ce JSON fichier dans l'endroit où vous stockez votre script d'entraînement ou le chemin que vous avez indiqué pour accéder au torch.sagemaker.init() module à l'étape 1. Si vous avez déjà transmis le dictionnaire de configuration au torch.sagemaker.init() module dans le script de formation de l'étape 1, 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 }
  2. Téléchargez le smp_config.json fichier dans un répertoire de votre système de fichiers. Le chemin du répertoire doit correspondre au chemin que vous avez spécifié à l'étape 1. Si vous avez déjà transmis le dictionnaire de configuration au torch.sagemaker.init() module dans le script de formation, vous pouvez ignorer cette étape.

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

    sudo su -l ubuntu
  4. 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 deSMP, SMDDPCUDA, 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
  5. Exécutez une tâche d'entraînement de test.

    1. Dans le système de fichiers partagé (/fsx), clonez le GitHub référentiel 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
    2. Soumettez une offre d'emploi en procédant sbatch 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 sbatch commande doit être similaire àSubmitted batch job ABCDEF.

    3. Vérifiez le fichier journal dans le répertoire actuel ci-dessouslogs/.

      tail -f ./logs/fsdp_smp_ABCDEF.out