Entraînement distribué dans Amazon SageMaker AI
SageMaker AI fournit des bibliothèques d’entraînement distribué et prend en charge de nombreuses options d’entraînement distribué pour des tâches de deep learning telles que la vision par ordinateur et le traitement du langage naturel (NLP). Les bibliothèques d’entraînement distribué SageMaker AI permettent d’exécuter des tâches d’entraînement de deep learning personnalisées, hautement évolutives et rentables, pour le parallélisme des données et des modèles. Vous pouvez également utiliser d'autres cadres et packages d'entraînement distribué tels que PyTorch DistributedDataParallel (DDP), torchrun, MPI (mpirun) et le serveur de paramètres. La section suivante fournit des informations sur les concepts fondamentaux d’entraînement distribué. La documentation contient des instructions et des exemples sur l'utilisation des options d'entraînement distribué pour des tâches de deep learning avec le kit SDK Python SageMaker.
Astuce
Pour découvrir les bonnes pratiques en matière de calcul distribué pour l'entraînement au machine learning (ML) et les tâches de traitement en général, consultez Bonnes pratiques d’informatique distribuée avec SageMaker AI.
Concepts d’entraînement distribué
Les bibliothèques d’entraînement distribué SageMaker AI utilisent les termes et caractéristiques d’entraînement distribué suivants.
Jeux de données et lots
-
Jeu de données d'entraînement : toutes les données que vous utilisez pour entraîner le modèle.
-
Taille de lot globale : le nombre d'enregistrements sélectionnés dans le jeu de données d'entraînement dans chaque itération à envoyer aux GPU du cluster. Il s'agit du nombre d'enregistrements sur lesquels le gradient est calculé à chaque itération. Lorsque le parallélisme des données est utilisé, ce nombre est égal au nombre total de réplicas de modèle multiplié par la taille du lot par réplica :
global batch size = (the number of model replicas) * (per-replica batch size). La littérature de machine learning utilise souvent le terme de mini-lot pour désigner un lot unique de taille de lot globale. -
Taille de lot par réplica : lorsque le parallélisme des données est utilisé, ce terme désigne le nombre d'enregistrements envoyés à chaque réplica de modèle. Chaque réplica de modèle effectue une transmission vers l'avant et vers l'arrière avec ce lot pour calculer les mises à jour de poids. Les mises à jour de poids ainsi obtenues sont synchronisées (moyennées) sur tous les réplicas avant le traitement de l'ensemble suivant de lots par réplica.
-
Micro-lot : un sous-ensemble du mini-lot ou, si le modèle hybride et le parallélisme des données sont utilisés, un sous-ensemble du lot dimensionné par réplica. Lorsque vous utilisez la bibliothèque SageMaker AI de parallélisme distribué des modèles, chaque micro-lot est introduit individuellement dans le pipeline d’entraînement et respecte un calendrier d’exécution défini par l’environnement d’exécution de la bibliothèque.
Entrainement
-
Époque : un cycle d'entraînement sur la totalité du jeu de données. Il est fréquent que chaque époque comprenne plusieurs itérations. Le nombre d'époques que vous utilisez dans l'entraînement est unique pour votre modèle et votre cas d'utilisation.
-
Itération : une seule transmission vers l'avant et vers l'arrière effectuée à l'aide d'un lot dimensionné par rapport à la taille de lot globale (un mini-lot) de données d'entraînement. Le nombre d'itérations effectuées pendant l'entraînement est déterminé par la taille de lot globale et le nombre d'époques utilisées pour l'entraînement. Par exemple, si un jeu de données comprend 5 000 échantillons et que vous utilisez une taille de lot globale de 500, 10 itérations seront nécessaires pour terminer une seule époque.
-
Taux d'apprentissage : une variable qui agit sur l'ampleur de changement des poids en réponse à l'erreur calculée du modèle. Le taux d'apprentissage joue un rôle important dans la capacité du modèle à converger, ainsi que dans la rapidité et l'optimalité de la convergence.
Instances et GPU
-
Instances : une instance de calcul de machine learning AWS
. Les instances sont également appelées nœuds. -
Taille du cluster : lors de l’utilisation de la bibliothèque d’entraînement distribué SageMaker AI, ce terme désigne le nombre d’instances multiplié par le nombre de GPU dans chaque instance. Par exemple, si vous utilisez deux instances ml.p3.8xlarge dans une tâche d'entraînement, de 4 GPU chacune, la taille du cluster est 8. Bien que l'augmentation de la taille du cluster puisse réduire les durées d'entraînement, il est nécessaire d'optimiser la communication entre les instances afin d'éviter que la communication entre les nœuds n'ajoute un surdébit et n'allonge les durées d'entraînement. La bibliothèque d’entraînement distribué SageMaker AI est conçue pour optimiser la communication entre les instances de calcul de machine learning Amazon EC2, ce qui accroît l’utilisation des dispositifs et réduit les durées d’entraînement.
Solutions d'entraînement distribué
-
Parallélisme de données : stratégie d'entraînement distribué dans le cadre de laquelle un jeu de données d'entraînement est réparti sur plusieurs GPU au sein d'un cluster de calcul composé de plusieurs instances de machine learning Amazon EC2. Chaque GPU contient un réplica du modèle, reçoit différents lots de données d'entraînement, effectue une transmission vers l'avant et vers l'arrière, et partage les mises à jour de poids avec les autres nœuds à des fins de synchronisation, avant de passer au lot suivant et finalement à une autre époque.
-
Parallélisme de modèles : stratégie d'entraînement distribué dans le cadre de laquelle le modèle est partitionné sur plusieurs GPU au sein d'un cluster de calcul composé de plusieurs instances de machine learning Amazon EC2. La complexité et le grand nombre de couches et de poids cachés du modèle peuvent l'empêcher de tenir dans la mémoire d'une seule instance. Chaque GPU contient un sous-ensemble du modèle, à travers lequel les flux de données et les transformations sont partagés et compilés. L'efficacité du parallélisme des modèles, en termes d'utilisation du GPU et de durée d'entraînement, dépend fortement de la façon dont le modèle est partitionné, ainsi que du calendrier d'exécution utilisé pour effectuer des transmissions vers l'avant et vers l'arrière.
-
Calendrier d'exécution du pipeline (Pipelining) : le calendrier d'exécution du pipeline détermine l'ordre dans lequel les calculs (micro-lots) sont effectués et les données sont traitées entre les périphériques pendant l'entraînement du modèle. Le Pipelining est une technique employée pour obtenir une véritable parallélisation des modèles grâce aux calculs simultanés effectués par les GPU sur différents échantillons de données, et surmonter la baisse de performance due au calcul séquentiel. Pour en savoir plus, consultez Calendrier d'exécution du pipeline.
Concepts avancés
Les professionnels du machine learning (ML) sont régulièrement confrontés à deux défis de mise à l'échelle lorsqu'ils entraînent des modèles : la mise à l'échelle de la taille du modèle et la mise à l'échelle des données d'entraînement. Bien que la taille et la complexité du modèle puissent améliorer la précision, il y a une limite à la taille du modèle que vous pouvez faire tenir dans un seul CPU ou GPU. En outre, la mise à l'échelle de la taille du modèle peut augmenter le volume de calculs et allonger les durées d'entraînement.
Tous les modèles ne gèrent pas la mise à l'échelle des données d'entraînement de la même façon, car ils doivent utiliser toutes les données d'entraînement dans la mémoire pour l'entraînement. La mise à l'échelle se fait verticalement seulement, et sur des types d'instances toujours plus grands. Dans la plupart des cas, la mise à l'échelle des données d'entraînement allonge les temps d'entraînement.
Le deep learning (DL) est une famille spécifique d'algorithmes ML composée de plusieurs couches de réseaux neuronaux artificiels. La méthode d'entraînement la plus courante est la méthode SGD (Stochastic Gradient Descent) par mini-lots. Dans la méthode SGD par mini-lots, le modèle est entraîné en effectuant de petits changements itératifs de ses coefficients dans la direction qui réduit son erreur. Ces itérations sont effectuées sur des sous-échantillons de taille égale du jeu de données d'entraînement appelés mini-lots. Pour chaque mini-lot, le modèle est exécuté dans chaque enregistrement du mini-lot, son erreur est mesurée et le gradient de l'erreur est estimé. Ensuite, le gradient moyen est mesuré sur tous les enregistrements du mini-lot et fournit une direction de mise à jour pour chaque coefficient du modèle. Une transmission complète sur le jeu de données d'entraînement est appelée époque. Les entraînements de modèle comprennent généralement plusieurs dizaines à plusieurs centaines d'époques. La méthode SGD par mini-lots présente plusieurs avantages : d'abord, sa conception itérative rend la durée d'entraînement théoriquement linéaire de la taille du jeu de données. Ensuite, dans un mini-lot donné, chaque enregistrement est traité individuellement par le modèle, sans autre communication entre enregistrements que la moyenne finale du gradient. Le traitement d'un mini-lot est donc particulièrement adapté à la parallélisation et à la distribution.
La parallélisation de l'entraînement SGD via la distribution des enregistrements d'un mini-lot sur différents périphériques informatiques est appelée entraînement distribué pour le parallélisme des données. C'est le paradigme de distribution DL le plus couramment utilisé. L'entraînement parallèle des données est une stratégie de distribution pertinente pour mettre à l'échelle la taille du mini-lot et le traiter plus rapidement. Cependant, l'entraînement parallèle des données s'accompagne de la complexité supplémentaire de devoir calculer la moyenne de gradient de mini-lots avec des gradients provenant de tous les employés et de la communiquer à tous les employés, une étape appelée allreduce (tout réduire). Cela peut provoquer un surdébit, dû à la mise à l'échelle du cluster d'entraînement, et pénaliser considérablement la durée d'entraînement s'il est mal mis en œuvre ou mis en œuvre sur des soustractions matérielles inappropriées.
La méthode SGD avec entraînement parallèle des données exige des développeurs qu'ils puissent toujours faire tenir au moins le modèle et un seul enregistrement dans un seul périphérique informatique, tel qu'un CPU ou GPU. Lorsque de très grands modèles sont entraînés, comme de grands transformateurs dans le traitement du langage naturel (NLP) ou des modèles de segmentation sur des images haute résolution, cela n'est pas toujours possible. Une autre façon de décomposer l'application consiste à partitionner le modèle entre plusieurs périphériques informatiques, une approche appelée entraînement distribué pour le parallélisme des modèles.