Présentation de la bibliothèque de données parallèles distribuées de SageMaker - Amazon SageMaker

Présentation de la bibliothèque de données parallèles distribuées de SageMaker

Pourquoi utiliser la bibliothèque de données parallèles distribuées de SageMaker ?

La bibliothèque de données parallèles distribuées de SageMaker traite le surdébit de communication de deux façons :

  1. La bibliothèque effectue l'opération-clé AllReduce qui, pendant l'entraînement distribué, est responsable d'une grande partie du surdébit de communication.

  2. La bibliothèque effectue une communication nœud à nœud optimisée en exploitant à fond l'infrastructure réseau AWS et la topologie d'instance Amazon EC2.

Utilisez cette bibliothèque pour le parallélisme des données afin d'augmenter la vitesse jusqu'à 25 % dans les modèles d'entraînement du type BERT. Alors que des mises en œuvre telles que Horovod proposent des performances sub-linéaires à grande échelle, les performances de cette bibliothèque sont quasi linéaires à grande échelle. Autrement dit, vous réduisez à la fois la durée et le coût d'entraînement d'un modèle.

Note

Les bibliothèques d'entraînement distribué SageMaker sont uniquement disponibles via les conteneurs AWS Deep Learning Containers pour les cadres TensorFlow, PyTorch et HuggingFace sur la plateforme d'entraînement SageMaker. Pour utiliser les bibliothèques, vous devez utiliser le kit SDK Python SageMaker ou les API SageMaker via le kit SDK for Python (Boto3) ou la AWS Command Line Interface. La documentation contient des instructions et des exemples sur l'utilisation des bibliothèques d'entraînement distribué avec le kit SDK Python SageMaker.

Points de référence d'entraînement

PyTorch avec la bibliothèque pour le parallélisme des données de SageMaker

Avec le type d'instance p3dn.24xl et sur les clusters de 2, 4 et 8 nœuds :

  • BERT : lorsqu'elle est utilisée avec PyTorch, la bibliothèque SageMaker est 41 %, 52 % et 13 % plus rapide que Pytorch-DDP.

  • MaskrCNN : lorsqu'elle est utilisée avec PyTorch, la bibliothèque SageMaker est 4 %, 19 % et 15 % plus rapide que Pytorch-DDP.

Ces points de référence ont été exécutés sur PyTorch v1.6 avec des instances ml.p3dn.24xlarge. Vous pouvez trouver le code d'entraînement sur la page web d'exemples de SageMaker. La page web d'exemples contient également un code d'entraînement de référence pour ces modèles avec TensorFlow 2.3.

Utilisation optimale de la bande passante avec un tampon de fusion équilibré

La bibliothèque de données parallèles distribuées de SageMaker utilise un modèle de communication similaire aux serveurs de paramètres pour réduire la quantité de données transférées et le nombre d'étapes impliquées dans la moyenne des gradients à partir de plusieurs GPU. Elle utilise également une nouvelle technique appelée tampons de fusion équilibrés pour optimiser l'utilisation de la bande passante disponible sur tous les nœuds du cluster.

L'un des principaux inconvénients des serveurs de paramètres classiques est leur sous-utilisation de la bande passante réseau disponible. Les serveurs de paramètres traitent les variables comme des unités atomiques et placent chaque variable sur un serveur. Comme les gradients deviennent disponibles séquentiellement durant la transmission vers l'arrière, il se produit un déséquilibre à un instant donné dans le volume des données envoyées et reçues de différents serveurs. Certains serveurs ont une capacité d'envoi et de réception de données supérieure, d'autres une capacité inférieure, et d'autres une capacité nulle. Le problème s'aggrave avec l'augmentation du nombre de serveurs de paramètres.

La bibliothèque traite ces problèmes en introduisant des tampons de fusion équilibrés. Un tampon de fusion équilibré est un tampon qui, dans le GPU, maintient les gradients jusqu'à ce que la taille du tampon dépasse un seuil. Dans une configuration de N serveurs de paramètres, lorsque le tampon dépasse le seuil, le tampon de fusion équilibré est copié dans la mémoire du CPU, partitionné en N parties, dont la énième est envoyée au énième serveur de paramètres. Chaque serveur reçoit exactement le même nombre d'octets en provenance d'un tampon de fusion équilibré. Le énième serveur reçoit la énième partition du tampon de fusion équilibré de tous les employés, les résume et renvoie les résultats à tous les employés. Comme tous les serveurs participent équitablement à la moyenne de chaque tampon de fusion équilibré, la bande passante du serveur est utilisée efficacement.

Utilisation optimale du GPU avec chevauchement efficace d'une opération AllReduce avec une transmission vers l'arrière

La bibliothèque d'entraînement distribué SageMaker pour le parallélisme de données permet un chevauchement optimal de l'opération AllReduce avec la transmission vers l'arrière, ce qui améliore considérablement l'utilisation du GPU, permet d'obtenir une efficacité de mise à l'échelle quasi linéaire et accélère le temps d'entraînement en optimisant les tâches entre les CPU et les GPU. La bibliothèque effectue l'opération AllReduce en parallèle tandis que le GPU calcule les gradients, sans supprimer de cycles GPU, ce qui rend la bibliothèque plus rapide.

  • Exploitation des CPU : la bibliothèque utilise les CPU pour les gradients AllReduce, délestant ainsi les GPU de cette tâche.

  • Utilisation améliorée des GPU : les GPU du cluster se concentrent sur le calcul des gradients, améliorant leur utilisation tout au long de l'entraînement.

Architecture d'entraînement distribué SageMaker pour le parallélisme des données

La bibliothèque prend en charge des instances de calcul plus grandes, qui ont 8 GPU par nœud : ml.p3.16xlarge, ml.p3dn.24xlarge et ml.p4d.24xlarge. Le flux de haut niveau de la bibliothèque de données parallèles distribuées de SageMaker est le suivant :

  1. La bibliothèque affecte des classements aux GPU (employés).

  2. À chaque itération, la bibliothèque divise chaque lot global par le nombre total d'employés (taille mondiale) et affecte de petits lots (partitions de lots) aux employés.

    • Le lot global a une taille de (number of nodes in a cluster) * (number of GPUs per node) * (per batch shard).

    • Une partition de lot (petit lot) est un sous-ensemble du jeu de données affecté à chaque GPU (employé) par itération.

  3. La bibliothèque lance un script d'entraînement sur chaque employé.

  4. La bibliothèque gère les copies des poids et des gradients des modèles reçus des employés à la fin de chaque itération.

  5. La bibliothèque synchronise les poids et les gradients des modèles entre les employés afin d'agréger un seul modèle entraîné.

Le diagramme d'architecture qui suit est un exemple de la façon dont la bibliothèque configure le parallélisme des données pour un cluster de 3 nœuds.


        Diagramme d'architecture d'entraînement distribué SageMaker pour le parallélisme des données

Pour commencer à utiliser la bibliothèque de données parallèles distribuées de SageMaker, consultez Étape 2 : lancer une tâche d'entraînement distribuée SageMaker à l'aide du kit SDK Python SageMaker pour configurer un estimateur SageMaker via le Kit SDK Python Amazon SageMaker, et Exécuter une tâche d'entraînement distribués SageMaker avec un parallélisme des données pour adapter votre script d'entraînement à l'aide de la bibliothèque de données parallèles distribuées de SageMaker.