Exécutez PyTorch Lightning et PyTorch DDP natif sur Amazon SageMaker Training, avec Amazon Search PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Exécutez PyTorch Lightning et PyTorch DDP natif sur Amazon SageMaker Training, avec Amazon Search

Tant de données, si peu de temps. Les experts en apprentissage automatique (ML), les data scientists, les ingénieurs et les passionnés ont rencontré ce problème dans le monde entier. Du traitement du langage naturel à la vision par ordinateur, des tableaux aux séries chronologiques, et tout ce qui se trouve entre les deux, le problème séculaire de l'optimisation de la vitesse lors de l'exécution de données sur autant de GPU que possible a inspiré d'innombrables solutions. Aujourd'hui, nous sommes heureux d'annoncer des fonctionnalités pour les développeurs PyTorch utilisant des frameworks open source natifs, comme PyTorch Foudre ainsi que PyTorchDDP, qui rationalisera leur chemin vers le cloud.

Amazon Sage Maker est un service entièrement géré pour le ML, et la formation de modèles SageMaker est un environnement de calcul optimisé pour une formation haute performance à grande échelle. La formation de modèles SageMaker offre une expérience de formation à distance avec un plan de contrôle transparent pour former et reproduire facilement des modèles ML à hautes performances et à faible coût. Nous sommes ravis d'annoncer de nouvelles fonctionnalités dans le portefeuille de formation SageMaker qui rendent l'exécution de PyTorch à grande échelle encore plus facile et plus accessible :

  1. PyTorch Lightning peut maintenant être intégré à Bibliothèque parallèle de données distribuées de SageMaker avec une seule ligne de changement de code.
  2. Formation au modèle SageMaker prend désormais en charge PyTorch Distributed Data Parallel avec le backend NCCL, permettant aux développeurs de migrer vers SageMaker plus facilement que jamais.

Dans cet article, nous discutons de ces nouvelles fonctionnalités et apprenons également comment Amazon Search a exécuté PyTorch Lightning avec le backend de formation distribuée optimisé dans SageMaker pour accélérer le temps de formation des modèles.

Avant de plonger dans l'étude de cas Amazon Search, pour ceux qui ne sont pas familiers, nous aimerions donner quelques informations sur Bibliothèque parallèle de données distribuées de SageMaker. En 2020, nous avons développé et lancé une configuration de cluster personnalisée pour la descente de gradient distribuée à grande échelle qui augmente l'efficacité globale du cluster, introduite sur Amazon Science en tant que Hareng. Utilisant le meilleur des serveurs de paramètres et des topologies en anneau, SageMaker Distributed Data Parallel (SMDDP) est optimisé pour Cloud de calcul élastique Amazon (Amazon EC2) topologie de réseau, y compris EPT. Pour les clusters de plus grande taille, SMDDP est capable de fournir des améliorations de débit de 20 à 40 % par rapport à Horovod (TensorFlow) et PyTorch Distributed Data Parallel. Pour les petites tailles de cluster et les modèles pris en charge, nous recommandons le Compilateur de formation SageMaker, qui est capable de réduire le temps de travail global jusqu'à 50 %.

Pleins feux sur les clients : PyTorch Lightning sur le backend optimisé de SageMaker avec Amazon Search

Amazon Search est responsable de l'expérience de recherche et de découverte sur -. Il alimente l'expérience de recherche des clients à la recherche de produits à acheter sur Amazon. À un niveau élevé, Amazon Search crée un index pour tous les produits vendus sur Amazon.com. Lorsqu'un client entre une requête, Amazon Search utilise alors une variété de techniques de ML, y compris des modèles d'apprentissage en profondeur, pour faire correspondre les produits pertinents et intéressants à la requête du client. Ensuite, il classe les produits avant de montrer les résultats au client.

Les scientifiques d'Amazon Search ont utilisé PyTorch Lightning comme l'un des principaux cadres pour former les modèles d'apprentissage en profondeur qui alimentent le classement de la recherche en raison de ses fonctionnalités de convivialité ajoutées à PyTorch. SMDDP n'était pas pris en charge pour les modèles d'apprentissage en profondeur écrits dans PyTorch Lightning avant ce nouveau lancement de SageMaker. Cela a empêché les scientifiques d'Amazon Search qui préfèrent utiliser PyTorch Lightning de mettre à l'échelle leur formation de modèle à l'aide de techniques parallèles de données, ce qui a considérablement ralenti leur temps de formation et les a empêchés de tester de nouvelles expériences nécessitant une formation plus évolutive.

Les premiers résultats d'analyse comparative de l'équipe montrent un temps de formation 7.3 fois plus rapide pour un exemple de modèle lorsqu'il est formé sur huit nœuds par rapport à une ligne de base de formation à nœud unique. Le modèle de base utilisé dans ces analyses comparatives est un réseau de neurones perceptron multicouche avec sept couches denses entièrement connectées et plus de 200 paramètres. Le tableau suivant résume le résultat de l'analyse comparative sur les instances de formation ml.p3.16xlarge SageMaker.

Nombre d'instances Temps de formation (minutes) Formation
1 99 Baseline
2 55 1.8x
4 27 3.7x
8 13.5 7.3x

Ensuite, nous plongeons dans les détails des nouveaux lancements. Si vous le souhaitez, vous pouvez parcourir notre correspondant exemple de cahier.

Exécutez PyTorch Lightning avec la bibliothèque de formation distribuée SageMaker

Nous sommes heureux d'annoncer que SageMaker Data Parallel s'intègre désormais de manière transparente à PyTorch Lightning dans la formation SageMaker.

PyTorch Lightning est un framework open source qui simplifie l'écriture de modèles personnalisés dans PyTorch. À certains égards, similaire à ce que Keras a fait pour TensorFlow, ou même sans doute Hugging Face, PyTorch Lightning fournit une API de haut niveau avec des abstractions pour une grande partie des fonctionnalités de niveau inférieur de PyTorch lui-même. Cela inclut la définition du modèle, le profilage, l'évaluation, l'élagage, le parallélisme des modèles, les configurations d'hyperparamètres, l'apprentissage par transfert, etc.

Auparavant, les développeurs de PyTorch Lightning ne savaient pas comment migrer de manière transparente leur code de formation vers des clusters GPU SageMaker hautes performances. De plus, ils n'avaient aucun moyen de profiter des gains d'efficacité introduits par SageMaker Data Parallel.

Pour PyTorch Lightning, d'une manière générale, il devrait y avoir peu ou pas de modifications de code pour simplement exécuter ces API sur SageMaker Training. Dans les exemples de cahiers, nous utilisons le Stratégie DDPS ainsi que Plugin DDP méthodes.

Il y a trois étapes pour utiliser PyTorch Lightning avec SageMaker Data Parallel comme backend optimisé :

  1. Utilisez un support Conteneur d'apprentissage en profondeur AWS (DLC) comme image de base, ou créez éventuellement votre propre conteneur et installez vous-même le backend SageMaker Data Parallel. Assurez-vous que PyTorch Lightning est inclus dans vos packages nécessaires, par exemple avec un requirements.txt fichier.
  2. Apportez quelques modifications mineures au code de votre script de formation pour activer le backend optimisé. Ceux-ci inclus:
    1. Importez la bibliothèque SM DDP :
      import smdistributed.dataparallel.torch.torch_smddp
      

    2. Configurez l'environnement PyTorch Lightning pour SageMaker :
      from pytorch_lightning.plugins.environments.lightning_environment 
        import LightningEnvironment
      
      env = LightningEnvironment()
      env.world_size = lambda: int(os.environ["WORLD_SIZE"])
      env.global_rank = lambda: int(os.environ["RANK"])

    3. Si vous utilisez une version de PyTorch Lightning antérieure à 1.5.10, vous devrez ajouter quelques étapes supplémentaires.
      1. Tout d'abord, ajoutez la variable d'environnement :
        os.environ["PL_TORCH_DISTRIBUTED_BACKEND"] = "smddp"

      2. Deuxièmement, assurez-vous d'utiliser DDPPlugin, Plutôt que DDPStrategy. Si vous utilisez une version plus récente, que vous pouvez facilement paramétrer en plaçant le requirements.txt dans l' source_dir pour votre travail, ce n'est pas nécessaire. Voir le code suivant :
        ddp = DDPPlugin(parallel_devices=[torch.device("cuda", d) for d in range(num_gpus)], cluster_environment=env)

    4. Facultativement, définissez le backend de votre groupe de processus comme "smddp" dans l' DDPSTrategy objet. Cependant, si vous utilisez PyTorch Lightning avec le backend PyTorch DDP, qui est également pris en charge, supprimez simplement ce `process_group_backend` paramètre. Voir le code suivant :
      ddp = DDPStrategy(
        cluster_environment=env, 
        process_group_backend="smddp", 
        accelerator="gpu")

  3. Assurez-vous d'avoir une méthode de distribution notée dans l'estimateur, telle que distribution={"smdistributed":{"dataparallel":{"enabled":True} si vous utilisez le backend Herring, ou distribution={"pytorchddp":{"enabled":True}.
  • Pour une liste complète des paramètres appropriés dans le distribution paramètre, voir notre documentation ici.

Vous pouvez maintenant lancer votre tâche de formation SageMaker ! Vous pouvez lancer votre tâche d'entraînement via le SDK Python, Boto3, la console SageMaker, le Interface de ligne de commande AWS (AWS CLI) et d'innombrables autres méthodes. Du point de vue d'AWS, c'est une seule commande API: create-training-job. Que vous lanciez cette commande depuis votre terminal local, un AWS Lambda fonction, une Amazon SageMakerStudio notebook, un pipeline KubeFlow ou tout autre environnement de calcul dépend entièrement de vous.

Veuillez noter que l'intégration entre PyTorch Lightning et SageMaker Data Parallel n'est actuellement prise en charge que pour les nouvelles versions de PyTorch, à partir de 1.11. De plus, cette version est uniquement disponible dans les DLC AWS pour SageMaker à partir de PyTorch 1.12. Assurez-vous de pointer cette image comme base. Dans us-east-1, cette adresse est la suivante :

ecr_image = '763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-training:1.12.0-gpu-py38-cu113-ubuntu20.04-sagemaker'

Ensuite, vous pouvez étendre votre conteneur Docker en l'utilisant comme image de base, ou vous pouvez le transmettre en tant que variable dans le image_uri argument de la Estimateur de formation SageMaker.

En conséquence, vous pourrez exécuter votre code PyTorch Lightning sur les GPU optimisés de SageMaker Training, avec les meilleures performances disponibles sur AWS.

Exécuter PyTorch Distributed Data Parallel sur SageMaker

Le plus gros problème Parallèle de données distribuées PyTorch (DDP) résout est d'une simplicité trompeuse : la vitesse. Un bon cadre de formation distribué doit offrir stabilité, fiabilité et, plus important encore, d'excellentes performances à grande échelle. PyTorch DDP y parvient en fournissant aux développeurs Torch des API pour répliquer leurs modèles sur plusieurs périphériques GPU, dans des paramètres à nœud unique et à nœuds multiples. Le framework gère ensuite le partage de différents objets de l'ensemble de données d'apprentissage vers chaque copie de modèle, en calculant la moyenne des gradients pour chacune des copies de modèle afin de les synchroniser à chaque étape. Cela produit un modèle à la fin totale de la course d'entraînement complète. Le schéma suivant illustre ce processus.

PyTorch DDP est courant dans les projets qui utilisent de grands ensembles de données. La taille précise de chaque ensemble de données variera considérablement, mais une règle générale consiste à mettre à l'échelle les ensembles de données, les tailles de calcul et les tailles de modèle dans des rapports similaires. Aussi appelé lois d'échelle, la combinaison optimale de ces trois éléments est très sujette à débat et variera en fonction des applications. Chez AWS, basé sur le travail avec plusieurs clients, nous pouvons clairement voir les avantages des stratégies parallèles de données lorsqu'une taille globale d'ensemble de données est d'au moins quelques dizaines de Go. Lorsque les ensembles de données deviennent encore plus volumineux, la mise en œuvre d'un type de stratégie parallèle de données est une technique essentielle pour accélérer l'expérience globale et améliorer votre délai de rentabilisation.

Auparavant, les clients qui utilisaient PyTorch DDP pour la formation distribuée sur site ou dans d'autres environnements informatiques ne disposaient pas d'un cadre pour migrer facilement leurs projets vers SageMaker Training afin de tirer parti de GPU hautes performances avec un plan de contrôle transparent. Plus précisément, ils devaient soit migrer leur infrastructure parallèle de données vers SMDDP, soit développer et tester manuellement les fonctionnalités de PyTorch DDP sur SageMaker Training. Aujourd'hui, SageMaker Training est heureux d'offrir une expérience transparente aux clients qui intègrent leur code PyTorch DDP.

Pour l'utiliser efficacement, vous n'avez pas besoin d'apporter de modifications à vos scripts d'entraînement.

Vous pouvez voir ce nouveau paramètre dans le code suivant. Dans le distribution paramètre, ajoutez simplement pytorchddp et définir activé comme true.

estimator = PyTorch(
    base_job_name="pytorch-dataparallel-mnist",
    source_dir="code",
    entry_point = "my_model.py",
    ... 
    # Training using SMDataParallel Distributed Training Framework
    distribution = {"pytorchddp": {"enabled": "true"}}
)

Cette nouvelle configuration démarre avec les versions 2.102.0 du SDK SageMaker Python et la version 1.11 du DLC PyTorch.

Pour les développeurs PyTorch DDP qui connaissent le populaire course au flambeau framework, il est utile de savoir que cela n'est pas nécessaire sur l'environnement de formation SageMaker, qui offre déjà une tolérance aux pannes robuste. Cependant, pour minimiser les réécritures de code, vous pouvez utiliser un autre script de lancement qui exécute cette commande comme point d'entrée.

Désormais, les développeurs PyTorch peuvent facilement déplacer leurs scripts vers SageMaker, garantissant ainsi que leurs scripts et conteneurs peuvent s'exécuter de manière transparente dans plusieurs environnements de calcul.

Cela les prépare à, à l'avenir, profiter de Bibliothèques de formation distribuées de SageMaker qui fournissent des topologies de formation optimisées par AWS pour offrir jusqu'à 40 % d'améliorations d'accélération. Pour les développeurs PyTorch, il s'agit d'une seule ligne de code ! Pour le code PyTorch DDP, vous pouvez simplement définir le backend sur smddp dans l'initialisation (voir Modifier un script de formation PyTorch), comme indiqué dans le code suivant :

import smdistributed.dataparallel.torch.torch_smddp
import torch.distributed as dist
dist.init_process_group(backend='smddp')

Comme nous l'avons vu ci-dessus, vous pouvez également définir le backend de DDPStrategy à smddp lors de l'utilisation de Lightning. Cela peut entraîner jusqu'à 40 % d'accélérations globales pour les gros clusters ! Pour en savoir plus sur la formation distribuée sur SageMaker, consultez notre webinaire à la demande, soutenant ordinateurs portables, pertinent Documentationet papiers.

Conclusion

Dans cet article, nous avons introduit deux nouvelles fonctionnalités au sein de la famille SageMaker Training. Ceux-ci permettent aux développeurs PyTorch d'utiliser beaucoup plus facilement leur code existant sur SageMaker, à la fois PyTorch DDP et PyTorch Lightning.

Nous avons également montré comment Amazon Search utilise SageMaker Training pour former ses modèles d'apprentissage en profondeur, et en particulier PyTorch Lightning avec la bibliothèque collective optimisée SageMaker Data Parallel comme backend. Le passage à la formation distribuée dans l'ensemble a permis à Amazon Search d'atteindre des temps de train 7.3 fois plus rapides.


À propos des auteurs

Exécutez PyTorch Lightning et PyTorch DDP natif sur Amazon SageMaker Training, avec Amazon Search PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Emilie Webber a rejoint AWS juste après le lancement de SageMaker et essaie d'en parler au monde depuis ! En dehors de la création de nouvelles expériences ML pour les clients, Emily aime méditer et étudier le bouddhisme tibétain.

Exécutez PyTorch Lightning et PyTorch DDP natif sur Amazon SageMaker Training, avec Amazon Search PlatoBlockchain Data Intelligence. Recherche verticale. Aï. Karan Dhiman est ingénieur en développement logiciel chez AWS, basé à Toronto, Canada. Il est très passionné par l'espace d'apprentissage automatique et la création de solutions pour accélérer les charges de travail informatiques distribuées.

Exécutez PyTorch Lightning et PyTorch DDP natif sur Amazon SageMaker Training, avec Amazon Search PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Vishwa Karia est ingénieur en développement logiciel chez AWS Deep Engine. Ses intérêts se situent à l'intersection de l'apprentissage automatique et des systèmes distribués et elle est également passionnée par l'autonomisation des femmes dans la technologie et l'IA.

Exécutez PyTorch Lightning et PyTorch DDP natif sur Amazon SageMaker Training, avec Amazon Search PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Eiman Elnahrawy est un ingénieur logiciel principal chez Amazon Search qui dirige les efforts d'accélération, de mise à l'échelle et d'automatisation de l'apprentissage automatique. Son expertise couvre plusieurs domaines, notamment l'apprentissage automatique, les systèmes distribués et la personnalisation.

Horodatage:

Plus de Apprentissage automatique AWS