Informatique distribuée avec les SageMaker meilleures pratiques - Amazon SageMaker

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 SageMaker meilleures pratiques

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 (GPU NVIDIA, puces AWS Trainium) et cœurs de vCPU. 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 communications entre GPU 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 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 SageMaker intégré qui prend en charge la formation distribuée

SageMaker fournit des algorithmes intégrés que vous pouvez utiliser immédiatement via la SageMaker console 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 des algorithmes SageMaker intégrés 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 aux algorithmes intégrés. 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 SageMaker géré

SageMaker les jobs 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) for SageMaker Training, que vous pouvez orchestrer soit via les modules Python dédiés du SDK SageMaker Python, soit via les SageMaker API avec,. AWS CLIAWS SDK for Python (Boto3) SageMaker fournit des conteneurs de formation pour les frameworks d'apprentissage automatique PyTorchTensorFlow, 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 SageMaker distribuées

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

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

SageMaker Les conteneurs 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. 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 SageMaker l'environnement de formation géré.

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 instance basée sur un GPU contient généralement plusieurs dispositifs GPU. Par conséquent, le calcul GPU distribué peut se faire soit au sein d'une seule instance de GPU avec plusieurs GPU (entraînement multi-GPU à nœud unique), soit au sein de plusieurs instances de GPU avec plusieurs cœurs de GPU chacune (entraînement multi-GPU à plusieurs nœuds). Il est plus facile d'écrire du code et de débogueur l'entraînement à instance unique et le débit GPU à GPU intra-nœud est généralement plus rapide que le débit GPU à 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 CPU est élevé (par exemple, une charge de travail importante pour le prétraitement des données) et lorsque le ratio CPU à GPU 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)].

  • Surveillance des goulots d'étranglement des E/S

    À 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 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 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, les API de SageMaker formation et SageMaker de traitement 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 pour qu'il fonctionne avec SageMaker et créer un conteneur avec vos propres algorithmes et modèles. Pour plus d'informations sur Docker with SageMaker Processing, 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.jsonadresse, 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 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.

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 ces cas d'utilisation du partage sans rien partager avec Amazon. SageMaker Lorsque vous lancez une tâche d' SageMaker entraînement ou de SageMaker traitement sur un cluster comportant plusieurs nœuds, SageMaker par défaut, votre code d'apprentissage (en Python ou Docker) est répliqué et lancé 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 TrainingInputAPI.

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 Automated Model Tuning. SageMaker 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, AWS Step Functions et Apache Airflow, pris en charge par Amazon Managed Workflows for Apache Airflow (MWAA) et Workflows. SageMaker