Bonnes pratiques d’informatique distribuée avec SageMaker AI - 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.

Bonnes pratiques d’informatique distribuée avec SageMaker AI

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 de l'informatique distribuée et les options disponibles dans l'entraînement SageMaker et le traitement SageMaker. 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 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 propose des solutions d’entraînement distribué pour relever ces défis dans différents 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 AI qui prend en charge l’entraînement distribué

SageMaker AI fournit des algorithmes intégrés que vous pouvez utiliser immédiatement via la console SageMaker AI ou le kit SageMaker Python SDK. 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 à SageMaker AI 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 de machine learning personnalisé dans l’environnement d’entraînement ou de traitement géré par SageMaker AI

Les tâches SageMaker AI peuvent instancier un environnement d’entraînement distribué pour des cas d’utilisation et des cadres 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 d’entraînement distribué à l’aide des conteneurs de deep learning (DLC) pour l’entraînement SageMaker, que vous pouvez orchestrer soit via les modules Python dédiés dans le kit SageMaker AI Python SDK, soit via les API SageMaker avec l’AWS CLI et AWS SDK pour Python (Boto3). SageMaker AI fournit des conteneurs d’entraînement pour les cadres de machine learning, notamment PyTorch, TensorFlow, Transformeurs Hugging Face et Apache MXNet. Vous avez deux options pour écrire du code de deep learning pour un entraînement distribué.

  • Bibliothèques d’entraînement distribué SageMaker AI

    Les bibliothèques d’entraînement distribué SageMaker AI proposent un code géré par AWS pour le parallélisme des données des réseaux neuronaux et le parallélisme des modèles. L’entraînement distribué SageMaker AI est également fourni avec des clients lanceurs intégrés au kit SageMaker Python SDK et vous n’avez pas besoin de créer de code de lancement parallèle. Pour en savoir plus, consultez la bibliothèque SageMaker AI de parallélisme des données et la bibliothèque SageMaker AI 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) dans PyTorch ou les modules tf.distribute dans TensorFlow. Vous pouvez choisir d’exécuter ces cadres d’entraînement distribués dans les conteneurs de cadres gérés par SageMaker AI. Par exemple, l’exemple de code pour l’entraînement de MaskRCNN dans SageMaker AI montre comment utiliser à la fois PyTorch DDP dans le conteneur du cadre SageMaker PyTorch et Horovod dans le conteneur du cadre SageMaker TensorFlow.

Les conteneurs SageMaker AI de machine learning 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 d’entraînement intégré MPI est une excellente option lorsque vous lancez un lanceur d’entraînement distribué tiers ou que vous écrivez du code parallèle ad hoc dans l’environnement d’entraînement géré par SageMaker AI.

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 frontend Python d'Apache Spark, un framework d'informatique distribuée 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 tabulaire pour le traitement des données, pensez à utiliser les conteneurs PySpark de traitement SageMaker 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 des API d’entraînement SageMaker et de traitement SageMaker 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 d’entraînement ou de traitement à SageMaker AI, les API d’entraînement SageMaker et de traitement SageMaker AI lancent des instances de calcul Amazon EC2. Vous pouvez personnaliser l'environnement d'entraînement et de traitement dans les instances en exécutant votre propre conteneur Docker ou en installant des bibliothèques supplémentaires dans les conteneurs gérés par AWS. Pour plus d’informations sur Docker avec l’entraînement SageMaker, consultez Adaptation de votre propre conteneur Docker pour utiliser SageMaker AI et Création d’un conteneur avec vos propres algorithmes et modèles. Pour plus d’informations sur Docker avec le traitement SageMaker AI, consultez Utiliser votre propre code de traitement.

L’environnement de chaque tâche d’entraînement SageMaker contient un fichier de configuration à l’adresse /opt/ml/input/config/resourceconfig.json et l’environnement de chaque tâche de traitement SageMaker 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 d'entraînement distribué et Configuration de votre conteneur de traitement par Amazon SageMaker Processing. Vous pouvez également installer et utiliser des bibliothèques d’informatique distribuée tierces telles que Ray ou DeepSpeed dans SageMaker AI.

Vous pouvez également utiliser l'entraînement SageMaker et le traitement SageMaker pour exécuter de l'informatique distribuée personnalisée qui ne nécessite aucune communication entre les utilisateurs. 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 facilement paralléliser de tels cas d’utilisation « ne rien partager » avec Amazon SageMaker AI. Lorsque vous lancez une tâche d’entraînement ou de traitement SageMaker sur un cluster comportant plusieurs nœuds, SageMaker AI réplique et lance par défaut votre code d’entraînement (que ce soit du code Python ou une image 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 en configurant S3DataDistributionType=ShardedByS3Key dans la configuration de saisie des données de l’API TrainingInput 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 de machine learning en tâches de calcul parallèles ou séquentielles plus petites, chacune étant représentée par sa propre tâche d'entraînement SageMaker ou de traitement SageMaker. 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 par 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 d’entraînement en votre nom, selon une logique de recherche qui peut être aléatoire, bayésienne ou HyperBand.

En outre, pour orchestrer plusieurs tâches d’entraînement, vous pouvez également envisager des outils d’orchestration de flux de travail, tels que les pipelines SageMaker, AWS Step Functions et Apache Airflow, pris en charge par Amazon Managed Workflows for Apache Airflow (MWAA) et les flux de travail SageMaker AI.