L’entraînement distribué tire parti de techniques de ML distribuées pour diffuser l’entraînement des modèles sur plusieurs appareils. Par exemple, cette technique est souvent utilisée pour les grands réseaux de neurones. Lorsque le réseau, le jeu de données d’entraînement ou les deux sont trop grands pour un seul processeur, l’entraînement distribué répartit le workload sur plusieurs serveurs, GPU ou machines.
La descente de gradient stochastique (SGD) est un algorithme d’apprentissage qui divise le jeu de données en mini-lots et calcule le gradient de la fonction de perte après chaque lot. L’utilisation de mini-lots au lieu d’un jeu de données complet améliore l’efficacité de l’entraînement.
La fonction de perte mesure l’erreur dans les prédictions du modèle, et l’objectif de SGD est de descendre le gradient pour minimiser la valeur de la fonction. Comme pour l’entraînement des modèles standard, le processus d’entraînement est considéré comme terminé lorsque le modèle atteint la convergence, c’est-à-dire lorsque l’algorithme SGD minimise avec succès la valeur de la fonction.
Les nœuds traitent les mini-lots en parallèle, ce qui est possible, car chaque lot est traité indépendamment des autres à chaque itération. Chaque nœud calcule son gradient, puis transmet la valeur actualisée du gradient aux autres nœuds du réseau. Les autres nœuds worker intègrent les mises à jour qu’ils reçoivent dans leurs propres modèles, ce qui permet de s’assurer que toutes les copies du modèle restent identiques tout au long du processus d’entraînement.
La fonction AllReduce est une opération de communication collective qui permet à chaque nœud de partager ses résultats et de propager les résultats agrégés à travers le réseau. AllReduce permet à tous les nœuds de synchroniser les mises à jour des paramètres du modèle et de maintenir la cohérence. AllReduce, longtemps utilisé dans le calcul à haute performance, a été popularisé dans les cadres des exigences ML tels que Horovod.
SGD peut être exécuté de manière synchrone ou asynchrone. Le SGD synchrone met à jour tous les nœuds en même temps, ce qui maintient la cohérence au prix de retards potentiels si certains nœuds sont à la traîne. Le SGD asynchrone met à jour les paramètres dès qu’une mise à jour est prête, mais certains nœuds peuvent recevoir des mises à jour qui n’incluent pas les valeurs les plus récentes.
En réduisant les ressources informatiques nécessaires par appareil, l’entraînement distribué peut accélérer les délais d’entraînement. En raison de sa forte intensité de calcul, l’entraînement est l’un des principaux cas d’utilisation de l’application distribuée de ML.