Formação distribuída com o Azure Machine Learning

Neste artigo, você aprenderá sobre o treinamento distribuído e como o Azure Machine Learning o oferece suporte para modelos de aprendizado profundo.

No treinamento distribuído, a carga de trabalho para treinar um modelo é dividida e compartilhada entre vários miniprocessadores, chamados nós de trabalho. Esses nós de trabalho trabalham em paralelo para acelerar o treinamento do modelo. O treinamento distribuído pode ser usado para modelos tradicionais de aprendizado de máquina, mas é mais adequado para tarefas de computação e uso intensivo de tempo, como aprendizado profundo para treinamento de redes neurais profundas.

Aprendizagem profunda e formação distribuída

Existem dois tipos principais de treinamento distribuído: paralelismo de dados e paralelismo de modelo. Para treinamento distribuído em modelos de aprendizado profundo, o SDK do Azure Machine Learning em Python dá suporte a integrações com PyTorch e TensorFlow. Ambos são estruturas populares que empregam paralelismo de dados para treinamento distribuído e podem usar o Horovod para otimizar as velocidades de computação.

Para modelos de aprendizado de máquina que não exigem treinamento distribuído, consulte Treinar modelos com o Azure Machine Learning para diferentes maneiras de treinar modelos usando o SDK do Python.

Paralelismo de dados

O paralelismo de dados é o mais fácil de implementar das duas abordagens de treinamento distribuído e é suficiente para a maioria dos casos de uso.

Nesta abordagem, os dados são divididos em partições, onde o número de partições é igual ao número total de nós disponíveis, no cluster de computação ou computação sem servidor. O modelo é copiado em cada um desses nós de trabalho e cada nó opera em seu próprio subconjunto de dados. Tenha em mente que cada nó deve ter a capacidade de suportar o modelo que está sendo treinado, ou seja, todo o modelo deve caber em cada nó.

O diagrama seguinte mostra esta abordagem.

Diagrama de parrallelism de dados mostrando o modelo copiado em nós de trabalho.

Cada nó calcula independentemente os erros entre suas previsões para suas amostras de treinamento e as saídas rotuladas. Por sua vez, cada nó atualiza seu modelo com base nos erros e deve comunicar todas as suas alterações aos outros nós para atualizar seus modelos correspondentes. Os nós de trabalho precisam sincronizar os parâmetros do modelo, ou gradientes, no final da computação em lote para garantir que estão treinando um modelo consistente.

Paralelismo do modelo

No paralelismo de modelo, também conhecido como paralelismo de rede, o modelo é segmentado em diferentes partes que podem ser executadas simultaneamente em diferentes nós, e cada um é executado nos mesmos dados. A escalabilidade desse método depende do grau de paralelização de tarefas do algoritmo, e é mais complexo de implementar do que o paralelismo de dados.

No paralelismo de modelo, os nós de trabalho só precisam sincronizar os parâmetros compartilhados, geralmente uma vez para cada etapa de propagação para frente ou para trás. Além disso, modelos maiores não são uma preocupação, já que cada nó opera em uma subseção do modelo nos mesmos dados de treinamento.