Usa la libreria di parallelismo dei SageMaker modelli v2 - Amazon SageMaker

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Usa la libreria di parallelismo dei SageMaker modelli v2

In questa pagina, imparerai come utilizzare la libreria di parallelismo dei SageMaker modelli v2 APIs e come iniziare a eseguire un processo di formazione PyTorch Fully Sharded Data Parallel (FSDP) nella piattaforma Training o su un cluster. SageMaker SageMaker HyperPod

Esistono vari scenari per l'esecuzione di un processo di PyTorch formazione con v2. SMP

  1. Per la SageMaker formazione, utilizza uno dei SageMaker Framework Containers predefiniti per la versione PyTorch 2.0.1 e successive, preconfezionati con la v2. SMP

  2. Utilizzate il file binario SMP v2 per configurare un ambiente Conda per l'esecuzione di un carico di lavoro di formazione distribuito su un cluster. SageMaker HyperPod

  3. Estendi i SageMaker Framework Containers predefiniti per la PyTorch versione 2.0.1 e versioni successive per installare eventuali requisiti funzionali aggiuntivi per il tuo caso d'uso. Per informazioni su come estendere un contenitore predefinito, consulta. Estendere un container predefinito

  4. Puoi anche portare il tuo contenitore Docker e configurare manualmente tutto l'ambiente di SageMaker formazione utilizzando il toolkit SageMaker Training e installare il file binario SMP v2. Questa è l'opzione meno consigliata a causa della complessità delle dipendenze. Per informazioni su come gestire il tuo contenitore Docker, consulta Adattamento del tuo contenitore di formazione.

Questa guida introduttiva copre i primi due scenari.

Fase 1: Adatta lo script PyTorch FSDP di allenamento

Per attivare e configurare la libreria SMP v2, iniziate con l'importazione e l'aggiunta del torch.sagemaker.init() modulo nella parte superiore dello script. Questo modulo include il dizionario di SMP configurazione SMPparametri di configurazione delle funzionalità principali di v2 che utilizzerai per prepararlo. Fase 2: Avviare un lavoro di formazione Inoltre, per utilizzare le varie funzionalità principali offerte dalla SMP v2, potrebbe essere necessario apportare qualche altra modifica per adattare lo script di allenamento. Istruzioni più dettagliate sull'adattamento dello script di allenamento per l'utilizzo delle funzionalità principali della SMP v2 sono disponibili all'indirizzo. Caratteristiche principali della libreria di parallelismo dei SageMaker modelli v2

SageMaker Training

Nello script di allenamento, aggiungi le seguenti due righe di codice, che sono il requisito minimo per iniziare l'allenamento con SMP la v2. InFase 2: Avviare un lavoro di formazione, imposterai un oggetto della classe SageMaker PyTorch estimator con un dizionario di SMP configurazione tramite l'distributionargomento della classe estimator.

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

Puoi anche passare direttamente un dizionario di configurazione SMPparametri di configurazione delle funzionalità principali di v2 al torch.sagemaker.init() modulo. Tuttavia, i parametri passati allo PyTorch stimatore hanno la priorità e sostituiscono quelli specificati nel Fase 2: Avviare un lavoro di formazione modulo. torch.sagemaker.init()

SageMaker HyperPod

Nello script di addestramento, aggiungete le due righe di codice seguenti. In Fase 2: Avviare un lavoro di formazione seguito, configurerai un smp_config.json file per impostare SMP le configurazioni in JSON formato e lo caricherai su uno storage o su un file system mappato con il tuo SageMaker HyperPod cluster. Ti consigliamo di conservare il file di configurazione nella stessa directory in cui carichi lo script di allenamento.

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

Puoi anche passare direttamente un dizionario di configurazione di SMPparametri di configurazione delle funzionalità principali di v2 al torch.sagemaker.init() modulo.

Fase 2: Avviare un lavoro di formazione

Scopri come configurare le opzioni di SMP distribuzione per avviare un processo di PyTorch FSDP formazione con funzionalità di SMP base.

SageMaker Training

Quando imposti un oggetto training job launcher della classe PyTorch framework estimator in SageMaker PythonSDK, configura SMPparametri di configurazione delle funzionalità principali di v2 tramite distribution argument come segue.

Nota

La distribution configurazione per SMP v2 è integrata in SageMaker SDK Python a partire dalla v2.200. Assicurati di utilizzare SageMaker Python SDK v2.200 o successivo.

Nota

Nella SMP v2, dovresti configurare smdistributed con torch_distributed per l'distributionargomento dello stimatore. SageMaker PyTorch Withtorch_distributed, SageMaker runstorchrun, che è l'avviatore di lavori multinodo predefinito di Distributed. PyTorch

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 } } } } )
Importante

Per utilizzare una delle versioni precedenti PyTorch o SMP al posto della più recente, è necessario specificare l'immagine SMP Docker direttamente utilizzando l'image_uriargomento anziché la framework_version coppia and. py_version Di seguito è riportato un esempio di

estimator = PyTorch( ..., image_uri="658645717510.dkr.ecr.us-west-2.amazonaws.com/smdistributed-modelparallel:2.2.0-gpu-py310-cu121" )

Per trovare l'immagine SMP DockerURIs, vediFramework supportati.

SageMaker HyperPod

Prima di iniziare, assicurati che siano soddisfatti i seguenti prerequisiti.

  • Una directory FSx condivisa Amazon montata (/fsx) sul tuo HyperPod cluster.

  • Conda installato nella directory FSx condivisa. Per sapere come installare Conda, usa le istruzioni in Installazione su Linux nella Guida per l'utente di Conda.

  • cuda11.8o cuda12.1 installato sui nodi principali e di calcolo del cluster. HyperPod

Se tutti i prerequisiti sono soddisfatti, segui le seguenti istruzioni sull'avvio di un carico di lavoro con SMP v2 su un cluster. HyperPod

  1. Prepara un smp_config.json file che contenga un dizionario di. SMPparametri di configurazione delle funzionalità principali di v2 Assicurati di caricare questo JSON file dove memorizzi lo script di allenamento o il percorso specificato per il torch.sagemaker.init() modulo nel passaggio 1. Se avete già passato il dizionario di configurazione al torch.sagemaker.init() modulo nello script di formazione dello Step 1, potete saltare questo passaggio.

    // 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. Carica il smp_config.json file in una directory del tuo file system. Il percorso della directory deve corrispondere al percorso specificato nel passaggio 1. Se avete già passato il dizionario di configurazione al torch.sagemaker.init() modulo nello script di addestramento, potete saltare questo passaggio.

  3. Sui nodi di calcolo del cluster, avvia una sessione di terminale con il seguente comando.

    sudo su -l ubuntu
  4. Crea un ambiente Conda sui nodi di calcolo. Il codice seguente è uno script di esempio per la creazione di un ambiente Conda e l'installazione diSMP, SMDDPCUDA, e altre dipendenze.

    # 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. Esegui un test di formazione.

    1. Nel file system condiviso (/fsx), clona il GitHub repository Awsome Distributed Training e vai alla cartella. 3.test_cases/11.modelparallel

      git clone https://github.com/aws-samples/awsome-distributed-training/ cd awsome-distributed-training/3.test_cases/11.modelparallel
    2. Invia un lavoro utilizzando sbatch quanto segue.

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

      Se l'invio del lavoro ha esito positivo, il messaggio di output di questo sbatch comando dovrebbe essere simile aSubmitted batch job ABCDEF.

    3. Controlla il file di registro nella directory corrente sottologs/.

      tail -f ./logs/fsdp_smp_ABCDEF.out