Meilleures pratiques en matière d'informatique distribuée et d' SageMaker intelligence artificielle - 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.

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.

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) for SageMaker Training, que vous pouvez orchestrer soit par le biais des modules Python dédiés de l'SageMaker IA Python SDK, soit SageMaker APIs par AWS CLIle biais de AWS SDK for Python (Boto3) SageMaker L'IA 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 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 AI montre 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 MPIpréinstallés, ce qui vous permet de paralléliser votre script de point d'entrée à l'aide de mpi4py. L'utilisation des conteneurs de formation MPI intégrés 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.

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