As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Comece com a biblioteca de paralelismo de SageMaker modelos v2
Nesta página, você aprenderá a usar as APIs v2 da biblioteca de paralelismo de SageMaker modelos e começará a executar um trabalho de treinamento PyTorch Fully Sharded Data Parallel (FSDP) na plataforma de treinamento ou em um cluster. SageMaker SageMaker HyperPod
Há vários cenários para executar um trabalho de PyTorch treinamento com o SMP v2.
-
Para SageMaker treinamento, use um dos SageMaker Framework Containers pré-criados para PyTorch v2.0.1 e versões posteriores, que são pré-empacotados com o SMP v2.
-
Use o arquivo binário SMP v2 para configurar um ambiente Conda para executar uma carga de trabalho de treinamento distribuída em um cluster. SageMaker HyperPod
-
Estenda os SageMaker Framework Containers pré-criados para PyTorch v2.0.1 e versões posteriores para instalar quaisquer requisitos funcionais adicionais para seu caso de uso. Para saber como estender um contêiner pré-construído, consulteEstenda uma imagem de contêiner predefinida.
-
Você também pode trazer seu próprio contêiner Docker e configurar manualmente todo o ambiente de SageMaker treinamento usando o kit de ferramentas de SageMaker treinamento e instalar o arquivo binário SMP v2. Essa é a opção menos recomendada devido à complexidade das dependências. Para saber como executar seu próprio contêiner Docker, consulte Adaptando seu próprio contêiner de treinamento.
Este guia de introdução aborda os dois primeiros cenários.
Etapa 1: Adapte seu script de PyTorch treinamento do FSDP
Para ativar e configurar a biblioteca SMP v2, comece importando e adicionando o torch.sagemaker.init()
módulo na parte superior do script. Este módulo inclui o dicionário de configuração SMP no Parâmetros de configuração do recurso principal do SMP v2 Etapa 2: iniciar um trabalho de treinamento qual você se preparará. Além disso, para usar os vários recursos principais oferecidos pelo SMP v2, talvez seja necessário fazer mais algumas alterações para adaptar seu script de treinamento. Instruções mais detalhadas sobre como adaptar seu script de treinamento para usar os principais recursos do SMP v2 são fornecidas em. Principais características da biblioteca de paralelismo de SageMaker modelos v2
- SageMaker Training
-
Em seu script de treinamento, adicione as duas linhas de código a seguir, que é o requisito mínimo para começar a treinar com o SMP v2. EmEtapa 2: iniciar um trabalho de treinamento, você configurará um objeto da classe SageMaker PyTorch
estimadora com um dicionário de configuração SMP por meio do distribution
argumento da classe estimadora.
import torch.sagemaker as tsm
tsm.init()
- SageMaker HyperPod
-
Em seu script de treinamento, adicione as duas linhas de código a seguir. EmEtapa 2: iniciar um trabalho de treinamento, você configurará um smp_config.json
arquivo para definir as configurações SMP no formato JSON e o carregará em um armazenamento ou sistema de arquivos mapeado com seu cluster. SageMaker HyperPod Recomendamos que você mantenha o arquivo de configuração no mesmo diretório em que fez o upload do script de treinamento.
import torch.sagemaker as tsm
tsm.init("/dir_to_training_files/smp_config.json
")
Etapa 2: iniciar um trabalho de treinamento
Saiba como configurar as opções de distribuição do SMP para iniciar um trabalho de treinamento do PyTorch FSDP com os principais recursos do SMP.
- SageMaker Training
-
Ao configurar um objeto iniciador de trabalhos de treinamento da classe estimador de PyTorch estrutura no SDK do SageMaker Python, configure por meio do argumento a seguir. Parâmetros de configuração do recurso principal do SMP v2 distribution
A distribution
configuração do SMP v2 está integrada ao SDK do SageMaker Python a partir da v2.200. Certifique-se de usar o SageMaker Python SDK v2.200 ou posterior.
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
}
}
}
}
)
Para usar uma das versões anteriores do PyTorch ou SMP em vez da mais recente, você precisa especificar a imagem do SMP Docker diretamente usando o image_uri
argumento em vez do framework_version
par e. py_version
A seguir está um exemplo de
estimator = PyTorch(
...,
image_uri="658645717510.dkr.ecr.us-west-2.amazonaws.com/smdistributed-modelparallel:2.2.0-gpu-py310-cu121"
)
Para encontrar URIs de imagem do SMP Docker, consulte. Estruturas compatíveis
- SageMaker HyperPod
-
Antes de começar, verifique se os pré-requisitos a seguir foram atendidos.
-
Um diretório compartilhado Amazon FSx montado (/fsx
) em seu HyperPod cluster.
-
Conda instalado no diretório compartilhado FSx. Para saber como instalar o Conda, use as instruções em Instalação no Linux no Guia do usuário do Conda.
-
cuda11.8
ou cuda12.1
instalado na cabeça e nos nós de computação do seu HyperPod cluster.
Se todos os pré-requisitos forem atendidos, siga as instruções a seguir sobre como iniciar uma carga de trabalho com o SMP v2 em um cluster. HyperPod
-
Prepare um smp_config.json
arquivo que contenha um dicionário deParâmetros de configuração do recurso principal do SMP v2. Certifique-se de carregar esse arquivo JSON para onde você armazena seu script de treinamento ou o caminho que você especificou para o torch.sagemaker.init()
módulo na Etapa 1. Se você já passou o dicionário de configuração para o torch.sagemaker.init()
módulo no script de treinamento na Etapa 1, você pode pular essa etapa.
// 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
}
-
Carregue o smp_config.json
arquivo em um diretório no seu sistema de arquivos. O caminho do diretório deve corresponder ao caminho especificado na Etapa 1. Se você já passou o dicionário de configuração para o torch.sagemaker.init()
módulo no script de treinamento, pode pular esta etapa.
-
Nos nós de computação do seu cluster, inicie uma sessão de terminal com o comando a seguir.
sudo su -l ubuntu
-
Crie um ambiente Conda nos nós de computação. O código a seguir é um exemplo de script de criação de um ambiente Conda e instalação de SMP, SMDDP, CUDA e outras dependências.
# 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
-
Execute um trabalho de treinamento de teste.
-
No sistema de arquivos compartilhado (/fsx
), clone o GitHub repositório do Awsome Distributed Training e vá até a pasta. 3.test_cases/11.modelparallel
git clone https://github.com/aws-samples/awsome-distributed-training/
cd awsome-distributed-training/3.test_cases/11.modelparallel
-
Envie um trabalho usando sbatch
o seguinte.
conda activate <ENV_PATH>
sbatch -N 16 conda_launch.sh
Se o envio do trabalho for bem-sucedido, a mensagem de saída desse sbatch
comando deverá ser semelhante Submitted batch job ABCDEF
a.
-
Verifique o arquivo de log no diretório atual abaixologs/
.
tail -f ./logs/fsdp_smp_ABCDEF.out