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.
Meilleures pratiques en matière d'informatique distribuée et d' SageMaker intelligence artificielle
Cette page de bonnes pratiques présente différentes variantes de l'informatique distribuée pour les tâches générales de machine learning (ML). Le terme informatique distribuée utilisé dans cette page englobe l'entraînement distribué pour les tâches de machine learning et le calcul parallèle pour le traitement des données, la génération de données, l'ingénierie des fonctionnalités et l'apprentissage par renforcement. Dans cette page, nous discutons des défis courants de l'informatique distribuée et des options disponibles en SageMaker matière de formation et de SageMaker traitement. Pour des documents de lecture supplémentaires sur l'informatique distribuée, consultez Qu'est-ce que l'informatique distribuée ?
Vous pouvez configurer les tâches ML pour qu'elles s'exécutent de manière distribuée sur plusieurs nœuds (instances), accélérateurs (NVIDIAGPUspuces AWS Trainium) et cœurs en V. CPU En exécutant l'informatique distribuée, vous pouvez atteindre divers objectifs tels que l'accélération des opérations de calcul, la gestion de grands jeux de données ou l'entraînement de grands modèles de machine learning.
La liste suivante décrit les défis courants auxquels vous pouvez être confronté lorsque vous exécutez un projet d'entraînement de machine learning à grande échelle.
-
Vous devez prendre des décisions sur la manière de répartir les calculs en fonction des tâches de machine learning, des bibliothèques logicielles que vous souhaitez utiliser et des ressources de calcul.
-
Les tâches de machine learning ne sont pas toutes simples à distribuer. De plus, toutes les bibliothèques de machine learning ne prennent pas en charge l'informatique distribuée.
-
L'informatique distribuée n'entraîne pas toujours une augmentation linéaire de l'efficacité du calcul. En particulier, vous devez déterminer si les E/S de données et les GPU communications entre elles présentent des goulots d'étranglement ou entraînent des surcharges.
-
L'informatique distribuée peut perturber les processus numériques et modifier la précision du modèle. En ce qui concerne l'entraînement des réseaux neuronaux de parallélisme de données, lorsque vous mettez à l'échelle la taille globale du lot tout en passant à un cluster de calcul plus important, vous devez également ajuster le taux d'apprentissage en conséquence.
SageMaker L'IA fournit des solutions de formation distribuées pour relever ces défis dans divers cas d'utilisation. Choisissez l'option, parmi les suivantes, la mieux adaptée à votre cas d'utilisation.
Rubriques
- Option 1 : utiliser un algorithme intégré à SageMaker l'IA qui prend en charge la formation distribuée
- Option 2 : exécuter un code ML personnalisé dans l'environnement de formation ou de traitement géré par l' SageMaker IA
- Option 3 : écrire votre propre code d'entraînement distribué personnalisé
- Option 4 : lancer plusieurs tâches en parallèle ou de manière séquentielle
Option 1 : utiliser un algorithme intégré à SageMaker l'IA qui prend en charge la formation distribuée
SageMaker L'IA fournit des algorithmes intégrés que vous pouvez utiliser immédiatement via la console SageMaker AI ou SageMaker PythonSDK. Grâce aux algorithmes intégrés, vous n'avez pas besoin de perdre du temps à personnaliser le code, à comprendre la science qui sous-tend les modèles ou à exécuter Docker sur des instances Amazon EC2 provisionnées.
Un sous-ensemble des algorithmes intégrés à l' SageMaker IA prend en charge la formation distribuée. Pour vérifier si l'algorithme de votre choix prend en charge l'entraînement distribué, consultez la colonne Parallélisable du tableau Informations communes aux algorithmes intégrés. Certains algorithmes prennent en charge la formation distribuée multi-instances, tandis que les autres algorithmes parallélisables prennent en charge la parallélisation sur plusieurs instances GPUs en une seule instance, comme indiqué dans la colonne Parallélisable.
Option 2 : exécuter un code ML personnalisé dans l'environnement de formation ou de traitement géré par l' SageMaker IA
SageMaker Les jobs d'IA peuvent instancier un environnement de formation distribué pour des cas d'utilisation et des frameworks spécifiques. Cet environnement agit comme un ready-to-use tableau blanc sur lequel vous pouvez apporter et exécuter votre propre code ML.
Si votre code de machine learning utilise un framework de deep learning
Vous pouvez lancer des tâches de formation distribuées à l'aide des Deep Learning Containers (DLC)
-
Les bibliothèques de formation distribuées par l' SageMaker IA
Les bibliothèques de formation distribuées basées sur l' SageMaker IA proposent un code AWS géré pour le parallélisme des données des réseaux neuronaux et le parallélisme des modèles. SageMaker La formation distribuée basée sur l'IA inclut également des clients de lancement intégrés au SageMaker PythonSDK, et vous n'avez pas besoin de créer du code de lancement parallèle. Pour en savoir plus, consultez la bibliothèque de parallélisme de données d'SageMaker AI et la bibliothèque de parallélisme de modèles d'SageMaker AI.
-
Bibliothèques d'entraînement distribué open source
Les frameworks open source ont leurs propres mécanismes de distribution tels que DistributedDataParallelism (DDP) in PyTorch
ou tf.distribute
modules in TensorFlow. Vous pouvez choisir d'exécuter ces cadres de formation distribués dans les conteneurs de cadres SageMaker gérés par l'IA. Par exemple, l'exemple de code pour entraîner Mask RCNN in SageMaker AImontre comment utiliser à la fois PyTorch DDP dans le conteneur du PyTorch framework SageMaker AI et Horovod dans le conteneur du SageMaker TensorFlow framework.
SageMaker Les conteneurs AI ML sont également MPI
Remarques pour la formation aux réseaux neuronaux parallèles aux données sur GPUs
-
Optez pour le parallélisme entre plusieurs machines GPU et plusieurs machines, le cas échéant
Nous exécutons souvent des tâches d'entraînement de réseaux neuronaux sur plusieurs CPU ou plusieurs GPU instances. Chaque instance GPU basée contient généralement plusieurs GPU appareils. Par conséquent, l'GPUinformatique distribuée peut se faire soit au sein d'une seule GPU instance avec plusieurs GPUs (GPUentraînement multiple à nœud unique), soit sur plusieurs GPU instances avec plusieurs GPU cœurs dans chacune (GPUentraînement multiple à nœuds multiples). L'entraînement en instance unique est plus facile à écrire du code et à déboguer, et le débit intra-nœud est généralement plus rapide que le GPU-to-GPU débit inter-nœuds. GPU-to-GPU Il est donc conseillé de commencer par dimensionner le parallélisme des données verticalement (utilisez une GPU instance avec plusieursGPUs) et de l'étendre à plusieurs GPU instances si nécessaire. Cela peut ne pas s'appliquer aux cas où le CPU budget est élevé (par exemple, une charge de travail massive pour le prétraitement des données) et lorsque le CPU-to-GPU ratio d'une GPU instance multiple est trop faible. Dans tous les cas, vous devez expérimenter différentes combinaisons de types d'instances en fonction de vos propres besoins d'entraînement au machine learning et de votre charge de travail.
-
Surveillance de la qualité de la convergence
Lors de l'entraînement d'un réseau neuronal avec le parallélisme des données, l'augmentation du nombre de GPUs tout en maintenant la taille du mini-lot par GPU constante entraîne une augmentation de la taille du mini-lot global pour le processus de descente par gradient stochastique par mini-lots (). MSGD La taille des mini-lots MSGD est connue pour avoir un impact sur le bruit de descente et la convergence. Pour une mise à l'échelle correcte tout en préservant la précision, vous devez ajuster d'autres hyperparamètres tels que le taux d'apprentissage [Goyal et al.
(2017)]. -
Surveillance des goulots d'étranglement des E/S
À mesure que vous augmentez le nombre deGPUs, le débit de stockage pour la lecture et l'écriture devrait également augmenter. Assurez-vous que votre source de données et votre pipeline ne deviennent pas des goulots d'étranglement.
-
Modification de votre script d'entraînement selon vos besoins
Les scripts d'entraînement écrits pour un GPU entraînement unique doivent être modifiés pour un GPU entraînement multi-nœuds. Dans la plupart des bibliothèques de parallélisme de données, la modification des scripts est nécessaire pour effectuer les opérations suivantes.
-
Attribuez des lots de données d'entraînement à chacunGPU.
-
Utilisez un optimiseur capable de gérer le calcul du gradient et les mises à jour des paramètres sur plusieurs niveaux. GPUs
-
Attribuez la responsabilité du point de contrôle à un hôte spécifique etGPU.
-
Si votre code de machine learning implique un traitement de données tabulaire
PySpark est une interface Python d'Apache Spark, un framework informatique distribué open source. PySpark a été largement adopté pour le traitement de données tabulaires distribuées pour les charges de travail de production à grande échelle. Si vous souhaitez exécuter du code de traitement des données tabulaire, pensez à utiliser les PySpark conteneurs de SageMaker traitement et à exécuter des tâches parallèles. Vous pouvez également exécuter des tâches de traitement des données en parallèle à l'aide de SageMaker Training and SageMaker Processing APIs dans Amazon SageMaker Studio Classic, qui est intégré à Amazon EMR
Option 3 : écrire votre propre code d'entraînement distribué personnalisé
Lorsque vous soumettez une tâche de formation ou de traitement à SageMaker AI, SageMaker Training and SageMaker AI Processing APIs lance des instances de EC2 calcul Amazon. Vous pouvez personnaliser l'environnement de formation et de traitement dans les instances en exécutant votre propre conteneur Docker ou en installant des bibliothèques supplémentaires dans les conteneurs AWS gérés. Pour plus d'informations sur Docker with SageMaker Training, consultez Adapter votre propre conteneur Docker pour qu'il fonctionne avec l' SageMaker IA et Créer un conteneur avec vos propres algorithmes et modèles. Pour plus d'informations sur Docker avec traitement par SageMaker IA, consultez Utiliser votre propre code de traitement.
Chaque environnement de travail de SageMaker formation contient un fichier de configuration à l'/opt/ml/input/config/resourceconfig.json
adresse, et chaque environnement de travail de SageMaker traitement contient un fichier de configuration similaire à l'adresse/opt/ml/config/resourceconfig.json
. Votre code peut lire ce fichier pour trouver hostnames
et établir des communications entre nœuds. Pour en savoir plus, notamment sur le schéma du JSON fichier, consultez Configuration de la formation distribuée et Comment Amazon SageMaker Processing configure votre conteneur de traitement. Vous pouvez également installer et utiliser des bibliothèques informatiques distribuées tierces telles que Ray
Vous pouvez également utiliser SageMaker Training and SageMaker Processing pour exécuter des calculs distribués personnalisés qui ne nécessitent pas de communication entre les travailleurs. Dans la littérature informatique, ces tâches sont souvent décrites comme des tâches dont la simultanéité pose problèmes ou ne rien partager. Les exemples incluent le traitement parallèle de fichiers de données, l'entraînement de modèles en parallèle sur différentes configurations ou l'exécution d'une inférence par lots sur une collection d'enregistrements. Vous pouvez facilement paralléliser de tels cas d'utilisation du partage sans rien partager avec Amazon AI. SageMaker Lorsque vous lancez une tâche d' SageMaker entraînement ou de SageMaker traitement sur un cluster comportant plusieurs nœuds, l' SageMaker IA réplique et lance par défaut votre code d'apprentissage (en Python ou Docker) sur tous les nœuds. Les tâches nécessitant une répartition aléatoire des données d'entrée sur de tels nœuds multiples peuvent être facilitées S3DataDistributionType=ShardedByS3Key
en définissant la configuration de saisie des données de l' SageMaker IA TrainingInput
API.
Option 4 : lancer plusieurs tâches en parallèle ou de manière séquentielle
Vous pouvez également répartir un flux de travail de calcul ML en tâches de calcul parallèles ou séquentielles plus petites, chacune étant représentée par sa propre tâche de SageMaker formation ou de SageMaker traitement. La division d'une tâche en plusieurs tâches peut être bénéfique dans les situations ou les tâches suivantes :
-
Lorsque vous disposez de canaux de données et d'entrées de métadonnées spécifiques (tels que les hyperparamètres, la configuration du modèle ou les types d'instance) pour chaque sous-tâche.
-
Lorsque vous implémentez des étapes de nouvelle tentative au niveau d'une sous-tâche.
-
Lorsque vous modifiez la configuration des sous-tâches au cours de la charge de travail, par exemple lors d'un entraînement sur l'augmentation de la taille des lots.
-
Lorsque vous devez exécuter une tâche de machine learning qui prend plus de temps que la durée d'entraînement maximale autorisée pour une seule tâche d'entraînement (28 jours maximum).
-
Lorsque les différentes étapes d'un flux de travail de calcul nécessitent différents types d'instances.
Dans le cas spécifique de la recherche d'hyperparamètres, utilisez SageMaker AI Automated Model Tuning. SageMaker AI Automated Model Tuning est un orchestrateur de recherche de paramètres sans serveur qui lance plusieurs tâches de formation en votre nom, selon une logique de recherche qui peut être aléatoire, bayésienne ou. HyperBand
En outre, pour orchestrer plusieurs tâches de formation, vous pouvez également envisager des outils d'orchestration de flux de travail, tels que SageMaker Pipelines