Affinez GPT-J en utilisant un estimateur Amazon SageMaker Hugging Face et la bibliothèque de parallélisation de modèle.
Refine GPT-J using an Amazon SageMaker Hugging Face estimator and model parallelization library.
GPT-J est un modèle open-source de 6 milliards de paramètres publié par Eleuther AI. Le modèle est entraîné sur le Pile et peut effectuer diverses tâches de traitement de langage. Il peut prendre en charge une grande variété de cas d’utilisation, notamment la classification de texte, la classification de jetons, la génération de texte, la question-réponse, l’extraction d’entités, la synthèse, l’analyse de sentiment et bien d’autres. GPT-J est un modèle transformateur entraîné à l’aide du Mesh Transformer JAX de Ben Wang.
Dans ce post, nous présentons un guide et les meilleures pratiques pour entraîner de grands modèles de langage (LLMs) en utilisant la bibliothèque de parallélisme de modèle distribué d’Amazon SageMaker pour réduire le temps et le coût d’entraînement. Vous apprendrez comment entraîner facilement un modèle GPT-J de 6 milliards de paramètres sur SageMaker. Enfin, nous partageons les principales fonctionnalités du parallélisme de modèle distribué de SageMaker qui aident à accélérer le temps d’entraînement.
Réseaux de neurones transformateurs
Un réseau de neurones transformateur est une architecture d’apprentissage en profondeur populaire pour résoudre des tâches de séquence à séquence. Il utilise l’attention comme mécanisme d’apprentissage pour atteindre des performances proches de celles de l’homme. Certaines des autres propriétés utiles de l’architecture par rapport aux générations précédentes de modèles de traitement de langage naturel (NLP) comprennent la capacité de distribution, de mise à l’échelle et de pré-entraînement. Les modèles basés sur les transformateurs peuvent être appliqués à différents cas d’utilisation lorsqu’il s’agit de données textuelles, tels que la recherche, les chatbots, et bien d’autres. Les transformateurs utilisent le concept de pré-entraînement pour acquérir de l’intelligence à partir de grands ensembles de données. Les transformateurs pré-entraînés peuvent être utilisés tels quels ou affinés sur vos ensembles de données, qui peuvent être beaucoup plus petits et spécifiques à votre entreprise.
Hugging Face sur SageMaker
Hugging Face est une entreprise développant certaines des bibliothèques open-source les plus populaires fournissant des technologies de traitement de langage naturel de pointe basées sur des architectures de transformateurs. Les bibliothèques Hugging Face transformers, tokenizers et datasets fournissent des API et des outils pour télécharger et prédire en utilisant des modèles pré-entraînés dans plusieurs langues. SageMaker vous permet de former, d’affiner et d’exécuter des inférences en utilisant des modèles Hugging Face directement depuis son Hugging Face Model Hub en utilisant l’estimateur Hugging Face dans le SDK SageMaker. L’intégration facilite la personnalisation des modèles Hugging Face sur des cas d’utilisation spécifiques à un domaine. En coulisse, le SDK SageMaker utilise AWS Deep Learning Containers (DLC), qui sont un ensemble d’images Docker pré-construites pour la formation et le service des modèles proposés par SageMaker. Les DLC sont développés grâce à une collaboration entre AWS et Hugging Face. L’intégration offre également une intégration entre le SDK Hugging Face transformers et les bibliothèques de formation distribuée de SageMaker, vous permettant de mettre à l’échelle vos travaux de formation sur un cluster de GPU.
- Déployez Falcon-40B avec des DLC d’inférence de modèles volumineux sur Amazon SageMaker.
- Comment BrainPad favorise le partage interne de connaissances avec Amazon Kendra
- Comment Forethought économise plus de 66% sur les coûts des modèles d’IA générative en utilisant Amazon SageMaker
Aperçu de la bibliothèque de parallélisme de modèle distribué de SageMaker
Le parallélisme de modèle est une stratégie de formation distribuée qui partitionne le modèle d’apprentissage en profondeur sur de nombreux dispositifs, dans ou entre des instances. Les modèles d’apprentissage en profondeur (DL) avec plus de couches et de paramètres fonctionnent mieux dans des tâches complexes telles que la vision par ordinateur et le NLP. Cependant, la taille maximale du modèle qui peut être stocké dans la mémoire d’un seul GPU est limitée. Les contraintes de la mémoire GPU peuvent être des goulots d’étranglement lors de la formation de modèles DL de la manière suivante:
- Elles limitent la taille du modèle qui peut être formé car l’empreinte mémoire d’un modèle est proportionnelle au nombre de paramètres
- Elles réduisent l’utilisation du GPU et l’efficacité de la formation en limitant la taille de lot par GPU pendant la formation
SageMaker comprend la bibliothèque de parallélisme de modèle distribué pour aider à distribuer et à former efficacement des modèles DL sur de nombreux nœuds de calcul, surmontant les restrictions associées à la formation d’un modèle sur un seul GPU. De plus, la bibliothèque vous permet d’obtenir la formation distribuée la plus optimale en utilisant des dispositifs pris en charge par EFA, ce qui améliore les performances de communication inter-nœuds avec une faible latence, un débit élevé et une dérivation OS.
Parce que les grands modèles tels que GPT-J, avec des milliards de paramètres, ont une empreinte mémoire GPU qui dépasse une seule puce, il devient essentiel de les partitionner sur plusieurs GPU. La bibliothèque de parallélisme de modèle SageMaker (SMP) permet la partitionnement automatique de modèles sur plusieurs GPU. Avec le parallélisme de modèle SageMaker, SageMaker exécute un travail de profilage initial pour analyser les exigences de calcul et de mémoire du modèle. Ces informations sont ensuite utilisées pour décider comment le modèle est partitionné sur les GPU, afin de maximiser un objectif, tel que maximiser la vitesse ou minimiser l’empreinte mémoire.
Il prend également en charge la planification d’exécution de pipeline facultative afin de maximiser l’utilisation globale des GPU disponibles. La propagation des activations pendant la passe avant et des gradients pendant la passe arrière nécessite un calcul séquentiel, ce qui limite la quantité d’utilisation du GPU. SageMaker surmonte la contrainte de calcul séquentiel en utilisant le calendrier d’exécution de pipeline en divisant les mini-lots en micro-lots à traiter en parallèle sur différents GPU. Le parallélisme de modèle de SageMaker prend en charge deux modes d’exécution de pipeline :
- Simple pipeline – Ce mode termine le passage en avant pour chaque micro-batch avant de commencer le passage en arrière.
- Pipeline entrelacé – Dans ce mode, l’exécution en arrière des micro-batchs est priorisée chaque fois que possible. Cela permet une libération plus rapide de la mémoire utilisée pour les activations, utilisant ainsi la mémoire de manière plus efficace.
Parallélisme tensoriel
Les couches individuelles, ou nn.Modules
, sont divisées en périphériques utilisant le parallélisme tensoriel pour pouvoir fonctionner simultanément. L’exemple le plus simple de la façon dont la bibliothèque divise un modèle avec quatre couches pour atteindre un parallélisme tensoriel à deux voies ("tensor_parallel_degree": 2
) est illustré dans la figure suivante. Les couches de chaque réplique du modèle sont divisées en deux et distribuées entre deux GPU. Le degré de parallélisme de données est de huit dans cet exemple car la configuration de parallélisme de modèle comprend également "pipeline_parallel_degree": 1
et "ddp": True
. La bibliothèque gère la communication entre les répliques du modèle distribué tensoriel.
L’avantage de cette fonctionnalité est que vous pouvez choisir les couches ou le sous-ensemble de couches auxquels vous souhaitez appliquer le parallélisme tensoriel. Pour approfondir le parallélisme tensoriel et d’autres fonctionnalités d’économie de mémoire pour PyTorch, et apprendre comment configurer une combinaison de parallélisme de pipeline et tensoriel, voir Fonctionnalités étendues de la bibliothèque de parallélisme de modèle SageMaker pour PyTorch.
Parallélisme de données fragmenté SageMaker
Le parallélisme de données fragmenté est une technique d’entraînement distribué qui permet d’économiser de la mémoire en divisant l’état d’entraînement d’un modèle (paramètres de modèle, gradients et états d’optimiseur) sur les GPU d’un groupe de parallélisme de données.
Lorsque vous mettez à l’échelle votre travail d’entraînement sur un grand cluster de GPU, vous pouvez réduire l’empreinte mémoire par GPU du modèle en fragmentant l’état d’entraînement sur plusieurs GPU. Cela présente deux avantages : vous pouvez adapter des modèles plus volumineux qui seraient autrement en rupture de mémoire avec un parallélisme de données standard, ou vous pouvez augmenter la taille du lot en utilisant la mémoire GPU libérée.
La technique de parallélisme de données standard réplique les états d’entraînement sur les GPU du groupe de parallélisme de données et effectue une agrégation de gradients basée sur l’opération AllReduce. En effet, le parallélisme de données fragmenté introduit un compromis entre le coût de communication et l’efficacité de la mémoire GPU. L’utilisation du parallélisme de données fragmenté augmente le coût de communication, mais l’empreinte mémoire par GPU (à l’exclusion de l’utilisation de la mémoire due aux activations) est divisée par le degré de parallélisme de données fragmenté, de sorte que des modèles plus volumineux peuvent s’adapter à un cluster GPU.
SageMaker met en œuvre le parallélisme de données fragmenté via l’implémentation MiCS. Pour plus d’informations, voir Scaling linéairement l’entraînement de modèles gigantesques sur AWS.
Reportez-vous à Parallélisme de données fragmenté pour plus de détails sur la façon d’appliquer le parallélisme de données fragmenté à vos travaux d’entraînement.
Utilisez la bibliothèque de parallélisme de modèle SageMaker
La bibliothèque de parallélisme de modèle SageMaker est fournie avec le SDK Python SageMaker. Vous devez installer le SDK Python SageMaker pour utiliser la bibliothèque, et il est déjà installé sur les noyaux de carnet SageMaker. Pour que votre script d’entraînement PyTorch utilise les capacités de la bibliothèque SMP, vous devez apporter les modifications suivantes :
- Commencez par importer et initialiser la bibliothèque
smp
en utilisant l’appelsmp.init()
. - Une fois initialisé, vous pouvez envelopper votre modèle avec l’enveloppe
smp.DistributedModel
et utiliser l’objetDistributedModel
retourné à la place du modèle utilisateur. - Pour votre état d’optimiseur, utilisez l’enveloppe
smp.DistributedOptimizer
autour de l’optimiseur de votre modèle, permettant àsmp
d’enregistrer et de charger l’état de l’optimiseur. La logique de passage en avant et en arrière peut être abstraite en tant que fonction distincte et ajouter un décorateursmp.step
à la fonction. Essentiellement, le passage en avant et la rétropropagation doivent être exécutés à l’intérieur de la fonction avec le décorateursmp.step
placé dessus. Cela permet àsmp
de diviser l’entrée de tenseur dans la fonction en un certain nombre de micro-batchs spécifiés lors du lancement du travail d’entraînement. - Ensuite, nous pouvons déplacer les tenseurs d’entrée vers le GPU utilisé par le processus en cours en utilisant l’API
torch.cuda.set_device
suivi de l’appel API.to()
. - Enfin, pour la rétropropagation, nous remplaçons
torch.Tensor.backward
ettorch.autograd.backward
.
Voir le code suivant:
@smp.step
def train_step(model, data, target):
output = model(data)
loss = F.nll_loss(output, target, reduction="mean")
model.backward(Loss)
return output, loss
with smp.tensor_parallelism():
model = AutoModelForCausalLM.from_config(model_config)
model = smp.DistributedModel (model)
optimizer = smp. DistributedOptimizer(optimizer)
La bibliothèque de parallélisme de modèle SageMaker offre une prise en charge intégrée des modèles Hugging Face Transformer suivants:
- GPT-2, BERT et RoBERTa (disponibles dans la bibliothèque SMP v1.7.0 et ultérieure)
- GPT-J (disponible dans la bibliothèque SMP v1.8.0 et ultérieure)
- GPT-Neo (disponible dans la bibliothèque SMP v1.10.0 et ultérieure)
Meilleures pratiques pour l’optimisation des performances avec la bibliothèque SMP
Lors de la formation de grands modèles, considérez les étapes suivantes pour que votre modèle rentre dans la mémoire GPU avec une taille de lot raisonnable:
- Il est recommandé d’utiliser des instances avec une mémoire GPU plus élevée et une interconnexion à haute bande passante pour des performances, telles que les instances p4d et p4de.
- La division de l’état de l’optimiseur peut être activée dans la plupart des cas et sera utile lorsque vous avez plus d’une copie du modèle (parallélisme des données activé). Vous pouvez activer la division de l’état de l’optimiseur en définissant
"shard_optimizer_state": True
dans la configurationmodelparallel
. - Utilisez le pointage des activations, une technique permettant de réduire l’utilisation de la mémoire en effaçant les activations de certaines couches et en les recomputant lors d’un passage arrière de modules sélectionnés dans le modèle.
- Utilisez le déchargement d’activation, une fonctionnalité supplémentaire qui peut également réduire l’utilisation de la mémoire. Pour utiliser le déchargement d’activation, définissez
"offload_activations": True
dans la configurationmodelparallel
. Utilisez-le lorsque le pointage des activations et le parallélisme du pipeline sont activés et que le nombre de micro-lots est supérieur à un. - Activez le parallélisme des tenseurs et augmentez les degrés de parallélisme où le degré est une puissance de 2. Typiquement pour des raisons de performance, le parallélisme des tenseurs est restreint à l’intérieur d’un nœud.
Nous avons mené de nombreuses expériences pour optimiser la formation et l’ajustement de GPT-J sur SageMaker avec la bibliothèque SMP. Nous avons réussi à réduire le temps de formation de GPT-J pour une époque sur SageMaker de 58 minutes à moins de 10 minutes – six fois plus rapide par époque de formation. Il a fallu moins d’une minute pour l’initialisation, le téléchargement du modèle et de l’ensemble de données depuis Amazon Simple Storage Service (Amazon S3), le traçage et la partition automatique avec la GPU comme périphérique de traçage, et la formation d’une époque de 8 minutes en utilisant un parallélisme de tenseurs sur une instance ml.p4d.24xlarge, une précision FP16 et un estimateur Hugging Face SageMaker.
Pour réduire le temps de formation en tant que meilleure pratique, lors de la formation de GPT-J sur SageMaker, nous recommandons ce qui suit:
- Stockez votre modèle pré-entraîné sur Amazon S3
- Utilisez une précision FP16
- Utilisez la GPU comme périphérique de traçage
- Utilisez la partition automatique, le pointage des activations et la division de l’état de l’optimiseur:
auto_partition: True
shard_optimizer_state: True
- Utilisez le parallélisme des tenseurs
- Utilisez une instance de formation SageMaker avec plusieurs GPU telles que ml.p3.16xlarge, ml.p3dn.24xlarge, ml.g5.48xlarge, ml.p4d.24xlarge ou ml.p4de.24xlarge.
Formation et ajustement de modèles GPT-J sur SageMaker avec la bibliothèque SMP
Un exemple de code pas à pas fonctionnel est disponible dans le référentiel public Amazon SageMaker Examples. Accédez au dossier training/distributed_training/pytorch/model_parallel/gpt-j. Sélectionnez le dossier gpt-j
et ouvrez le notebook Jupyter train_gptj_smp_tensor_parallel_notebook.jpynb
pour l’exemple de parallélisme des tenseurs et train_gptj_smp_notebook.ipynb
pour l’exemple de parallélisme de pipeline. Vous pouvez trouver un guide de code dans notre atelier Generative AI sur Amazon SageMaker.
Ce notebook vous guide à travers l’utilisation des fonctionnalités de parallélisme de tenseurs fournies par la bibliothèque de parallélisme de modèle SageMaker. Vous apprendrez comment exécuter une formation FP16 du modèle GPT-J avec un parallélisme de tenseurs et un parallélisme de pipeline sur l’ensemble de données GLUE sst2.
Résumé
La bibliothèque de parallélisme de modèle SageMaker offre plusieurs fonctionnalités. Vous pouvez réduire les coûts et accélérer la formation des LLM sur SageMaker. Vous pouvez également apprendre et exécuter des codes d’exemple pour BERT, GPT-2 et GPT-J sur le dépôt public Amazon SageMaker Examples. Pour en savoir plus sur les bonnes pratiques AWS pour la formation des LLM en utilisant la bibliothèque SMP, consultez les ressources suivantes :
- Meilleures pratiques de parallélisme de modèle distribué SageMaker
- Formation de grands modèles de langage sur Amazon SageMaker : Meilleures pratiques
Pour découvrir comment l’un de nos clients a réalisé une inférence GPT-J à faible latence sur SageMaker, consultez Comment Mantium réalise une inférence GPT-J à faible latence avec DeepSpeed sur Amazon SageMaker.
Si vous cherchez à accélérer le temps de mise sur le marché de vos LLM et à réduire vos coûts, SageMaker peut vous aider. Faites-nous savoir ce que vous construisez !
We will continue to update IPGirl; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- AI Time Journal présente un eBook révolutionnaire sur les tendances de l’IA en 2023.
- Règles de base pour l’ère de la guerre de l’IA
- Robots de livraison de nourriture Uber Eats prêts à être utilisés dans plusieurs villes américaines.
- Les humains aident les ordinateurs à repérer les rafales de l’espace
- Vous pouvez fabriquer des filtres à dioxyde de carbone avec une imprimante 3D.
- Après une année difficile, Zuckerberg expose la feuille de route de Meta à ses employés.
- Algorithme utilise la caméra du téléphone pour détecter les niveaux d’oxygène dans le sang