O treinamento distribuído aproveita técnicas de ML distribuído para espalhar o treinamento de modelos entre dispositivos. Por exemplo, essa técnica é frequentemente usada com grandes redes neurais. Quando a rede, o conjunto de dados de treinamento ou ambos são muito grandes para um processador, o treinamento distribuído distribui a carga de trabalho entre vários servidores, GPUs ou máquinas.
O gradiente descendente estocástico (SGD) é um algoritmo de aprendizado que divide o conjunto de dados em minilotes e calcula o gradiente da função de perda após cada lote. Usar minilotes em vez do conjunto de dados completo torna o treinamento mais eficiente.
A função de perda mede o erro nas previsões do modelo, e o objetivo do SGD é diminuir o gradiente para minimizar o valor da função. Assim como no treinamento de modelo padrão, o processo de treinamento é considerado concluído quando o modelo atinge a convergência: quando o algoritmo SGD minimiza com sucesso o valor da função.
Nós processam minilotes em paralelo, o que é possível porque cada lote é processado independentemente dos outros dentro de cada iteração. Cada nó calcula seu gradiente e, em seguida, envia o valor do gradiente atualizado para os outros nós da rede. Os outros nós de trabalho implementam as atualizações que recebem em seus próprios modelos, ajudando a garantir que todas as cópias do modelo permaneçam idênticas durante todo o processo de treinamento.
A função AllReduce é uma operação de comunicação coletiva que permite que cada nó compartilhe seus resultados e propague os resultados agregados pela rede. O AllReduce permite que todos os nós sincronizem as atualizações de parâmetros do modelo e mantenham a consistência. O AllReduce, há muito usado em computação de alto desempenho, foi popularizado em frameworks de ML, como o Horovod.
O SGD pode ser executado de forma síncrona ou assíncrona. O SGD síncrono atualiza todos os nós ao mesmo tempo, o que mantém a consistência ao custo de possíveis atrasos se alguns nós ficarem para trás. O SGD assíncrono atualiza os parâmetros assim que uma atualização está pronta, mas alguns nós podem receber atualizações que não incluem os valores mais atualizados.
Ao reduzir os recursos computacionais necessários por dispositivo, o treinamento distribuído pode acelerar os tempos de treinamento. Por ter um uso tão intenso de computação, o treinamento é um dos principais casos de uso para o ML distribuído.