Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Formation distribuée sur Amazon SageMaker
SageMaker fournit des bibliothèques de formation distribuées et prend en charge diverses options de formation distribuées pour les tâches d'apprentissage profond telles que la vision par ordinateur (CV) et le traitement du langage naturel (NLP). Grâce à SageMaker ses bibliothèques de formation distribuées, vous pouvez exécuter des tâches de formation personnalisées hautement évolutives et économiques en parallèle avec les données et modéliser le deep learning en parallèle. Vous pouvez également utiliser d'autres frameworks et packages de formation distribués tels que PyTorch DistributedDataParallel (DDP)torchrun
, MPI (mpirun
) et un serveur de paramètres. Tout au long de la documentation, des instructions et des exemples se concentrent sur la façon de configurer les options de formation distribuées pour les tâches d'apprentissage profond à l'aide de SageMaker PythonSDK.
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 Informatique distribuée avec les SageMaker meilleures pratiques.
Avant de commencer
SageMaker La formation prend en charge la formation distribuée sur une seule instance ainsi que sur plusieurs instances, afin que vous puissiez exécuter des formations de toutes tailles à grande échelle. Nous vous recommandons d'utiliser les classes d'estimateur du framework telles que PyTorchCreateTrainingJob
API dans le backend, trouve la région dans laquelle se déroule votre session en cours et extrait l'un des conteneurs d'apprentissage AWS profond prédéfinis, préemballés avec un certain nombre de bibliothèques, notamment des cadres d'apprentissage profond, des cadres de formation distribués et le pilote. EFA Si vous souhaitez monter un système de FSx fichiers sur les instances de formation, vous devez transmettre votre identifiant de VPC sous-réseau et de groupe de sécurité à l'estimateur. Avant d'exécuter votre tâche de formation distribuée dans SageMaker, lisez les instructions générales suivantes sur la configuration de base de l'infrastructure.
Zones de disponibilité et fond de panier réseau
Lorsque vous utilisez plusieurs instances (également appelées nœuds), il est important de comprendre le réseau qui connecte les instances, comment elles lisent les données d'entraînement et comment elles partagent les informations entre elles. Par exemple, lorsque vous exécutez une tâche de formation parallèle aux données distribuée, un certain nombre de facteurs, tels que la communication entre les nœuds d'un cluster de calcul pour exécuter l'AllReduce
opération et le transfert de données entre les nœuds et le stockage des données dans Amazon Simple Storage Service ou Amazon FSx for Lustre, jouent un rôle crucial pour optimiser l'utilisation des ressources informatiques et accélérer la vitesse d'entraînement. Pour réduire les frais de communication, assurez-vous de configurer les instances, le VPC sous-réseau et le stockage des données dans la même Région AWS zone de disponibilité.
GPUinstances dotées d'un réseau plus rapide et d'un stockage à haut débit
Techniquement, vous pouvez utiliser n'importe quelle instance pour un entraînement distribué. Dans les cas où vous devez exécuter des tâches d'entraînement distribuées sur plusieurs nœuds pour entraîner de grands modèles, tels que les grands modèles de langage (LLMs) et les modèles de diffusion, qui nécessitent une commutation inter-nœuds plus rapide, nous vous recommandons d'utiliser des GPUinstances EFA compatibles
Commencez par une formation distribuée sur Amazon SageMaker
Si vous connaissez déjà l'entraînement distribué, choisissez l'option, parmi les suivantes, qui correspond à votre stratégie ou votre framework préférés pour commencer. Si vous souhaitez en savoir plus sur l'entraînement distribué en général, consultez Concepts de base de l'entraînement distribué.
Les bibliothèques de formation SageMaker distribuées sont optimisées pour l'environnement de SageMaker formation, aident à adapter vos tâches de formation distribuées et améliorent la vitesse et le débit de formation. SageMaker Les offrent des stratégies d'entraînement parallèle de données et de modèles. Ils combinent des technologies logicielles et matérielles pour améliorer les communications entre nœuds GPU et entre nœuds, et étendent les capacités SageMaker de formation grâce à des options intégrées qui nécessitent des modifications de code minimales dans vos scripts d'entraînement.
Utiliser la bibliothèque de parallélisme de données SageMaker distribué () SMDDP
La SMDDP bibliothèque améliore la communication entre les nœuds grâce à des implémentations AllReduce
et à des opérations de communication AllGather
collective optimisées pour l'infrastructure AWS réseau et la topologie des instances Amazon SageMaker ML. Vous pouvez utiliser la SMDDPbibliothèque en tant que backend de modules de formation distribués PyTorch basés sur des modules : PyTorch distributed data parallel (DDP)PyTorch
estimateur pour lancer une tâche de formation distribuée sur deux ml.p4d.24xlarge
instances.
from sagemaker.pytorch import PyTorch estimator = PyTorch( ..., instance_count=
2
, instance_type="ml.p4d.24xlarge
", # Activate distributed training with SMDDP distribution={ "pytorchddp": { "enabled": True } } # mpirun, activates SMDDP AllReduce OR AllGather # distribution={ "torch_distributed": { "enabled": True } } # torchrun, activates SMDDP AllGather # distribution={ "smdistributed": { "dataparallel": { "enabled": True } } } # mpirun, activates SMDDP AllReduce OR AllGather )
Pour savoir comment préparer votre script de formation et lancer une tâche de formation parallèle aux données distribuées sur SageMaker, consultezOrganisez une formation distribuée avec la bibliothèque de parallélisme de données SageMaker distribué.
Utiliser la bibliothèque de parallélisme du SageMaker modèle () SMP
SageMaker fournit la SMP bibliothèque et prend en charge diverses techniques de formation distribuées, telles que le parallélisme des données fragmentées, le pipeline, le parallélisme des tenseurs, le partitionnement de l'état de l'optimiseur, etc. Pour en savoir plus sur les offres de la SMP bibliothèque, consultezPrincipales fonctionnalités de la bibliothèque de parallélisme des SageMaker modèles.
Pour utiliser SageMaker la bibliothèque de parallélisme du modèle, configurez le distribution
paramètre des estimateurs du SageMaker framework. Les estimateurs de cadre pris en charge sont PyTorchml.p4d.24xlarge
.
from sagemaker.
framework
importFramework
distribution={ "smdistributed": { "modelparallel": { "enabled":True, "parameters": { ... # enter parameter key-value pairs here } }, }, "mpi": { "enabled" : True, ... # enter parameter key-value pairs here } } estimator =Framework
( ..., instance_count=2
, instance_type="ml.p4d.24xlarge
", distribution=distribution )
Pour savoir comment adapter votre script d'entraînement, configurer les paramètres de distribution dans la estimator
classe et lancer une tâche de formation distribuée, consultez la bibliothèque SageMaker de modèles de parallélisme (voir également Formation distribuée APIs
Utilisation des frameworks d'entraînement distribué open source
SageMaker prend également en charge les options suivantes pour fonctionner mpirun
et torchrun
dans le backend.
-
Pour utiliser PyTorch DistributedDataParallel (DDP)
dans SageMaker le mpirun
backend, ajoutez-ledistribution={"pytorchddp": {"enabled": True}}
à votre PyTorch estimateur. Pour plus d'informations, consultez également PyTorch Distributed Traininget SageMaker PyTorch Estimator's distribution
argument dans la documentation SageMaker Python SDK.Note
Cette option est disponible pour les versions PyTorch 1.12.0 et ultérieures.
from sagemaker.pytorch import PyTorch estimator = PyTorch( ..., instance_count=
2
, instance_type="ml.p4d.24xlarge
", distribution={"pytorchddp": {"enabled": True}} # runs mpirun in the backend ) -
SageMaker prend en charge le PyTorch
torchrun
lanceurpour la formation distribuée sur des EC2 instances Amazon GPU basées sur des instances Amazon, telles que P3 et P4, ainsi que Trn1 alimenté par l'appareil Trainium.AWS Pour utiliser PyTorch DistributedDataParallel (DDP)
dans SageMaker le torchrun
backend, ajoutez-ledistribution={"torch_distributed": {"enabled": True}}
à l' PyTorch estimateur.Note
Cette option est disponible pour les versions PyTorch 1.13.0 et ultérieures.
L'extrait de code suivant montre un exemple de création d'un SageMaker PyTorch estimateur pour exécuter un entraînement distribué sur deux
ml.p4d.24xlarge
instances avec l'option de distribution.torch_distributed
from sagemaker.pytorch import PyTorch estimator = PyTorch( ..., instance_count=
2
, instance_type="ml.p4d.24xlarge
", distribution={"torch_distributed": {"enabled": True}} # runs torchrun in the backend )Pour plus d'informations, consultez la section PyTorch Entraînement distribué
et distribution
argument de l'SageMaker PyTorch estimateurdans la documentation SageMaker Python SDK. Notes pour l'entrainement distribué sur Trn1
Une instance Trn1 comprend jusqu'à 16 appareils Trainium, et chaque appareil Trainium en comprend deux. NeuronCores
Pour les spécifications des appareils AWS Trainium, voir Architecture Trainium dans la documentation AWS Neuron. Pour vous entraîner sur les instances alimentées par Trainium, il vous suffit de spécifier le code d'instance Trn1
ml.trn1.*
, sous forme de chaîne à côté de l'instance_type
argument de la classe d'estimateur. SageMaker PyTorch Pour trouver les types d'instances Trn1 disponibles, consultez Architecture AWS Trn1dans la Documentation AWS Neuron (langue française non garantie). Note
SageMaker La formation sur les instances Amazon EC2 Trn1 est actuellement disponible uniquement pour le PyTorch framework AWS Deep Learning Containers for PyTorch Neuron à partir de la version 1.11.0. Pour obtenir la liste complète des versions prises en charge de PyTorch Neuron, consultez Neuron Containers
dans le référentiel AWS Deep Learning Containers GitHub . Lorsque vous lancez une tâche de formation sur des instances Trn1 à l'aide de SageMaker PythonSDK, il sélectionne et exécute SageMaker automatiquement le bon conteneur à partir des Neuron Containers
fournis par AWS Deep Learning Containers. Les conteneurs Neuron sont préemballés avec les paramètres et les dépendances de l'environnement de formation pour faciliter l'adaptation de votre tâche de formation à la plateforme de SageMaker formation et aux instances Amazon EC2 Trn1. Note
Pour exécuter votre tâche de PyTorch formation sur des instances Trn1 avec SageMaker, vous devez modifier votre script d'entraînement pour initialiser les groupes de processus avec le
xla
backend et utiliser/. PyTorch XLAPour soutenir le processus XLA d'adoption, le AWS Neuron SDK fournit PyTorch Neuron qui permet de convertir XLA les PyTorch opérations en instructions Trainium. Pour savoir comment modifier votre script d'entraînement, consultez le guide du développeur pour l'entraînement avec PyTorch Neuron ( torch-neuronx
)dans la documentation de AWS Neuron. Pour plus d'informations, consultez la section Entraînement distribué avec PyTorch Neuron sur les instances Trn1
et l'argument de l'SageMaker PyTorch estimateur distribution
dans la documentation Python. SageMaker SDK -
Pour l'utiliser MPI dans SageMaker, ajoutez-le
distribution={"mpi": {"enabled": True}}
à votre estimateur. L'option de MPI distribution est disponible pour les frameworks suivants : MXNet PyTorch, et TensorFlow. -
Pour utiliser un serveur de paramètres dans SageMaker, ajoutez-le
distribution={"parameter_server": {"enabled": True}}
à votre estimateur. L'option de serveur de paramètres est disponible pour les frameworks suivants :MXNet, PyTorch, et TensorFlow.Astuce
Pour plus d'informations sur l'utilisation des options du serveur de paramètres MPI et par framework, utilisez les liens suivants vers la SDKdocumentation SageMaker Python.
-
MXNetFormation distribuée
et argument de l'SageMaker MXNetestimateur distribution
-
PyTorch Formation distribuée
et argument de l'SageMaker PyTorch estimateur distribution
-
TensorFlow Formation distribuée
et argument de l'SageMaker TensorFlow estimateur . distribution
-
Concepts de base de l'entraînement distribué
SageMakerles bibliothèques de formation distribuées utilisent les termes et fonctionnalités de formation distribuée 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 globale du lot : nombre d'enregistrements sélectionnés dans l'ensemble de données d'apprentissage à chaque itération à envoyer GPUs au 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 SageMaker la bibliothèque de parallélisme de modèles distribués, chaque microlot est introduit dans le pipeline de formation one-by-one et suit un calendrier d'exécution défini par le moteur 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 GPUs
-
Instances : une instance de calcul basée sur le AWS machine learning
. Les instances sont également appelées nœuds. -
Taille du cluster : lorsque vous utilisez SageMaker la bibliothèque de formation distribuée, il s'agit du nombre d'instances multiplié par le nombre de GPUs dans chaque instance. Par exemple, si vous utilisez deux instances ml.p3.8xlarge dans une tâche de formation, qui en ont 4 GPUs chacune, la taille du cluster est de 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 de formation SageMaker distribuée est conçue pour optimiser la communication entre les instances de calcul Amazon EC2 ML, afin d'augmenter l'utilisation des appareils et d'accélérer les temps de formation.
Solutions d'entraînement distribué
-
Parallélisme des données : stratégie de formation distribuée dans le cadre de laquelle un ensemble de données de formation est divisé GPUs en plusieurs au sein d'un cluster de calcul composé de plusieurs instances Amazon EC2 ML. Chacun GPU contient une réplique du modèle, reçoit différents lots de données d'entraînement, effectue un passage en avant et en arrière et partage les mises à jour du poids avec les autres nœuds à des fins de synchronisation avant de passer au lot suivant et, finalement, à une autre époque.
-
Parallélisme des modèles : stratégie de formation distribuée selon laquelle le modèle est partitionné GPUs en plusieurs au sein d'un cluster de calcul composé de plusieurs instances Amazon EC2 ML. 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. Chacune 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'GPUutilisation et de temps de formation, dépend fortement de la manière dont le modèle est partitionné et du calendrier d'exécution utilisé pour effectuer des passes en avant et en 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 pipeline est une technique permettant d'obtenir une véritable parallélisation dans le parallélisme des modèles et de surmonter la perte de performance due au calcul séquentiel en effectuant le GPUs calcul simultanément sur différents échantillons de données. Pour en savoir plus, consultez Calendrier d'exécution du pipeline.
Concepts avancés
Les professionnels du Machine Learning (ML) sont généralement confrontés à deux défis de mise à l'échelle lorsqu'ils forment des modèles : la mise à l'échelle de la taille du modèle et la mise à l'échelle des données de formation. Bien que la taille et la complexité du modèle puissent améliorer la précision, il existe une limite à la taille du modèle que vous pouvez intégrer dans un seul CPU ouGPU. 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 consiste à utiliser la descente stochastique à gradient par mini-lots (). SGD En mini-batchSGD, le modèle est entraîné en effectuant de petites modifications itératives de ses coefficients dans le sens de la réduction de 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. Le mini-batch SGD présente plusieurs avantages : tout d'abord, sa conception itérative rend le temps d'apprentissage théoriquement linéaire par rapport à 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'SGDentraînement en distribuant les enregistrements d'un mini-lot sur différents appareils informatiques est appelée entraînement distribué en parallèle avec les données. Il s'agit du 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.
Data parallel nécessite SGD toujours que les développeurs soient capables d'intégrer au moins le modèle et un seul enregistrement dans un appareil informatique, tel qu'un seul CPU ouGPU. Lorsque vous entraînez de très grands modèles tels que de grands transformateurs en traitement automatique du langage (NLP) ou des modèles de segmentation sur des images haute résolution, cela peut s'avérer impossible dans certaines situations. 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.
Stratégies
L'entraînement distribué est généralement divisé en deux approches : le parallélisme des données et le parallélisme des modèles. Le data parallel est l'approche la plus courante en matière de formation distribuée : vous disposez d'un grand nombre de données, vous les regroupez et vous envoyez des blocs de données à plusieurs CPUs ou GPUs (nœuds) pour qu'ils soient traités par le réseau neuronal ou l'algorithme ML, puis vous combinez les résultats. Le réseau neuronal est le même sur chaque nœud. L'approche de parallélisme des modèles est utilisée avec de grands modèles qui ne tiennent pas d'un seul tenant dans la mémoire d'un nœud. Elle décompose le modèle et en place les différentes parties sur différents nœuds. Dans ce cas, vous devez envoyer vos lots de données vers chaque nœud afin que les données de toutes les parties du modèle soient traitées.
Les termes réseau et modèle sont souvent utilisés de façon interchangeable : un grand modèle est en fait un grand réseau comprenant une multitude de couches et de paramètres. L'entraînement avec un grand réseau produit un grand modèle, et le chargement du modèle sur le réseau avec tous vos paramètres préentraînés et leurs poids charge un grand modèle dans la mémoire. Lorsque vous décomposez un modèle pour le diviser entre les nœuds, vous décomposez également le réseau sous-jacent. Un réseau se compose de couches, et pour diviser le réseau, vous placez des couches sur différents périphériques de calcul.
Un écueil courant lié à la division naïve des couches entre les appareils est une grave sous-utilisation. GPU L'entraînement est intrinsèquement séquentiel dans les passes avant et arrière, et à un moment donné, un seul GPU peut calculer activement, tandis que les autres attendent que les activations soient envoyées. Les bibliothèques parallèles de modèles modernes résolvent ce problème en utilisant des calendriers d'exécution de pipeline pour améliorer l'utilisation des périphériques. Cependant, seule la bibliothèque SageMaker de modèles parallèles distribués d'Amazon inclut le fractionnement automatique des modèles. Les deux principales caractéristiques de la bibliothèque, la division automatique des modèles et le calendrier d'exécution du pipeline, simplifient le processus de mise en œuvre du parallélisme des modèles en prenant des décisions automatisées conduisant à une utilisation efficace des périphériques.
Entraînement avec le parallélisme de données et le parallélisme de modèles
Si vous entraînez avec un jeu de données volumineux, commencez par une approche de parallélisme des données. Si vous manquez de mémoire pendant l'entraînement, vous pouvez passer à une approche de parallélisme des modèles ou essayer un modèle hybride et un parallélisme des données. Vous pouvez également procéder comme suit pour améliorer vos performances avec le parallélisme des données :
-
Modifiez les hyperparamètres de votre modèle.
-
Réduisez la taille du lot.
-
Continuez à réduire la taille du lot jusqu'à ce qu'il tienne. Si vous réduisez la taille du lot à 1 et que vous manquez toujours de mémoire, essayez l'entraînement pour le parallélisme des modèles.
Essayez la compression en dégradé (FP16,INT8) :
-
Sur le matériel NVIDIA TensorCore équipé, l'utilisation d'un entraînement de précision mixte
permet à la fois d'accélérer et de réduire la consommation de mémoire. -
SageMakerde la bibliothèque de parallélisme de données distribué est prête à l'emploi avec Automatic Mixed Precision (AMP). Aucune action supplémentaire n'est nécessaire pour activer AMP autre que les modifications apportées au niveau du framework à votre script d'entraînement. Si des dégradés sont présentsFP16, la bibliothèque de parallélisme de SageMaker données exécute son
AllReduce
opération dans. FP16 Pour plus d'informations sur la mise AMP APIs en œuvre de votre script d'entraînement, consultez les ressources suivantes :-
Frameworks : PyTorch
dans la documentation sur les performances du NVIDIA Deep Learning -
Frameworks : TensorFlow
dans la documentation sur les performances du NVIDIA Deep Learning -
Précision mixte automatique pour le deep learning
dans les documents NVIDIA destinés aux développeurs -
Découvrez la précision mixte PyTorch automatique native pour un entraînement plus rapide sur NVIDIA GPUs
le PyTorch blog -
TensorFlow précision mitigée APIs
dans la TensorFlowdocumentation
-
Essayez de réduire la taille d'entrée :
-
Réduisez la longueur de la NLP séquence si vous augmentez le lien de séquence, si vous devez ajuster la taille du lot à la baisse ou GPUs augmenter pour répartir le lot.
-
Réduisez la résolution d'image.
Vérifiez si vous utilisez la normalisation par lots, car cela peut affecter la convergence. Lorsque vous utilisez la formation distribuée, votre lot est divisé GPUs et une taille de lot beaucoup plus faible peut entraîner un taux d'erreur plus élevé, empêchant ainsi le modèle de converger. Par exemple, si vous avez prototypé votre réseau sur un seul lot GPU avec une taille de lot de 64, puis que vous l'avez étendu à quatre p3dn.24xlarge, vous en avez désormais 32 GPUs et votre taille par lot passe de 64 à 2. GPU Cela va probablement affecter la convergence qui était possible avec un seul nœud.
Commencez par un entraînement pour le parallélisme des modèles lorsque :
-
votre modèle ne tient pas dans un seul périphérique ;
-
En raison de la taille de votre modèle, le choix de lots plus importants est limité, par exemple si le poids de votre modèle occupe la majeure partie de votre GPU mémoire et que vous êtes obligé de choisir une taille de lot plus petite et sous-optimale.
Pour en savoir plus sur les bibliothèques SageMaker distribuées, consultez les rubriques suivantes :
Optimisation de l'entraînement distribué
Personnalisez les hyperparamètres de votre cas d'utilisation et de vos données afin d'obtenir la meilleure efficacité de mise à l'échelle. Dans la discussion qui suit, nous mettons en évidence certaines des variables de formation les plus importantes et fournissons des références aux state-of-the-art implémentations afin que vous puissiez en savoir plus sur les options qui s'offrent à vous. En outre, nous vous recommandons de consulter la documentation d'entraînement distribué de votre cadre préféré.
Taille de lot
SageMaker les boîtes à outils distribuées vous permettent généralement de vous entraîner sur des lots plus importants. Par exemple, si un modèle tient dans un seul périphérique mais ne peut être entraîné qu'avec un lot de petite taille, un entraînement pour le parallélisme des modèles ou des données vous permet d'expérimenter des lots de plus grande taille.
N'oubliez pas que la taille du lot influe directement sur la précision du modèle en contrôlant la quantité de bruit dans la mise à jour du modèle à chaque itération. L'augmentation de la taille du lot réduit la quantité de bruit dans l'estimation du gradient, ce qui peut être avantageux en cas d'augmentation à partir de lots de très petite taille, mais peut entraîner une dégradation de la précision du modèle à mesure que la taille du lot augmente pour atteindre des valeurs élevées.
Astuce
Ajustez vos hyperparamètres pour vous assurer que l'entraînement de votre modèle tend vers une convergence satisfaisante à mesure que la taille du lot augmente.
Certaines techniques ont été développées afin d'assurer une bonne convergence des modèles lorsque la taille du lot augmente.
Taille du mini-lot
DansSGD, la taille du mini-lot quantifie la quantité de bruit présente dans l'estimation du gradient. Un mini-lot de petite taille produit un gradient de mini-lot très bruyant, ce qui n'est pas représentatif du gradient réel sur le jeu de données. Un mini-lot de grande taille produit un gradient de mini-lot proche du gradient réel sur le jeu de données et potentiellement pas assez bruyant, de sorte qu'il risque de rester verrouillé dans des minima non pertinents.
Pour en savoir plus sur ces techniques, consultez les articles suivants :
-
Minilot précis et de grande taille : entraînement SGD en ImageNet 1 heure,
Goya et al. -
PowerAI DDL
, Cho et coll. -
ImageNet Entraînement en quelques minutes
, You et coll. -
Entraînement en lots grand format de réseaux convolutionnaires
, Vous et autres. -
Optimisation des lots à grande échelle pour le deep learning : formation BERT en 76 minutes
, You et al. -
Optimisation accélérée du BERT préentraînement par grands lots en 54 minutes
, Zheng et al. -
Compression du gradient profond
, Lin et autres.
Scénarios
Les sections suivantes décrivent les scénarios dans lesquels vous souhaiterez peut-être étendre la formation, ainsi que la manière dont vous pouvez le faire en utilisant AWS les ressources.
Passer d'une solution unique GPU à plusieurs GPUs
La quantité de données ou la taille du modèle utilisé en machine learning peut créer des situations où le temps d'entraînement d'un modèle est supérieur au temps dont vous disposez. Parfois, le format du modèle ou le volume des données rend l'entraînement impossible. L'une des solutions consiste à augmenter le nombre GPUs que vous utilisez pour la formation. Sur une instance comportant plusieursGPUs, comme une instance p3.16xlarge
qui en a huitGPUs, les données et le traitement sont répartis sur les huitGPUs. L'utilisation de bibliothèques d'entraînement distribué peut accélérer de façon quasi linéaire le temps nécessaire à l'entraînement de votre modèle. Cela prend un peu plus d'un huitième du temps que cela aurait pris p3.2xlarge
avec unGPU.
Type d’instance | GPUs |
---|---|
p3.2xlarge | 1 |
p3.8xlarge | 4 |
p3.16xlarge | 8 |
p3dn.24xlarge | 8 |
Note
Les types d'instances ml utilisés par l' SageMaker entraînement ont le même nombre GPUs de types d'instances p3 correspondants. Par exemple, ml.p3.8xlarge
a le même nombre GPUs que p3.8xlarge
- 4.
Mise à l'échelle d'une seule instance à plusieurs instances
Pour augmenter la mise à l'échelle de votre entraînement, vous pouvez utiliser plus d'instances. Vous devrez toutefois choisir un type d'instance plus grand avant d'ajouter d'autres instances. Consultez le tableau précédent pour savoir combien il GPUs y en a dans chaque type d'instance p3.
Si vous êtes passé d'un simple GPU sur un p3.2xlarge
à quatre GPUs sur unp3.8xlarge
, mais que vous décidez que vous avez besoin de plus de puissance de traitement, vous pouvez obtenir de meilleures performances et réduire les coûts si vous en choisissez un p3.16xlarge
avant d'essayer d'augmenter le nombre d'instances. Selon les bibliothèques que vous utilisez, en continuant votre entraînement sur une seule instance, vous améliorez les performances et réduisez les coûts par rapport à un scénario à plusieurs instances.
Lorsque vous êtes prêt à augmenter le nombre d'instances, vous pouvez le faire avec SDK estimator
la fonction SageMaker Python en définissant votreinstance_count
. Vous pouvez, par exemple, définir instance_type = p3.16xlarge
et instance_count =
2
. Au lieu de huit GPUs sur un seulp3.16xlarge
, vous en avez 16 GPUs sur deux instances identiques. Le graphique suivant montre le dimensionnement et le débit, en commençant par huit GPUs
Scripts d'entraînement personnalisés
Tout en SageMaker simplifiant le déploiement et la mise à l'échelle du nombre d'instancesGPUs, la gestion des données et des résultats peut s'avérer très difficile, selon le framework de votre choix. C'est pourquoi des bibliothèques de support externes sont souvent utilisées. Cette forme la plus élémentaire de formation distribuée nécessite la modification de votre script d'entraînement pour gérer la distribution des données.
SageMaker prend également en charge Horovod et les implémentations de formations distribuées natives à chaque framework d'apprentissage profond majeur. Si vous choisissez d'utiliser des exemples issus de ces frameworks, vous pouvez suivre SageMaker le guide des conteneurs pour les Deep Learning Containers, ainsi que divers exemples de blocs-notes