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 otimizador entre dispositivos, o paralelismo tensorial 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 GPU memória (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.
SMPA v2 se integra ao Transformer Engine
Na prática, o paralelismo de tensores é especialmente útil nos cenários a seguir.
-
Ao treinar com longos comprimentos de contexto, isso leva a uma alta memória de ativação FSDP sozinho.
-
Ao treinar com clusters realmente grandes nos quais o tamanho do lote global excede os limites desejados.
Modelos Hugging Face Transformer compatíveis com o paralelismo tensorial SMP
SMPAtualmente, a v2 oferece suporte a paralelismo de tensores para os seguintes modelos de transformadores Hugging Face.
-
GPT-NeoX
-
Lhama 2
Para obter a configuração de referência para aplicar o paralelismo de tensores nesses modelos, consulte. Dicas de configuração
Configurar o paralelismo do tensor
Paratensor_parallel_degree
, você seleciona um valor para o grau de paralelismo do tensor. 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 8GPUs, escolha 2, 4 ou 8. Recomendamos que você comece com um número pequeno e aumente gradualmente até que o modelo caiba na GPU memória.
Os trechos de código a seguir mostram como adicionar o módulo de SMP inicialização torch.sagemaker.init()
ao seu script de treinamento e configurar o dicionário de SMP configuração no JSON formato para o lançador 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 em seu PyTorch modelo ou PyTorch FSDPtensor_parallel_degree
e random_seed
, consulte SMPparâmetros de configuração do recurso principal v2.
SMPconfiguração
{ "tensor_parallel_degree": 8, "random_seed": 0 }
Em seu roteiro de treinamento
Inicialize com torch.sagemaker.init()
para ativar a SMP v2 e encapsular seu modelo com o. torch.sagemaker.transform API
import torch.sagemaker as tsm tsm.init() from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_config(..) model = tsm.transform(model)
Salvando e carregando os pontos de verificação do Hugging Face Transformer
Depois que a SMP biblioteca 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 Hugging Face Transformer. Para lidar com isso, a SMP biblioteca permite APIs salvar pontos de verificação de um modelo transformado na representação do Hugging Face Transformer e torch.sagemaker.transform
API carregar um ponto de verificação do modelo Hugging Face Transformer para ajuste fino.
Para obter mais informações sobre como salvar pontos de verificação ao usar o recurso de paralelismo de tensores da v2, consulte. SMP Ponto de verificação usando SMP
Para obter mais informações sobre como ajustar um modelo aplicando o recurso de paralelismo de tensores da v2, consulte. SMP Ajuste fino