Optimisez les performances et réduisez vos coûts de formation en apprentissage approfondi avec AWS Trainium et Amazon SageMaker

Optimisez les performances et réduisez vos coûts de formation en apprentissage approfondi avec AWS Trainium et Amazon SageMaker

Nœud source: 2010875

Aujourd'hui, des dizaines de milliers de clients créent, forment et déploient des modèles d'apprentissage automatique (ML) à l'aide de Amazon Sage Maker pour propulser des applications qui ont le potentiel de réinventer leurs activités et l'expérience client. Ces modèles ML ont augmenté en taille et en complexité au cours des dernières années, ce qui a conduit à des précisions de pointe dans une gamme de tâches et a également fait passer le temps de formation de quelques jours à quelques semaines. En conséquence, les clients doivent faire évoluer leurs modèles sur des centaines, voire des milliers d'accélérateurs, ce qui les rend plus coûteux à former.

SageMaker est un service ML entièrement géré qui aide les développeurs et les data scientists à créer, former et déployer facilement des modèles ML. SageMaker propose déjà le choix le plus large et le plus complet d'offres de calcul comprenant des accélérateurs matériels pour la formation ML, y compris G5 (Nvidia A10G) instances et P4d (Nvidia A100) les instances.

Les exigences de calcul croissantes nécessitent une puissance de traitement plus rapide et plus rentable. Pour réduire davantage les temps de formation des modèles et permettre aux praticiens du ML d'itérer plus rapidement, AWS a innové en matière de puces, de serveurs et de connectivité des centres de données. Les nouvelles instances Trn1 optimisées par Formation AWS les puces offrent le meilleur rapport qualité-prix et la formation de modèle ML la plus rapide sur AWS, offrant jusqu'à 50 % de réduction des coûts pour former des modèles d'apprentissage en profondeur sur des instances comparables basées sur GPU sans aucune baisse de précision.

Dans cet article, nous montrons comment vous pouvez maximiser vos performances et réduire vos coûts en utilisant des instances Trn1 avec SageMaker.

Vue d'ensemble de la solution

Les tâches de formation SageMaker prennent en charge les instances ml.trn1, alimentées par des puces Trainium, spécialement conçues pour les applications de formation ML hautes performances dans le cloud. Vous pouvez utiliser des instances ml.trn1 sur SageMaker pour former des modèles de traitement du langage naturel (NLP), de vision par ordinateur et de recommandation sur un large éventail d'applications, tels que la reconnaissance vocale, la recommandation, la détection des fraudes, la classification des images et des vidéos et les prévisions. Les instances ml.trn1 comportent jusqu'à 16 puces Trainium, qui est une puce ML de deuxième génération construite par AWS après Inférence AWS. Les instances ml.trn1 sont les premières Cloud de calcul élastique Amazon (Amazon EC2) avec jusqu'à 800 Gbit/s de bande passante réseau Elastic Fabric Adapter (EFA). Pour un parallélisme efficace des données et des modèles, chaque instance ml.trn1.32xl dispose de 512 Go de mémoire à bande passante élevée, fournit jusqu'à 3.4 pétaflops de puissance de calcul FP16/BF16 et comprend NeuronLink, une interconnexion intra-instance à bande passante élevée et non bloquante. .

Trainium est disponible en deux configurations et peut être utilisé dans les régions USA Est (Virginie du Nord) et USA Ouest (Oregon).

Le tableau suivant résume les fonctionnalités des instances Trn1.

Taille d'instance trainium
Accélérateurs
Accélérateur
Mémoire
(GB)
vCPU Instance
Mémoire
(Gio)
Réseau
Bande passante
(Gbit/s)
ALE et
RDMA
Assistance
trn1.2xlarge 1 32 8 32 Jusqu'à 12.5 Non
trn1.32xlarge 16 512 128 512 800 Oui
trn1n.32xlarge (à venir) 16 512 128 512 1600 Oui

Voyons comment utiliser Trainium avec SageMaker avec un exemple simple. Nous formerons un modèle de classification de texte avec la formation SageMaker et PyTorch en utilisant la bibliothèque Hugging Face Transformers.

Nous utilisons l'ensemble de données Amazon Reviews, qui se compose d'avis provenant d'amazon.com. Les données couvrent une période de 18 ans, comprenant environ 35 millions d'avis jusqu'en mars 2013. Les avis incluent des informations sur les produits et les utilisateurs, des évaluations et un avis en texte clair. Le code suivant est un exemple du AmazonPolarity ensemble d'essai:

{
title':'Great CD', 'content':"My lovely Pat has one of the GREAT voices of her generation. I have listened to this CD for YEARS and I still LOVE IT. When I'm in a good mood it makes me feel better. A bad mood just evaporates like sugar in the rain. This CD just oozes LIFE. Vocals are jusat STUUNNING and lyrics just kill. One of life's hidden gems. This is a desert isle CD in my book. Why she never made it big is just beyond me. Everytime I play this, no matter black, white, young, old, male, female EVERYBODY says one thing ""Who was that singing ?""", 'label':1
}

Pour cet article, nous n'utilisons que les champs de contenu et d'étiquette. Le champ de contenu est une critique en texte libre et le champ d'étiquette est une valeur binaire contenant 1 ou 0 pour les critiques positives ou négatives, respectivement.

Pour notre algorithme, nous utilisons BERT, un modèle de transformateur pré-entraîné sur un large corpus de données anglaises de manière auto-supervisée. Ce modèle vise principalement à être affiné sur les tâches qui utilisent la phrase entière (potentiellement masquée) pour prendre des décisions, telles que la classification des séquences, la classification des jetons ou la réponse aux questions.

Détails d'implémentation

Commençons par examiner de plus près les différents composants impliqués dans la formation du modèle :

  • Formation AWS – À la base, chaque Instance Trainium a des appareils Trainium intégrés. Trn1.2xlarge a 1 appareil Trainium et Trn1.32xlarge a 16 appareils Trainium. Chaque appareil Trainium comprend un ordinateur (2 NeuronCore-v2), 32 Go de mémoire d'appareil HBM et NeuronLink pour une communication rapide entre appareils. Chaque NeuronCore-v2 se compose d'une unité de calcul hétérogène totalement indépendante avec des moteurs séparés (Tensor/Vector/Scalar/GPSIMD). Les GPSIMD sont des processeurs polyvalents entièrement programmables que vous pouvez utiliser pour implémenter des opérateurs personnalisés et les exécuter directement sur les moteurs NeuronCore.
  • Formation Amazon Sage Maker – SageMaker fournit une expérience de formation entièrement gérée pour former facilement des modèles sans avoir à se soucier de l'infrastructure. Lorsque vous utilisez SageMaker Training, il exécute tout ce qui est nécessaire pour une tâche de formation, comme le code, le conteneur et les données, dans une infrastructure de calcul distincte de l'environnement d'appel. Cela nous permet d'exécuter des expériences en parallèle et d'itérer rapidement. SageMaker fournit un SDK Python pour lancer des travaux de formation. L'exemple de cet article utilise le SDK Python SageMaker pour déclencher la tâche d'entraînement à l'aide de Trainium.
  • Neurone AWS – Étant donné que Trainium NeuronCore possède son propre moteur de calcul, nous avons besoin d'un mécanisme pour compiler notre code de formation. Le Neurone AWS Le compilateur prend le code écrit en Pytorch/XLA et l'optimise pour s'exécuter sur les appareils Neuron. Le compilateur Neuron est intégré dans le Deep Learning Container que nous utiliserons pour former notre modèle.
  • PyTorch/XLA - Ce Paquet Python utilise le compilateur d'apprentissage en profondeur XLA pour connecter le cadre d'apprentissage en profondeur PyTorch et des accélérateurs cloud comme Trainium. La création d'un nouveau réseau PyTorch ou la conversion d'un réseau existant pour qu'il s'exécute sur des appareils XLA ne nécessite que quelques lignes de code spécifique à XLA. Nous verrons pour notre cas d'utilisation quels changements nous devons apporter.
  • Formation distribuée – Pour exécuter la formation efficacement sur plusieurs NeuronCores, nous avons besoin d'un mécanisme pour distribuer la formation dans les NeuronCores disponibles. SageMaker prend en charge torchrun avec des instances Trainium, qui peuvent être utilisées pour exécuter plusieurs processus équivalents au nombre de NeuronCores dans le cluster. Cela se fait en transmettant le paramètre de distribution à l'estimateur SageMaker comme suit, qui démarre une formation distribuée parallèle de données où le même modèle est chargé dans différents NeuronCores qui traitent des lots de données distincts :
distribution={"torch_distributed": {"enabled": True}}

Changements de script nécessaires pour fonctionner sur Trainium

Examinons les modifications de code nécessaires pour adopter un script PyTorch standard basé sur GPU pour s'exécuter sur Trainium. À un niveau élevé, nous devons apporter les modifications suivantes :

  1. Remplacez les périphériques GPU par des périphériques Pytorch/XLA. Parce que nous utilisons la distribution de la torche, nous devons initialiser la formation avec XLA comme appareil comme suit :
    device = "xla"
    torch.distributed.init_process_group(device)

  2. Nous utilisons le backend distribué PyTorch/XLA pour relier les API distribuées PyTorch à la sémantique de communication XLA.
  3. Nous utilisons PyTorch/XLA MpDeviceLoader pour les pipelines d'ingestion de données. MpDeviceLoader permet d'améliorer les performances en superposant trois étapes : le traçage, la compilation et le chargement par lots de données sur l'appareil. Nous devons envelopper le chargeur de données PyTorch avec le MpDeviceDataLoader comme suit :
    train_device_loader = pl.MpDeviceLoader(train_loader, "xla")

  4. Exécutez l'étape d'optimisation à l'aide de l'API fournie par XLA, comme indiqué dans le code suivant. Cela consolide les gradients entre les cœurs et émet le calcul de l'étape du dispositif XLA.
    torch_xla.core.xla_model.optimizer_step(optimizer)

  5. Mappez les API CUDA (le cas échéant) aux API PyTorch génériques.
  6. Remplacez les optimiseurs fusionnés CUDA (le cas échéant) par des alternatives génériques PyTorch.

L'exemple complet, qui entraîne un modèle de classification de texte à l'aide de SageMaker et Trainium, est disponible dans les éléments suivants GitHub repo. Le fichier cahier Ajuster les transformateurs pour créer des modèles de classification à l'aide de SageMaker et Trainium.ipynb est le point d'entrée et contient des instructions étape par étape pour exécuter la formation.

Tests de référence

Dans le test, nous avons exécuté deux tâches de formation : une sur ml.trn1.32xlarge et une sur ml.p4d.24xlarge avec la même taille de lot, les mêmes données de formation et d'autres hyperparamètres. Pendant les tâches de formation, nous avons mesuré le temps facturable des tâches de formation SageMaker et calculé le rapport prix-performance en multipliant le temps nécessaire pour exécuter les tâches de formation en heures par le prix par heure pour le type d'instance. Nous avons sélectionné le meilleur résultat pour chaque type d'instance parmi plusieurs exécutions de tâches.

Le tableau suivant résume nos résultats de référence.

Modèle Type d'instance Prix ​​(par nœud * heure) Débit (itérations/s) ValidationPrécision Temps facturable (sec) Coût de la formation en $
Classement de base BERT ml.trn1.32xlarge 24.725 6.64 0.984 6033 41.47
Classement de base BERT ml.p4d.24xlarge 37.69 5.44 0.984 6553 68.6

Les résultats ont montré que l'instance Trainium coûte moins cher que l'instance P4d, offrant un débit et une précision similaires lors de la formation du même modèle avec les mêmes données d'entrée et paramètres de formation. Cela signifie que l'instance Trainium offre un meilleur rapport qualité-prix que les instances P4D basées sur GPU. Avec un exemple simple comme celui-ci, nous pouvons voir que Trainium offre un temps de formation environ 22 % plus rapide et jusqu'à 50 % de coûts en moins par rapport aux instances P4d.

Déployer le modèle entraîné

Après avoir formé le modèle, nous pouvons le déployer sur différents types d'instances tels que CPU, GPU ou AWS Inferentia. Le point clé à noter est que le modèle formé ne dépend pas de matériel spécialisé pour se déployer et faire des inférences. SageMaker fournit des mécanismes pour déployer un modèle entraîné à l'aide de mécanismes en temps réel ou par lots. L'exemple de bloc-notes dans le référentiel GitHub contient du code pour déployer le modèle formé en tant que point de terminaison en temps réel à l'aide d'une instance ml.c5.xlarge (basée sur le processeur).

Conclusion

Dans cet article, nous avons examiné comment utiliser Trainium et SageMaker pour configurer et former rapidement un modèle de classification qui permet d'économiser jusqu'à 50 % des coûts sans compromettre la précision. Vous pouvez utiliser Trainium pour un large éventail de cas d'utilisation qui impliquent une pré-formation ou un réglage fin des modèles basés sur Transformer. Pour plus d'informations sur la prise en charge de diverses architectures de modèles, reportez-vous à Directives d'ajustement de l'architecture du modèle.


À propos des auteurs

Arun Kumar Lokanatha est architecte principal de solutions ML au sein de l'équipe Amazon SageMaker Service. Il se concentre sur l'aide aux clients pour créer, former et migrer les charges de travail de production ML vers SageMaker à grande échelle. Il est spécialisé dans l'apprentissage en profondeur, en particulier dans le domaine de la PNL et du CV. En dehors du travail, il aime courir et faire de la randonnée.

Marc Yu est ingénieur logiciel chez AWS SageMaker. Il se concentre sur la construction de systèmes de formation distribués à grande échelle, l'optimisation des performances de formation et le développement de matériels de formation ml haute performance, y compris SageMaker trainium. Mark possède également une connaissance approfondie de l'optimisation de l'infrastructure d'apprentissage automatique. Dans ses temps libres, il aime faire de la randonnée et courir.

Omri Fuchs est responsable du développement logiciel chez AWS SageMaker. Il est le responsable technique responsable de la plate-forme de travail de formation SageMaker, se concentrant sur l'optimisation des performances de formation SageMaker et l'amélioration de l'expérience de formation. Il est passionné par les technologies de pointe en matière de ML et d'IA. Dans ses temps libres, il aime faire du vélo et de la randonnée.

Gal Ochri est chef de produit senior au sein de l'équipe Amazon SageMaker. Il a 7 ans d'expérience dans les outils, les frameworks et les services d'apprentissage automatique.

Horodatage:

Plus de Apprentissage automatique AWS