Treinamento descentralizado com o Azure Machine Learning

Neste artigo, você aprenderá sobre o treinamento descentralizado e como o Azure Machine Learning dá suporte a ele para modelos de aprendizado profundo.

No treinamento distribuído, a carga de trabalho usada para treinar um modelo é dividida e compartilhada entre vários mini processadores chamados nós de trabalho. Esses nós de trabalho funcionam em paralelo para acelerar o treinamento de modelo. O treinamento descentralizado pode ser usado para modelos de machine learning tradicionais, mas é mais adequado para tarefas intensivas de computação e demoradas, como aprendizado profundo para o treinamento de redes neurais profundas.

Aprendizado profundo e treinamento descentralizado

Há dois tipos principais de treinamento descentralizado: paralelismo de dados e paralelismo de modelo. Para o treinamento descentralizado sobre modelos de aprendizado profundo, o SDK do Azure Machine Learning para Python dá suporte a integrações com PyTorch e TensorFlow. Ambas 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 machine learning que não exigem treinamento descentralizado, consulte treinar modelos com 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 as duas abordagens de treinamento distribuídas e é suficiente para a maioria dos casos de uso.

Nessa 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 na computação sem servidor. O modelo é copiado em cada um desses nós de trabalho, e cada operador opera no próprio subconjunto dos dados. Tenha em mente que cada nó precisa ter a capacidade de dar suporte ao modelo que está sendo treinado, ou seja, o modelo inteiro precisa caber em cada nó.

O diagrama a seguir mostra essa abordagem.

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

Cada nó computa de forma independente os erros entre suas previsões para seus exemplos 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 do lote para garantir que eles estejam treinando um modelo consistente.

Paralelismo de modelo

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

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