Rapport de profilage SageMaker Debugger - Amazon SageMaker

Rapport de profilage SageMaker Debugger

Pour toutes les tâches d'entraînement SageMaker, la règle ProfilerReportDebugger invoque toutes les règles de surveillance et de profilage et regroupe l'analyse des règles dans un rapport complet. En suivant ce guide, téléchargez le rapport à l'aide du kit SDK Python Amazon SageMaker ou de la console S3, et découvrez ce que vous pouvez interpréter à partir des résultats de profilage.

Important

Dans le rapport, les diagrammes et les recommandations sont fournis à titre informatif et ne sont pas définitifs. Vous êtes tenu de réaliser votre propre évaluation indépendante des informations.

Télécharger un rapport de profilage Debugger

Téléchargez le rapport de profilage Debugger pendant que votre tâche d'entraînement est en cours d'exécution ou une fois la tâche terminée à l'aide du kit SDK Python Amazon SageMaker et de l'AWS Command Line Interface (CLI).

Astuce

Vous pouvez également télécharger le rapport en un clic et sans scripting supplémentaire via le tableau de bord Insights de SageMaker Studio Debugger. Pour savoir comment télécharger le rapport depuis Studio, consultez Ouvrir le tableau de bord Amazon SageMaker Debugger Insights.

Download using SageMaker Python SDK and AWS CLI
  1. Vérifiez l'URI de base de sortie S3 par défaut de la tâche en cours.

    estimator.output_path
  2. Vérifiez le nom de la tâche en cours.

    estimator.latest_training_job.job_name
  3. Le rapport de profilage Debugger est stocké sous <default-s3-output-base-uri>/<training-job-name>/rule-output. Configurez le chemin de sortie de la règle comme suit :

    rule_output_path = estimator.output_path + estimator.latest_training_job.job_name + "/rule-output"
  4. Pour vérifier si le rapport est généré, listez les répertoires et les fichiers de façon récursive sous rule_output_path en utilisant aws s3 ls avec l'option --recursive.

    ! aws s3 ls {rule_output_path} --recursive

    Cela devrait renvoyer une liste complète des fichiers sous un dossier généré automatiquement et nommé ProfilerReport-1234567890. Le nom du dossier est une combinaison de chaînes : ProfilerReport et une balise unique à 10 chiffres basée sur l'horodatage Unix lorsque la règle ProfilerReport est lancée.

    
                                        Exemple de sortie de règle

    profiler-report.html est un rapport de profilage généré automatiquement par Debugger. Les fichiers restants sont les composants d'analyse des règles intégrées stockés dans JSON et un bloc-notes Jupyter, qui sont utilisés pour être agrégés dans le rapport.

  5. Téléchargez les fichiers de façon récursive en utilisant aws s3 cp. La commande suivante enregistre tous les fichiers de sortie de règle dans le dossier ProfilerReport-1234567890 sous le répertoire de travail actuel.

    ! aws s3 cp {rule_output_path} ./ --recursive
    Astuce

    Si vous utilisez un serveur de bloc-notes Jupyter, exécutez !pwd pour vérifier le répertoire de travail actuel.

  6. Sous le répertoire /ProfilerReport-1234567890/profiler-output, ouvrez profiler-report.html. Si vous utilisez JupyterLab, choisissez Trust HTML (Faire confiance au HTML) pour voir le rapport de profilage généré automatiquement par Debugger.

    
                                        Exemple de sortie de règle
  7. Ouvrez le fichier profiler-report.ipynb pour voir comment le rapport est généré. Vous pouvez également personnaliser et étendre le rapport de profilage à l'aide du fichier de bloc-notes Jupyter.

Download using Amazon S3 Console
  1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon S3 à l'adresse https://console.aws.amazon.com/s3/.

  2. Recherchez le compartiment S3 de base. Par exemple, si vous n'avez pas spécifié de nom de tâche de base, le nom du compartiment S3 de base doit être au format suivant : sagemaker-<region>-111122223333. Recherchez le compartiment S3 de base à l'aide du champ Find bucket by name (Rechercher des compartiments par nom).

    
                                        Exemple d'utilisation de l'URI du compartiment S3 de sortie de règle
  3. Dans le compartiment S3 de base, recherchez le nom de la tâche d'entraînement en spécifiant votre préfixe de nom de tâche dans le champ de saisie Find objects by prefix (Rechercher des objets par préfixe). Choisissez le nom de la tâche d'entraînement.

    
                                        Exemple d'utilisation de l'URI du compartiment S3 de sortie de règle
  4. Le compartiment S3 de la tâche d'entraînement doit contenir trois sous-dossiers pour les données d'entraînement collectées par Debugger : debug-output/, profiler-output/ et rule-output/. Choisissez rule-output/.

    
                                        Exemple d'utilisation de l'URI du compartiment S3 de sortie de règle
  5. Dans le dossier rule-output/, choisissez ProfilerReport-1234567890, puis le fichier profiler-output/. Le dossier profiler-output/ contient profiler-report.html (le rapport de profilage généré automatiquement en html), profiler-report.ipynb (un bloc-notes Jupyter avec des scripts qui sont utilisés pour générer le rapport) et profiler-report/ (contient les fichiers JSON d'analyse de règle qui sont utilisés comme composants du rapport).

  6. Sélectionnez le fichier profiler-report.html et choisissez Actions, puis Download (Télécharger).

    
                                        Exemple d'utilisation de l'URI du compartiment S3 de sortie de règle
  7. Ouvrez le fichier téléchargé profiler-report.html dans un navigateur web.

Note

Si vous avez démarré votre tâche d'entraînement sans configurer les paramètres spécifiques à Debugger, Debugger génère le rapport uniquement en fonction des règles de surveillance du système, car les paramètres Debugger ne sont pas configurés pour enregistrer les métriques de cadre. Pour activer le profilage des métriques de cadre et recevoir un rapport de profilage Debugger étendu, configurez le paramètre profiler_config lors de la création ou de la mise à jour des estimateurs SageMaker.

Pour en savoir plus sur la configuration du paramètre profiler_config avant de démarrer une tâche d'entraînement, consultez Configurer le profilage du cadre Debugger.

Pour mettre à jour la tâche d'entraînement actuelle et activer le profilage des métriques de cadre, consultez Update Debugger Framework Profiling Configuration.

Démonstration du rapport de profilage Debugger

Cette section présente le rapport de profilage de Debugger section par section. Le rapport de profilage est généré sur la base des règles intégrées de surveillance et de profilage. Le rapport affiche des résultats uniquement pour les règles qui ont détecté des problèmes.

Important

Dans le rapport, les diagrammes et les recommandations sont fournis à titre informatif et ne sont pas définitifs. Vous êtes tenu de réaliser votre propre évaluation indépendante des informations.

Résumé des tâches d'entraînement

Le début du rapport présente un résumé de votre tâche d'entraînement. Dans cette section, vous pouvez voir les durées et les horodatages aux différentes phases d'entraînement.


                        Exemple de rapport de profilage Debugger

Le tableau récapitulatif comprend les informations suivantes :

  • start_time : heure exacte à laquelle la tâche d'entraînement a démarré.

  • end_time : heure exacte à laquelle la tâche d'entraînement s'est terminée.

  • job_duration_in_seconds : durée totale d'entraînement de l'heure de début (start_time) à l'heure de fin (end_time).

  • training_loop_start : heure exacte à laquelle la première étape de la première époque a démarré.

  • training_loop_end : heure exacte à laquelle la dernière étape de la dernière époque s'est terminée.

  • training_loop_duration_in_seconds : durée totale entre l'heure de début de la boucle d'entraînement et l'heure de fin de la boucle d'entraînement.

  • initialization_in_seconds : temps consacré à l'initialisation de la tâche d'entraînement. La phase d'initialisation couvre la période de l'heure de début (start_time) à l'heure de début de la bouche d'entraînement (training_loop_start). Le temps d'initialisation concerne la compilation du script d'entraînement, le démarrage du script d'entraînement, la création et l'initialisation du modèle, l'initialisation des instances EC2 et le téléchargement des données d'entraînement.

  • finalization_in_seconds : temps consacré à la finalisation de la tâche d'entraînement, par exemple pour la fin de l'entraînement du modèle, la mise à jour des artefacts du modèle et la fermeture des instances EC2. La phase de finalisation couvre la période allant de l'heure de fin de la boucle d'entraînement (training_loop_end) à l'heure de fin (end_time).

  • initialisation (%) : pourcentage de temps passé sur l'initialisation par rapport à la durée totale de la tâche en secondes.

  • training loop (%) : pourcentage de temps passé sur la boucle d'entraînement par rapport à la durée totale de la tâche en secondes.

  • finalization (%) : pourcentage de temps passé sur la finalisation par rapport à la durée totale de la tâche en secondes.

Statistiques d'utilisation du système

Dans cette section, vous pouvez voir une présentation des statistiques d'utilisation du système.


                        Exemple de rapport de profilage Debugger

Le rapport de profilage Debugger inclut les informations suivantes :

  • node : répertorie le nom des nœuds. Si vous utilisez un entraînement distribué sur plusieurs nœuds (plusieurs instances EC2), les noms de nœuds sont au format algo-n.

  • metric : métriques système collectées par Debugger : CPU, GPU, mémoire CPU, mémoire GPU, I/O et métriques réseau.

  • unit : unité des métriques système.

  • max : valeur maximale de chaque métrique système.

  • p99 : 99e percentile de chaque utilisation du système.

  • p95 : 95e percentile de chaque utilisation du système.

  • p50 : 50e percentile (médian) de chaque utilisation du système.

  • min : valeur minimale de chaque métrique système.

Résumé des métriques de cadre

Dans cette section, les diagrammes à secteurs suivants montrent la répartition des opérations de cadre sur les CPU et les GPU.


                        Exemple de rapport de profilage Debugger

Chacun des diagrammes à secteurs analyse les métriques de cadre collectés sur différents aspects, comme suit :

  • Ratio between TRAIN/EVAL phase and others (Rapport entre la phase ENTR/ÉVAL et les autres) : affiche le rapport entre les durées passées sur les différentes phases d'entraînement.

  • Ratio between forward and backward pass (Rapport entre la transmission vers l'avant et la transmission vers l'arrière) : affiche le rapport entre les durées passées sur la transmission vers l'avant et vers l'arrière dans la boucle d'entraînement.

  • Ratio between CPU/GPU operators (Rapport entre les opérateurs CPU/GPU) : affiche le rapport entre le temps passé sur les opérateurs exécutés sur CPU ou GPU, tels que les opérateurs convolutifs.

  • Métriques générales enregistrées dans le cadre : affiche le rapport entre le temps passé sur les principales métriques de cadre, telles que le chargement des données, la transmission vers l'avant et la transmission vers l'arrière.

Présentation : opérateurs CPU

Cette section fournit des informations détaillées sur les opérateurs de CPU. Le tableau indique le pourcentage de temps et le temps cumulé absolu passé sur les opérateurs de CPU les plus fréquemment appelés.


                            Exemple de rapport de profilage Debugger

Présentation : opérateurs GPU

Cette section fournit des informations détaillées sur les opérateurs GPU. Le tableau indique le pourcentage de temps et le temps cumulé absolu passé sur les opérateurs GPU les plus fréquemment appelés.


                            Exemple de rapport de profilage Debugger

Résumé des règles

Dans cette section, Debugger regroupe les résultats d'évaluation des règles, les analyses, les descriptions de règles et les suggestions.


                        Exemple de rapport de profilage Debugger

Analyse de la boucle d'entraînement — Durée des étapes

Dans cette section, vous trouverez des statistiques détaillées sur les durées d'étapes sur chaque cœur de GPU de chaque nœud. Debugger évalue les valeurs moyennes, maximales, p99, p95, p50 et minimales des durées d'étape, ainsi que les valeurs aberrantes d'étape. L'histogramme suivant montre les durées d'étape capturées sur différents composants master et GPU. Vous pouvez activer ou désactiver l'histogramme de chaque composant en choisissant les légendes sur le côté droit. Vous pouvez vérifier si un GPU particulier est à l'origine des valeurs aberrantes de durée d'étape.


                        Exemple de rapport de profilage Debugger

Analyse d'utilisation du GPU

Cette section présente les statistiques détaillées sur l'utilisation du cœur de GPU basée sur la règle LowGPUUtilization. Elle résume également les statistiques d'utilisation du GPU et les valeurs moyennes, p95 et p5 pour déterminer si la tâche d'entraînement sous-utilise les GPU.

Taille de lot

Cette section présente les statistiques détaillées de l'utilisation totale des CPU, de l'utilisation des GPU individuels et des empreintes de mémoire GPU. La règle BatchSize détermine si vous devez modifier la taille du lot pour mieux utiliser les GPU. Vous pouvez vérifier si la taille du lot est trop petite, ce qui entraîne une sous-utilisation, ou trop grande, ce qui entraîne une surutilisation et des problèmes de mémoire insuffisante. Dans le diagramme, les cases montrent les intervalles de percentiles p25 et p75 (remplis respectivement en violet foncé et en jaune vif) à partir de la médiane (p50). Les barres d'erreur indiquent le 5e percentile pour la limite inférieure et le 95e percentile pour la limite supérieure.


                        Exemple de rapport de profilage Debugger

Goulets d'étranglement CPU

Dans cette section, vous pouvez explorer les goulets d'étranglement de CPU détectés par la règle CPUBottleneck à partir de votre tâche d'entraînement. La règle vérifie si l'utilisation du CPU est supérieure à cpu_threshold (90 % par défaut) et si l'utilisation du GPU est inférieure à gpu_threshold (10 % par défaut).


                        Exemple de rapport de profilage Debugger

Les graphiques à secteurs affichent les informations suivantes :

  • Low GPU usage caused by CPU bottlenecks (Faible utilisation du GPU causée par des goulets d'étranglement du CPU : affiche le rapport des points de données entre ceux dont l'utilisation du GPU est supérieure et inférieure au seuil et ceux qui correspondent aux critères de goulet d'étranglement du CPU.

  • Ratio between TRAIN/EVAL phase and others (Rapport entre la phase ENTR/ÉVAL et les autres) : affiche le rapport entre les durées passées sur les différentes phases d'entraînement.

  • Ratio between forward and backward pass (Rapport entre la transmission vers l'avant et la transmission vers l'arrière) : affiche le rapport entre les durées passées sur la transmission vers l'avant et vers l'arrière dans la boucle d'entraînement.

  • Ratio between CPU/GPU operators (Rapport entre les opérateurs CPU/GPU) : affiche le rapport entre les durées passées sur les GPU et les CPU par les opérateurs Python, tels que les processus de chargeur de données et les opérateurs de transmission vers l'avant et vers l'arrière.

  • General metrics recorded in framework (Métriques générales enregistrées dans le cadre) : affiche les principales métriques de cadre et le rapport entre les durées passées sur les métriques.

Goulets d'étranglement des I/O

Dans cette section, vous trouverez un résumé des goulets d'étranglement des I/O. La règle évalue le temps d'attente d'I/O et les taux d'utilisation du GPU et surveille si le temps passé sur les demandes d'I/O dépasse un seuil en pourcentage du temps d'entraînement total. Cela peut indiquer des goulets d'étranglement d'I/O où les GPU attendent que les données arrivent du stockage.

Équilibrage de charge dans l'entraînement multi-GPU

Dans cette section, vous pouvez identifier le problème d'équilibrage de l'application entre les GPU.


                        Exemple de rapport de profilage Debugger

Analyse de mémoire GPU

Dans cette section, vous pouvez analyser l'utilisation de la mémoire GPU collectée par la règle GPUMemoryIncrease. Dans le diagramme, les cases montrent les intervalles de percentiles p25 et p75 (remplis respectivement en violet foncé et en jaune vif) à partir de la médiane (p50). Les barres d'erreur indiquent le 5e percentile pour la limite inférieure et le 95e percentile pour la limite supérieure.


                        Exemple de rapport de profilage Debugger