Accéder aux données de statistiques de profilage Python - Amazon SageMaker

Accéder aux données de statistiques de profilage Python

Le profilage Python fournit des métriques de cadre liées aux fonctions et aux opérateurs Python dans vos scripts d'entraînement et aux cadres de deep learning de SageMaker.

Modes et phases d'entraînement pour le profilage Python

Afin de profiler des intervalles spécifiques au cours de l'entraînement pour partitionner les statistiques pour chacun de ces intervalles, Debugger fournit des outils permettant de définir les modes et les phases.

Pour les modes d'entraînement, vous utilisez la classe PythonProfileModes suivante :

from smdebug.profiler.python_profile_utils import PythonProfileModes

Cette classe fournit les options suivantes :

  • PythonProfileModes.TRAIN : utilisez cette option si vous souhaitez profiler les étapes cible de la phase d'entraînement. Cette option de mode est disponible uniquement pour TensorFlow.

  • PythonProfileModes.EVAL : utilisez cette option si vous souhaitez profiler les étapes cible de la phase d'évaluation. Cette option de mode est disponible uniquement pour TensorFlow.

  • PythonProfileModes.PREDICT – utilisez cette option si vous souhaitez profiler les étapes cible de la phase de prédiction. Cette option de mode est disponible uniquement pour TensorFlow.

  • PythonProfileModes.GLOBAL : utilisez cette option si vous souhaitez profiler les étapes cible de la phase globale, qui comprend les trois phases précédentes. Cette option de mode est disponible uniquement pour PyTorch.

  • PythonProfileModes.PRE_STEP_ZERO : utilisez cette option si vous souhaitez profiler les étapes cible de l'étape d'initialisation avant le début de la première étape d'entraînement de la première époque. Cette phase comprend la soumission de la tâche, le chargement des scripts d'entraînement vers les instances EC2, la préparation des instances EC2 et le téléchargement des données d'entrée. Cette option de mode est disponible pour TensorFlow et PyTorch.

  • PythonProfileModes.POST_HOOK_CLOSE : utilisez cette option si vous souhaitez profiler les étapes cible de l'étape de finalisation une fois la tâche d'entraînement terminée et le hook Debugger fermé. Cette phase comprend le profilage des données lorsque les tâches d'entraînement sont finalisées et terminées. Cette option de mode est disponible pour TensorFlow et PyTorch.

Pour les phases d'entraînement, utilisez la classe StepPhase suivante :

from smdebug.profiler.analysis.utils.python_profile_analysis_utils import StepPhase

Cette classe fournit les options suivantes :

  • StepPhase.START : permet de spécifier le point de départ de la phase d'initialisation.

  • StepPhase.STEP_START : permet de spécifier l'étape de début de la phase d'entraînement.

  • StepPhase.FORWARD_PASS_END : permet de spécifier les étapes où se termine la transmission vers l'avant. Cette option est disponible uniquement pour PyTorch.

  • StepPhase.STEP_END : permet de spécifier les étapes finales de la phase d'entraînement. Cette option est disponible uniquement pour TensorFlow.

  • StepPhase.END : permet de spécifier le point de fin de la phase de finalisation (après la fermeture du hook). Si le hook de rappel n'est pas fermé, le profilage de la phase de finalisation ne se produit pas.

Outils d'analyse de profilage Python

Debugger prend en charge le profilage Python avec deux outils de profilage :

  • cProfile : profileur python standard. cProfile collecte les métriques de cadre sur le temps CPU pour chaque fonction appelée lorsque le profilage a été activé.

  • Pyinstrument : profileur Python sans frais généraux importants, qui échantillonne les événements de profilage toutes les millisecondes.

Pour en savoir plus sur les options de profilage Python et sur ce qui est collecté, veuillez consulter Démarrer une tâche d'entraînement avec la surveillance système par défaut et le profilage de cadre personnalisé avec différentes options de profilage.

Les méthodes suivantes des classes PythonProfileAnalysis, cProfileAnalysis et PyinstrumentAnalysis sont fournies pour extraire et analyser les données de profilage Python. Chaque fonction charge les données les plus récentes depuis l'URI S3 par défaut.

from smdebug.profiler.analysis.python_profile_analysis import PythonProfileAnalysis, cProfileAnalysis, PyinstrumentAnalysis

Pour définir des objets de profilage Python pour l'analyse, utilisez les classes cProfileAnalysis ou PyinstrumentAnalysis, comme illustré dans l'exemple de code suivant. Celui-ci montre comment définir un objet cProfileAnalysis. Si vous voulez utiliser PyinstrumentAnalysis, remplacez le nom de la classe.

python_analysis = cProfileAnalysis( local_profile_dir=tf_python_stats_dir, s3_path=tj.profiler_s3_output_path )

Les méthodes suivantes sont disponibles pour les classes cProfileAnalysis et PyinstrumentAnalysispour récupérer les données de statistiques de profilage Python :

  • python_analysis.fetch_python_profile_stats_by_time(start_time_since_epoch_in_secs, end_time_since_epoch_in_secs) : prend une heure de début et une heure de fin, et renvoie les statistiques de fonction des statistiques d'étape dont les heures de début ou de fin se chevauchent avec l'intervalle fourni.

  • python_analysis.fetch_python_profile_stats_by_step(start_step, end_step, mode, start_phase, end_phase) : prend une étape de départ et une étape de fin et renvoie les statistiques de fonction de toutes les statistiques d'étape dont l'étape step profilée correspond à start_step <= step < end_step.

    • start_step et end_step (str) : spécifiez l'étape de début et l'étape de fin pour récupérer les données de statistiques de profilage Python.

    • mode (str) : spécifiez le mode de la tâche d'entraînement à l'aide de la classe d'énumérateur PythonProfileModes. La valeur par défaut est PythonProfileModes.TRAIN. Les options disponibles sont fournies dans la section Modes et phases d'entraînement pour le profilage Python.

    • start_phase (str) : spécifiez la phase de démarrage dans la ou les étape(s) cible à l'aide de la classe d'énumérateur StepPhase. Ce paramètre permet le profilage entre différentes phases de l'entraînement. La valeur par défaut est StepPhase.STEP_START. Les options disponibles sont fournies dans la section Modes et phases d'entraînement pour le profilage Python.

    • end_phase (str) : spécifiez la phase de fin dans la ou les étape(s) cible à l'aide de la classe d'énumérateur StepPhase. Ce paramètre définit la phase finale de l'entraînement. Les options disponibles sont les mêmes que celles du paramètre start_phase. La valeur par défaut est StepPhase.STEP_END. Les options disponibles sont fournies dans la section Modes et phases d'entraînement pour le profilage Python.

  • python_analysis.fetch_profile_stats_between_modes(start_mode, end_mode) : extrait les statistiques de profilage Python entre les modes de début et de fin.

  • python_analysis.fetch_pre_step_zero_profile_stats() : extrait les statistiques de profilage Python jusqu'à l'étape 0.

  • python_analysis.fetch_post_hook_close_profile_stats() : extrait les statistiques de profilage Python une fois le hook fermé.

  • python_analysis.list_profile_stats() : renvoie un DataFrame des statistiques de profilage Python. Chaque ligne contient les métadonnées de chaque instance de profilage et le fichier de statistiques correspondant (un par étape).

  • python_analysis.list_available_node_ids() : renvoie une liste des ID de nœud disponibles pour les statistiques de profilage Python.

Les méthodes spécifiques à la classe cProfileAnalysis :

  • fetch_profile_stats_by_training_phase() : extrait et agrège les statistiques de profilage Python pour chaque combinaison possible de modes de début et de fin. Par exemple, si un entraînement et des phases de validation sont effectués alors que le profilage détaillé est activé, les combinaisons sont (PRE_STEP_ZERO, TRAIN), (TRAIN, TRAIN), (TRAIN, EVAL), (EVAL, EVAL) et (EVAL, POST_HOOK_CLOSE). Tous les fichiers de statistiques de chacune de ces combinaisons sont agrégés.

  • fetch_profile_stats_by_job_phase() : extrait et agrège les statistiques de profilage Python par phase de tâche. Les phases de tâche sont initialization (profilage jusqu'à l'étape 0), training_loop(entraînement et validation) et finalization (profilage une fois le hook fermé).