El entrenamiento distribuido aprovecha las técnicas de ML distribuido para repartir el entrenamiento de modelos entre dispositivos. Por ejemplo, esta técnica se utiliza a menudo con grandes redes neuronales. Cuando la red, el conjunto de datos de entrenamiento o ambos son demasiado grandes para un procesador, el entrenamiento distribuido reparte la carga de trabajo entre varios servidores, GPU o máquinas.
El descenso de gradiente estocástico (SGD) es un algoritmo de aprendizaje que divide el conjunto de datos en minilotes y calcula el gradiente de la función de pérdida después de cada lote. El uso de minilotes en lugar del conjunto de datos completo hace que el entrenamiento sea más eficiente.
La función de pérdida mide el error en las predicciones del modelo, y el objetivo del SGD es descender el gradiente para minimizar el valor de la función. Al igual que con el entrenamiento de modelos estándar, el proceso de entrenamiento se considera completo cuando el modelo alcanza la convergencia: cuando el algoritmo SGD minimiza con éxito el valor de la función.
Los nodos procesan minilotes en paralelo, lo que es posible porque cada lote se procesa independientemente de los demás dentro de cada iteración. Cada nodo calcula su gradiente y, a continuación, envía el valor de gradiente actualizado a los demás nodos de la red. Los demás nodos trabajadores implementan las actualizaciones que reciben en sus propios modelos, lo que ayuda a garantizar que todas las copias del modelo permanezcan idénticas durante todo el proceso de entrenamiento.
La función AllReduce es una operación de comunicación colectiva que permite a cada nodo compartir sus resultados y propagar los resultados agregados a través de la red. AllReduce permite que todos los nodos sincronicen las actualizaciones de los parámetros del modelo y mantengan la coherencia. AllReduce, utilizado durante mucho tiempo en la informática de alto rendimiento, se popularizó en marcos de ML como Horovod.
El SGD se puede ejecutar de forma síncrona o asíncrona. El SGD síncrono actualiza todos los nodos al mismo tiempo, lo que mantiene la coherencia a costa de posibles retrasos si algunos nodos se quedan rezagados. El SGD asíncrono actualiza los parámetros tan pronto como está lista una actualización, pero algunos nodos pueden recibir actualizaciones que no incluyen los valores más actuales.
Al reducir los recursos computacionales necesarios por dispositivo, el entrenamiento distribuido puede acelerar los tiempos de entrenamiento. Debido a que requiere un uso intensivo de recursos computacionales, el entrenamiento es uno de los principales casos de uso del ML distribuido.