View a markdown version of this page

Conseils de configuration pour la bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA - Amazon SageMaker AI

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.

Conseils de configuration pour la bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA

Consultez les conseils suivants avant d'utiliser la bibliothèque de parallélisme distribué des données (SMDDP) de l' SageMaker IA. Cette liste contient des conseils qui s'appliquent à tous les cadres.

Prétraitement des données

Si vous prétraitez des données pendant l'entraînement à l'aide d'une bibliothèque externe qui utilise le processeur, vous risquez de rencontrer un goulot d'étranglement car AI SageMaker distributed data parallel utilise le processeur pour les opérations. AllReduce Pour réduire la durée d'entraînement, vous pouvez déplacer les étapes de pré-traitement vers une bibliothèque qui utilise des GPU ou en effectuant tous les pré-traitements avant l'entraînement.

Nœud simple ou nœuds multiples

Nous vous recommandons d'utiliser cette bibliothèque avec des nœuds multiples. Vous pouvez utiliser la bibliothèque avec une configuration multi-périphériques à hôte unique (par exemple, une instance de calcul ML unique avec plusieurs GPU), mais en utilisant deux nœuds ou plus, vous pouvez améliorer significativement les performances avec l'opération AllReduce de la bibliothèque. De plus, sur un hôte unique, NVLink contribue déjà à l'efficacité de l'opération AllReduce dans le nœud.

Déboguer l’efficacité de mise à l’échelle avec Debugger

Vous pouvez utiliser Amazon SageMaker Debugger pour surveiller et visualiser l'utilisation du processeur et du GPU ainsi que d'autres indicateurs intéressants pendant l'entraînement. Vous pouvez utiliser les règles intégrées de Debugger pour contrôler les problèmes liés à la performance de calcul, tels que CPUBottleneck, LoadBalancing et LowGPUUtilization. Vous pouvez spécifier ces règles avec les configurations du débogueur lorsque vous définissez un estimateur du SDK Amazon SageMaker Python. Si vous utilisez AWS CLI et AWS SDK pour Python (Boto3) pour vous entraîner sur l' SageMaker IA, vous pouvez activer Debugger comme indiqué dans Configurer le SageMaker débogueur à l'aide de l'API Amazon. SageMaker

Pour voir un exemple d'utilisation de Debugger dans le cadre d'une tâche de SageMaker formation, vous pouvez vous référer à l'un des exemples de blocs-notes du référentiel SageMaker Notebook Examples. GitHub Pour en savoir plus sur Debugger, consultez Amazon SageMaker Debugger.

Taille de lot

Dans l'entraînement distribué, la taille de lot augmente proportionnellement à l'ajout de nœuds. Pour améliorer la vitesse de convergence à mesure que vous ajoutez des nœuds à votre tâche d'entraînement et que vous augmentez la taille de lot globale, augmentez le taux d'apprentissage.

Pour cela, vous pouvez procéder à un échauffement progressif du taux d'apprentissage, le taux d'apprentissage passant d'une valeur faible à une valeur élevée à mesure que la tâche d'entraînement progresse. Cette élévation progressive évite une brusque augmentation du taux d'apprentissage et permet une convergence saine dès le début de l'entraînement. Par exemple, vous pouvez utiliser une règle de mise à l'échelle linéaire selon laquelle le taux d'apprentissage est également multiplié par k chaque fois que la taille du mini-lot est multipliée par k. Pour en savoir plus sur cette technique, consultez le document de recherche Accurate, Large Minibatch SGD : Training ImageNet in 1 Hour, Sections 2 and 3.

Options MPI personnalisées

La bibliothèque parallèle de données distribuées SageMaker AI utilise l'interface MPI (Message Passing Interface), une norme populaire pour gérer les communications entre les nœuds d'un cluster haute performance, et utilise la bibliothèque NCCL de NVIDIA pour la communication. GPU-level Lorsque vous utilisez la bibliothèque data parallel avec a TensorFlow ou PytorchEstimator, le conteneur correspondant configure l'environnement MPI et exécute la mpirun commande pour démarrer les tâches sur les nœuds du cluster.

Vous pouvez configurer des opérations MPI personnalisées à l'aide du paramètre custom_mpi_options dans l'Estimator. Tous mpirun les drapeaux transmis dans ce champ sont ajoutés à la mpirun commande et exécutés par l' SageMaker IA à des fins d'entraînement. Par exemple, pour définir le paramètre distribution d'un Estimator, vous pouvez exploiter la ressource suivante afin d'utiliser la variable NCCL_DEBUG pour imprimer la version NCCL au début du programme :

distribution = {'smdistributed':{'dataparallel':{'enabled': True, "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION"}}}

Utiliser Amazon FSx et configurer une capacité de stockage et de débit optimale

Lors de l'entraînement d'un modèle sur plusieurs nœuds avec un parallélisme de données distribué, il est fortement recommandé d'utiliser FSx for Lustre. Amazon FSx est un service de stockage évolutif et hautes performances qui prend en charge le stockage de fichiers partagés avec un débit plus rapide. En utilisant le stockage Amazon FSx à grande échelle, vous pouvez obtenir une vitesse de chargement de données plus rapide sur les employés.

En règle générale, avec le parallélisme de données distribué, vous vous attendez à ce que le débit total d'entraînement évolue de manière quasi linéaire avec le nombre de GPU. Cependant, si vous utilisez un stockage Amazon FSx sous-optimal, les performances d'entraînement peuvent ralentir en raison d'un faible débit Amazon FSx.

Par exemple, si vous utilisez le type de déploiement SCRATCH_2 du système de fichiers Amazon FSx avec une capacité de stockage minimale de 1,2 TiB, la capacité de débit est de 240. I/O MB/s Le stockage Amazon FSx fonctionne de manière à vous permettre d'attribuer des périphériques de stockage physiques, et plus il y a de périphériques attribués, plus le débit que vous obtenez est élevé. Le plus petit incrément de stockage pour le type SRATCH_2 est de 1,2 TiB, et le gain de débit correspondant est de 240. MB/s

Supposons que vous ayez un modèle à entraîner sur un cluster à 4 nœuds sur un jeu de données de 100 Go. Avec une taille de lot donnée optimisée pour le cluster, supposons que le modèle peut terminer une époque en 30 secondes environ. Dans ce cas, la I/O vitesse minimale requise est d'environ 3 GB/s (100 Go/30 s). Il s'agit apparemment d'une exigence de débit bien supérieure à 240 MB/s. Avec une capacité Amazon FSx aussi limitée, l'extension de votre tâche de formation distribuée à de plus grands clusters peut aggraver les problèmes de blocage ; le débit de formation des modèles peut s'améliorer ultérieurement à mesure que le cache s'accumule, mais le débit d'Amazon FSx peut toujours constituer un goulot d' I/O étranglement.

Pour atténuer ces problèmes de goulot d' I/O étranglement, vous devez augmenter la taille de stockage Amazon FSx afin d'obtenir une capacité de débit supérieure. Généralement, pour trouver un I/O débit optimal, vous pouvez tester différentes capacités de débit Amazon FSx, en attribuant un débit égal ou légèrement inférieur à votre estimation, jusqu'à ce que vous trouviez que cela est suffisant pour résoudre les problèmes de goulot d'étranglement. I/O Dans le cas de l'exemple susmentionné, un stockage Amazon FSx avec un GB/s débit de 2,4 et un cache RAM de 67 Go serait suffisant. Si le système de fichiers a un débit optimal, le débit d'entraînement du modèle doit atteindre son maximum immédiatement ou après la première époque de création du cache.

Pour en savoir plus sur l’augmentation des types de stockage et de déploiement Amazon FSx, consultez les pages suivantes de la documentation Amazon FSx pour Lustre :