Résolution des problèmes d’entraînement distribué dans Amazon SageMaker AI
Si vous rencontrez des problèmes pour exécuter une tâche d'entraînement lorsque vous utilisez la bibliothèque, utilisez la liste suivante pour tenter de résoudre le problème. Si vous avez besoin d’une assistance supplémentaire, contactez l’équipe SageMaker AI via le Centre de support AWS
Rubriques
Utilisation du parallélisme distribué des données SageMaker AI avec Amazon SageMaker Debugger et des points de contrôle
Pour surveiller les goulets d’étranglement système, analyser les opérations de cadre et déboguer les tenseurs de sortie du modèle pour les tâches d’entraînement avec parallélisme distribué des données SageMaker AI, utilisez Amazon SageMaker Debugger.
Toutefois, lorsque vous utilisez SageMaker Debugger, le parallélisme distribué des données et les points de contrôle SageMaker AI, une erreur qui ressemble à l’exemple suivant peut se produire.
SMDebug Does Not Currently Support Distributed Training Jobs With Checkpointing Enabled
Cela provient d’une erreur interne entre Debugger et les points de contrôle, qui se produit lorsque vous activez le parallélisme distribué des données SageMaker AI.
-
Si vous activez les trois fonctions, le kit SDK Python SageMaker désactive automatiquement Debugger en renvoyant
debugger_hook_config=False, ce qui équivaut à l'exemple d'estimatorde cadre suivant.bucket=sagemaker.Session().default_bucket() base_job_name="sagemaker-checkpoint-test" checkpoint_in_bucket="checkpoints" # The S3 URI to store the checkpoints checkpoint_s3_bucket="s3://{}/{}/{}".format(bucket, base_job_name, checkpoint_in_bucket) estimator = TensorFlow( ... distribution={"smdistributed": {"dataparallel": { "enabled": True }}}, checkpoint_s3_uri=checkpoint_s3_bucket, checkpoint_local_path="/opt/ml/checkpoints", debugger_hook_config=False ) -
Pour continuer à utiliser le parallélisme distribué des données SageMaker AI et SageMaker Debugger, vous pouvez ajouter manuellement des fonctions de points de contrôle à votre script d’entraînement au lieu de spécifier les paramètres
checkpoint_s3_urietcheckpoint_local_pathà partir de l’estimateur. Pour plus d'informations sur la configuration d'un pointage manuel dans un script d'entraînement, consultez Sauvegarde des points de contrôle.
Préfixe inattendu attaché aux clés de paramètres de modèle
Pour les tâches d'entraînement distribuées PyTorch, un préfixe inattendu (par exemple, model) peut être attaché aux clés state_dict (paramètres du modèle). La bibliothèque SageMaker AI de parallélisme distribué des données ne modifie ni ne préfixe directement aucun nom de paramètre de modèle lorsque des tâches d’entraînement PyTorch enregistrent des artefacts de modèle. L'entraînement distribué de PyTorch modifie les noms dans le state_dictpour transiter sur le réseau, en ajoutant le préfixe. En cas d’échec du modèle dû à des noms de paramètres différents quand vous utilisez la bibliothèque SageMaker de parallélisme des données et les points de contrôle pour l’entraînement PyTorch, adaptez l’exemple de code suivant pour supprimer le préfixe à l’étape où vous chargez les points de contrôle dans votre script d’entraînement.
state_dict = {k.partition('model.')[2]:state_dict[k] for k in state_dict.keys()}
Cela considère chaque clé state_dict comme une valeur de chaîne, sépare la chaîne lorsque 'model.' est rencontré pour la première fois, et prend le troisième élément de liste (avec index 2) de la chaîne partitionnée.
Pour plus d'informations sur le problème de préfixe, consultez le fil de discussion Prefix parameter names in saved model if trained by multi-GPU? (Utiliser des préfixes pour les noms de paramètres dans le modèle enregistré si l'entraînement considère plusieurs GPU ?)
Pour plus d'informations sur les méthodes d'enregistrement et de chargement de modèles PyTorch, consultez Saving & Loading Model Across Devices (Enregistrement et chargement du modèle sur plusieurs périphériques)
Blocage d’une tâche d’entraînement distribué SageMaker AI pendant l’initialisation
Si votre tâche d’entraînement de parallélisme distribué des données SageMaker AI se bloque pendant l’initialisation lors de l’utilisation d’instances compatibles EFA, cela peut être dû à une mauvaise configuration dans le groupe de sécurité du sous-réseau VPC utilisé pour la tâche d’entraînement. EFA nécessite une configuration de groupe de sécurité appropriée pour permettre le trafic entre les nœuds.
Pour configurer des règles entrantes et sortantes pour le groupe de sécurité
Connectez-vous à la AWS Management Console et ouvrez la console Amazon VPC à l’adresse https://console.aws.amazon.com/vpc/
. -
Dans le panneau de navigation de gauche, sélectionnez Security Groups (Groupes de sécurité).
-
Sélectionnez le groupe de sécurité lié au sous-réseau VPC que vous utilisez pour l'entraînement.
-
Dans la section Details (Détails), copiez la section Security group ID (ID du groupe de sécurité).
-
Sous l’onglet Inbound Rules (Règles entrantes), sélectionnez Edit inbound rules (Modifier les règles entrantes).
-
Sur la page Edit inbound rules (Modifier les règles entrantes), procédez comme suit :
-
Choisissez Ajouter une règle.
-
Pour Type, sélectionnez Tout le trafic.
-
Pour Source, sélectionnez Custom (Personnalisé), collez l'ID du groupe de sécurité dans la zone de recherche et sélectionnez le groupe de sécurité qui s'affiche.
-
-
Sélectionnez Save rules (Enregistrer les règles) pour terminer la configuration de la règle entrante pour le groupe de sécurité.
-
Sélectionnez Outbound rules (Modifier les règles sortantes) sous l'onglet Outbound rules (Règles sortantes).
-
Répétez les étapes 6 et 7 pour ajouter la même règle en tant que règle sortante.
Après avoir terminé les étapes précédentes de configuration du groupe de sécurité avec les règles entrantes et sortantes, exécutez de nouveau la tâche d’entraînement et vérifiez si le problème de blocage est résolu.
Pour plus d’informations sur la configuration des groupes de sécurité pour VPC et EFA, consultez Groupes de sécurité pour votre VPC et Elastic Fabric Adapter.
Blocage de la tâche d’entraînement distribué SageMaker AI à la fin de l’entraînement
L'une des causes profondes des problèmes de blocage à la fin de l'entraînement est un décalage dans le nombre de lots traités par époque sur différents rangs. Tous les employés (GPU) synchronisent leurs gradients locaux dans la transmission en arrière pour s'assurer qu'ils ont tous la même copie du modèle à la fin de l'itération par lots. Si les tailles de lots sont attribuées de manière inégale à différents groupes d'employés au cours de la dernière période d'entraînement, la tâche d'entraînement se bloque. Par exemple, lorsqu'un groupe d'employés (groupe A) termine le traitement de tous les lots et quitte la boucle d'entraînement, un autre groupe de employés (groupe B) commence à traiter un autre lot et attend toujours la communication du groupe A pour synchroniser les gradients. Cela oblige le groupe B à attendre le groupe A, qui a déjà terminé l'entraînement et n'a aucun gradient à synchroniser.
Par conséquent, lors de la configuration de votre jeu de données d'entraînement, il est important que chaque employé reçoive le même nombre d'échantillons de données afin de traiter le même nombre de lots pendant l'entraînement. Assurez-vous que chaque rang reçoit le même nombre de lots pour éviter ce problème de blocage.
Observation de la dégradation de l’efficacité de mise à l’échelle due aux goulets d’étranglement affectant le débit d’Amazon FSx
La limite de débit de FSx constitue une cause potentielle de la baisse de l'efficacité de la mise à l'échelle. Si vous observez une chute soudaine de l'efficacité de la mise à l'échelle lorsque vous passez à un cluster d'entraînement plus grand, essayez d'utiliser un système de fichiers FSx for Lustre plus grand avec une limite de débit plus élevée. Pour plus d'informations, consultez les sections Aggregate file system performance (Performances globales du système de fichiers) et Managing storage and throughput capacity (Gestion de la capacité de stockage et de débit) dans le Guide de l'utilisateur de Amazon FSx for Lustre.
Renvoi d’avertissements d’obsolescence par la tâche d’entraînement distribué SageMaker AI avec PyTorch
Depuis la version 1.4.0, la bibliothèque SageMaker AI de parallélisme distribué des données fonctionne comme un système dorsal distribué de PyTorch. En raison de la modification avec rupture de l'utilisation de la bibliothèque avec PyTorch, vous pouvez rencontrer un message d'avertissement indiquant que les API smdistributed pour le package distribué PyTorch sont obsolètes. Le message d'avertissement doit ressembler au suivant :
smdistributed.dataparallel.torch.dist is deprecated in the SageMaker AI distributed data parallel library v1.4.0+. Please use torch.distributed and specify 'smddp' as a backend when initializing process group as follows: torch.distributed.init_process_group(backend='smddp') For more information, see the library's API documentation at https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-modify-sdp-pt.html
À partir de la version 1.4.0, il suffit d'importer la bibliothèque une seule fois au début de votre script d'entraînement et de la définir comme backend lors de l'initialisation de la distribution PyTorch. Avec la seule ligne de spécification du backend, vous pouvez garder votre script d'entraînement PyTorch inchangé et utiliser directement les modules distribués de PyTorch. Reportez-vous à Utilisation de la bibliothèque SMDDP dans un script d’entraînement PyTorch pour connaître les modifications avec rupture et la nouvelle façon d'utiliser la bibliothèque avec PyTorch.