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á.
Paralelismo de tensores
O paralelismo de tensores é um tipo de paralelismo de modelo no qual pesos, gradientes e estados do otimizador específicos do modelo são divididos entre dispositivos. Em contraste com o paralelismo de tubulação, que mantém os pesos individuais intactos, mas divide o conjunto de pesos, gradientes ou otimizadores pelos dispositivos, o paralelismo de tensores fragmenta os pesos individuais. Isso normalmente envolve computação distribuída de operações, módulos ou camadas específicas do modelo.
O paralelismo do tensor é necessário nos casos em que um único parâmetro consome a maior parte da memória da GPU (como grandes tabelas de incorporação com um grande tamanho de vocabulário ou uma grande camada softmax com um grande número de classes). Nesse caso, tratar esse grande tensor ou operação como uma unidade atômica é ineficiente e impede o equilíbrio da carga de memória.
O SMP v2 se integra ao Transformer Engine
Na prática, o paralelismo de tensores é útil principalmente nos cenários a seguir.
-
Ao treinar com longos comprimentos de contexto, o que leva a uma alta memória de ativação apenas com o FSDP.
-
Ao treinar com clusters substancialmente grandes, nos quais o tamanho do lote global excede os limites desejados.
Modelos tipo transformador da Hugging Face compatíveis com o paralelismo de tensores no SMP
Atualmente, o SMP v2 é compatível com a paralelismo de tensores para os seguintes modelo tipo transformador da Hugging Face:
-
GPT-NeoX
-
Llama 2
-
Llama 3
Para obter a configuração de referência para aplicar o paralelismo de tensores nesses modelos, consulte Dicas de configuração.
Configurar paralelismo de tensores
Para tensor_parallel_degree
, você seleciona um valor para o grau de paralelismo de tensores. O valor deve dividir uniformemente o número de GPUs em seu cluster. Por exemplo, para fragmentar seu modelo ao usar uma instância com 8 GPUs, escolha 2, 4 ou 8. Recomendamos que você comece com um número pequeno e aumente gradativamente até que o modelo caiba na memória da GPU.
Os trechos de código a seguir mostram como adicionar o módulo de inicialização do SMP torch.sagemaker.init()
ao seu script de treinamento e como configurar o dicionário de configuração do SMP no formato JSON para o inicializador de tarefas de treinamento, seguindo o processo de duas etapas apresentado em Use a biblioteca de paralelismo de SageMaker modelos v2. Você não precisa fazer nenhuma alteração no PyTorch modelo ou na configuração do PyTorch FSDP.tensor_parallel_degree
e random_seed
, consulte Parâmetros de configuração do atributo principal do SMP v2.
Configuração do SMP
{ "tensor_parallel_degree": 8, "random_seed": 0 }
No script de treinamento
Inicialize com torch.sagemaker.init()
para ativar o SMP v2 e agrupar seu modelo à API torch.sagemaker.transform.
import torch.sagemaker as tsm tsm.init() from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_config(..) model = tsm.transform(model)
Salvar e carregar os pontos de verificação do transformador Hugging Face
Depois que a biblioteca de SMP transforma um modelo, ela altera o dicionário de estado (state_dict
) do modelo. Isso significa que o modelo se torna incompatível com as funcionalidades originais de checkpoint do transformador Hugging Face. Para lidar com isso, a biblioteca SMP permite APIs salvar pontos de verificação de um modelo transformado na representação do Hugging Face Transformer torch.sagemaker.transform
e a API carrega um ponto de verificação do modelo Hugging Face Transformer para ajuste fino.
Para obter mais informações sobre como salvar os pontos de verificação ao usar o atributo de paralelismo de tensores do SMP v2, consulte Ponto de verificação com uso do SMP.
Para obter mais informações sobre como ajustar um modelo usando o atributo de paralelismo de tensores do SMP v2, consulte Ajuste.