Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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, você divide a carga de trabalho para treinar um modelo e compartilhá-lo entre vários mini processadores, chamados de nós de trabalho. Esses nós de trabalho funcionam em paralelo para acelerar o treinamento do modelo. Você pode usar o treinamento distribuído para modelos tradicionais de machine learning, mas é mais adequado para tarefas de computação e tempo intensivo, como aprendizado profundo para treinar 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, você divide os dados em partições, em que 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. Você copia o modelo em cada um desses nós de trabalho, e cada nó opera em seu 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 se ajustar em cada nó.
O diagrama a seguir mostra essa abordagem.
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, você segmenta o modelo em diferentes partes que são executadas simultaneamente em nós diferentes. Cada componente opera sobre os mesmos dados. A escalabilidade desse método depende do grau de paralelização da tarefa do algoritmo. É mais complexo 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.