View a markdown version of this page

Informatique distribuée avec les meilleures pratiques d' 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.

Informatique distribuée avec les meilleures pratiques d' SageMaker IA

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 abordons les défis courants liés à l'informatique distribuée et les options disponibles en SageMaker matière de formation et SageMaker de 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 de machine learning pour qu'elles s'exécutent de manière distribuée sur plusieurs nœuds (instances), accélérateurs (GPU NVIDIA, puces AWS Trainium) et cœurs de processeurs virtuels. 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 données I/O et les communications entre processeurs graphiques présentent des problèmes ou entraînent des coûts.

  • 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.

Option 1 : utiliser un algorithme intégré à SageMaker l'IA qui prend en charge la formation distribuée

SageMaker AI fournit des algorithmes intégrés que vous pouvez utiliser immédiatement via la console SageMaker AI ou le SDK SageMaker Python. 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 d'algorithmes intégrés à l' SageMaker IA prend en charge l'entraînement distribué. 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 sur les Built-in algorithmes. Certains algorithmes prennent en charge l'entraînement distribué multi-instances, tandis que les autres algorithmes parallélisables prennent en charge la parallélisation sur plusieurs GPU dans 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 tâches d'IA peuvent instancier un environnement de formation distribué pour des cas d'utilisation et des frameworks spécifiques. Cet environnement agit comme un tableau blanc prêt à l'emploi, où vous pouvez apporter et exécuter votre propre code de machine learning.

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) for SageMaker Training, que vous pouvez orchestrer soit via les modules Python dédiés du SDK SageMaker AI Python, soit via les SageMaker API avec,. AWS CLI AWS SDK for Python (Boto3) SageMaker AI fournit des conteneurs de formation pour les frameworks d'apprentissage automatique PyTorch TensorFlow, notamment Hugging Face Transformers et Apache MXNet. Vous avez deux options pour écrire du code de deep learning pour un entraînement distribué.

  • Les bibliothèques de formation distribuées par l' SageMaker IA

    Les bibliothèques de formation distribuées par 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 est également fournie avec des clients de lancement intégrés au SDK SageMaker Python, et vous n'avez pas besoin de créer un code de lancement parallèle. Pour en savoir plus, consultez la bibliothèque de parallélisme des données d'SageMaker AI et la bibliothèque de parallélisme des modèles d'SageMaker AI.

  • Open-source bibliothèques de formation distribuées

    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 du SageMaker AI-managed framework. Par exemple, l'exemple de code pour entraîner MaskrCNN dans l' SageMaker IA montre comment utiliser à la fois PyTorch DDP dans le conteneur SageMaker AI PyTorch Framework et Horovod dans le conteneur Framework. SageMaker TensorFlow

SageMaker Les conteneurs AI ML sont également fournis avec MPI préinstallé, ce qui vous permet de paralléliser votre script de point d'entrée à l'aide de mpi4py. https://mpi4py.readthedocs.io/en/stable/ L'utilisation des conteneurs de formation intégrés MPI est une excellente option lorsque vous lancez un lanceur de formation distribué tiers ou que vous écrivez du code parallèle ad hoc dans l'environnement de formation géré par l' SageMaker IA.

Notes relatives à l'entraînement des réseaux neuronaux de parallélisme de données sur les GPU

  • Mise à l'échelle du parallélisme multi-GPU et multi-machines, le cas échéant

    Nous exécutons souvent des tâches d'entraînement de réseaux neuronaux sur des instances à CPU multiples ou à GPU multiples. Chaque GPU-based instance contient généralement plusieurs périphériques GPU. Par conséquent, le calcul GPU distribué peut être effectué soit au sein d'une seule instance GPU avec plusieurs GPU (entraînement multi-GPU à nœud unique), soit à travers plusieurs instances GPU comportant plusieurs cœurs de GPU dans chacune (entraînement multi-nœuds et multi-GPU). Single-instance l'entraînement permet d'écrire du code et de déboguer plus facilement, et le GPU-to-GPU débit intra-nœud est généralement plus rapide que le débit GPU-to-GPU inter-nœuds. Par conséquent, il est conseillé de mettre à l'échelle d'abord le parallélisme de données verticalement (utilisez une seule instance de GPU avec plusieurs GPU) et de l'étendre à plusieurs instances de GPU si nécessaire. Cela peut ne pas s'appliquer aux cas où le budget du processeur est élevé (par exemple, une charge de travail importante pour le prétraitement des données) et lorsque le CPU-to-GPU ratio d'une instance multi-GPU 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 de données, l'augmentation du nombre de GPU tout conservant la taille du mini-lot par GPU entraîne une augmentation de la taille du mini-lot global pour le processus de descente de gradient stochastique (MSGD) par mini-lots. La taille des mini-lots dans le cadre du 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)].

  • Surveillez les I/O goulots d'étranglement

    À mesure que vous augmentez le nombre de GPU, le débit de stockage de lecture et d'écriture doit é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 l'entraînement à un seul GPU doivent être modifiés pour un entraînement multi-GPU à plusieurs 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 à chaque GPU.

    • Utilisez un optimiseur capable de gérer le calcul du gradient et les mises à jour des paramètres sur plusieurs GPU.

    • Attribuez la responsabilité du point de contrôle à un hôte et à un GPU spécifiques.

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 de 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 de données en parallèle à l'aide SageMaker des API de SageMaker formation et de traitement d'Amazon SageMaker Studio Classic, qui est intégré à Amazon EMR et AWS Glue.

Option 3 : écrire votre propre code d'entraînement distribué personnalisé

Lorsque vous soumettez une tâche de formation ou de traitement à SageMaker AI, les API de SageMaker formation et de traitement de l' SageMaker IA lancent des instances de calcul Amazon EC2. 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 à l' SageMaker IA et Créer un conteneur avec vos propres algorithmes et modèles. Pour plus d'informations sur Docker avec SageMaker AI Processing, consultez la section Utiliser votre propre code de traitement.

Chaque environnement de tâche de SageMaker formation contient un fichier de configuration à/opt/ml/input/config/resourceconfig.json, et chaque environnement de tâche de SageMaker traitement contient un fichier de configuration similaire à/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 fichier JSON, 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 ou DeepSpeed In SageMaker AI.

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 collaborateurs. 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 des 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 paralléliser de manière triviale ces cas d'utilisation de ne rien partager avec Amazon AI. SageMaker Lorsque vous lancez une tâche de SageMaker formation ou de SageMaker traitement sur un cluster comportant plusieurs nœuds, l' SageMaker IA réplique et lance par défaut votre code d'entraînement (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 ces multiples nœuds peuvent être facilitées S3DataDistributionType=ShardedByS3Key en configurant la configuration de saisie des données de l'InputDataAPI SageMaker AI.

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.

Pour 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 des flux de travail, tels que SageMaker Pipelines, AWS Step Functions et Apache Airflow, pris en charge par Amazon Managed Workflows for Apache Airflow (MWAA) et AI Workflows. SageMaker