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á.
Etapa 1: modifique seu próprio script de treinamento usando a biblioteca paralela SageMaker de modelos distribuídos
Use esta seção para aprender a personalizar seu script de treinamento para usar os principais recursos da biblioteca de paralelismo de modelos de SageMaker IA da Amazon. Para usar as funções e os parâmetros de API específicos da biblioteca, recomendamos que você use essa documentação junto com a biblioteca SageMaker paralela de modelos na documentação do SDK APIs
Os exemplos de scripts de treinamento fornecidos nessas seções são simplificados e projetados para destacar as alterações necessárias que você deve fazer para usar a biblioteca. Para end-to-end exemplos de notebooks executáveis que demonstram como usar um script de PyTorch treinamento TensorFlow ou com a biblioteca de paralelismo de SageMaker modelos, consulte. Exemplos da biblioteca de paralelismo de modelos de SageMaker IA da Amazon v2
Tópicos
Divida o modelo do seu script de treinamento usando a biblioteca de SageMaker paralelismo de modelos
Há duas maneiras de modificar seu script de treinamento para configurar a divisão do modelo: divisão automática ou divisão manual.
Divisão automatizada de modelos
Ao usar a biblioteca SageMaker de paralelismo de modelos, você pode aproveitar a divisão automatizada de modelos, também conhecida como particionamento automatizado de modelos. A biblioteca utiliza um algoritmo de particionamento que equilibra a memória, minimiza a comunicação entre dispositivos e otimiza o desempenho. Você pode configurar o algoritmo de particionamento automático para otimizar a velocidade ou a memória.
Também é possível usar a divisão manual do modelo. Recomendamos a divisão automatizada do modelo, a menos que você esteja muito familiarizado com a arquitetura do modelo e tenha uma boa ideia de como particionar seu modelo de forma eficiente.
Como funciona
O particionamento automático ocorre durante a primeira etapa de treinamento, quando a função decorada com smp.step
é chamada pela primeira vez. Nesta chamada, a biblioteca primeiro constrói uma versão do modelo na RAM da CPU (para evitar limitações de memória da GPU) e, em seguida, analisa o grafo do modelo e toma uma decisão de particionamento. Com base nessa decisão, cada partição do modelo é carregada em uma GPU e somente então a primeira etapa é executada. Devido a essas etapas de análise e particionamento, a primeira etapa de treinamento pode levar mais tempo.
Em qualquer estrutura, a biblioteca gerencia a comunicação entre dispositivos por meio de seu próprio back-end, que é otimizado para AWS infraestrutura.
O design de autopartição se adapta às características do framework, e a biblioteca realiza o particionamento no nível de granularidade que é mais natural em cada framework. Por exemplo, em TensorFlow, cada operação específica pode ser atribuída a um dispositivo diferente, enquanto em PyTorch, a atribuição é feita no nível do módulo, onde cada módulo consiste em várias operações. A seção a seguir analisa as especificidades do design em cada framework.
Durante a primeira etapa de treinamento, a biblioteca de paralelismo de modelo internamente executa uma etapa de rastreamento destinada a construir o grafo do modelo e determinar as formas dos tensores e parâmetros. Após essa etapa de rastreamento, a biblioteca constrói uma árvore, que consiste nos objetos nn.Module
aninhados no modelo, bem como nos dados adicionais coletados do rastreamento, como a quantidade de objetos armazenados nn.Parameters
e o tempo de execução de cada nn.Module
.
Em seguida, a biblioteca percorre essa árvore a partir da raiz e executa um algoritmo de particionamento que atribui cada nn.Module
a um dispositivo, equilibrando a carga computacional (medida pelo tempo de execução do módulo) e o uso de memória (medido pelo tamanho total armazenado de nn.Parameter
e ativações). Se vários nn.Modules
compartilham o mesmo nn.Parameter
, então esses módulos são colocados no mesmo dispositivo para evitar manter várias versões do mesmo parâmetro. Assim que a decisão de particionamento é tomada, os módulos e pesos atribuídos são carregados em seus dispositivos.
Para obter instruções sobre como registrar o smp.step
decorador em seu script PyTorch de treinamento, consulteDivisão automatizada com PyTorch.
A biblioteca de paralelismo de modelos analisa os tamanhos das variáveis treináveis e a estrutura do gráfico e usa internamente um algoritmo de particionamento gráfico. Este algoritmo determina uma atribuição de dispositivo para cada operação, com o objetivo de minimizar a quantidade de comunicação necessária entre dispositivos, sujeito a duas restrições:
-
Equilibrando o número de variáveis armazenadas em cada dispositivo.
-
Equilibrando o número de operações executadas em cada dispositivo
Se você especificar speed
para optimize
(nos parâmetros de paralelismo do modelo no Python SDK), a biblioteca tentará equilibrar o número de operações e objetos tf.Variable
em cada dispositivo. Caso contrário, ele tenta equilibrar o tamanho total de tf.Variables
.
Uma vez tomada a decisão de particionamento, a biblioteca cria uma representação serializada do subgráfico que cada dispositivo precisa executar e os importa para cada dispositivo. Durante o particionamento, a biblioteca coloca as operações que consomem o mesmo tf.Variable
e as operações que fazem parte da mesma camada Keras no mesmo dispositivo. Também respeita as restrições de colocation impostas por. TensorFlow Isso significa que, por exemplo, se houver duas camadas Keras que compartilham um tf.Variable
, todas as operações que fazem parte dessas camadas são colocadas em um dispositivo único.
Para obter instruções sobre como registrar o smp.step
decorador em seu script PyTorch de treinamento, consulteDivisão automatizada com TensorFlow.
Comparação da divisão automatizada de modelos entre frameworks
Em TensorFlow, a unidade fundamental de computação é a e TensorFlow representa o modelo como um tf.Operation
gráfico acíclico direcionado (DAG) de tf.Operation
s e, portanto, a biblioteca de paralelismo do modelo particiona esse DAG para que cada nó vá para um dispositivo. Crucialmente, os objetos tf.Operation
são suficientemente ricos em atributos personalizáveis e são universais no sentido de que cada modelo tem a garantia de consistir em um gráfico desses objetos.
PyTorch por outro lado, não tem uma noção equivalente de operação que seja suficientemente rica e universal. A unidade de computação mais próxima PyTorch que tem essas características é umann.Module
, que está em um nível de granularidade muito maior, e é por isso que a biblioteca faz o particionamento nesse nível em. PyTorch
Divisão manual de modelos
Se você quiser especificar manualmente como particionar seu modelo entre dispositivos, use o gerenciador de contexto do smp.partition
. Para instruções sobre como configurar o gerenciador de contexto para particionamento manual, consulte as seguintes páginas.
Para usar essa opção depois de fazer modificações, na Etapa 2, você precisará definir e definir uma default_partition
na classe de estimador da estrutura do SDK do Python SageMaker. auto_partition
False
Qualquer operação que não seja colocada explicitamente em uma partição por meio do gerenciador de contexto do smp.partition
é executada no default_partition
. Nesse caso, a lógica de divisão automatizada é ignorada e cada operação é colocada com base na sua especificação. Com base na estrutura gráfica resultante, a biblioteca de paralelismo de modelos cria automaticamente um cronograma de execução em pipeline.