Chargeur de données de profilage - Amazon SageMaker

Chargeur de données de profilage

Dans PyTorch, les itérateurs de chargeur de données, tels que SingleProcessingDataLoaderIter et MultiProcessingDataLoaderIter, sont lancés au début de chaque itération sur un jeu de données. Pendant la phase d'initialisation, PyTorch active les processus de composant en fonction du nombre de composants configuré et établit une file d'attente de données pour extraire les données et les threads pin_memory.

Pour utiliser l'outil d'analyse de profilage du chargeur de données PyTorch, importez les éléments PT_dataloader_analysis suivants :

from smdebug.profiler.analysis.utils.pytorch_dataloader_analysis import PT_dataloader_analysis

Transmettez les données de profilage récupérées en tant qu'objet de données de cadre Pandas dans la section Accéder aux données de profilage à l'aide de l'outil d'analyse de données Pandas :

pt_analysis = PT_dataloader_analysis(pf)

Les fonctions suivantes peuvent être utilisées pour l'objet pt_analysis :

La classe SMDebug S3SystemMetricsReader lit les métriques système à partir du compartiment S3 spécifié dans le paramètre s3_trial_path.

  • pt_analysis.analyze_dataloaderIter_initialization()

    L'analyse génère la durée médiane et maximale de ces initialisations. En cas de valeurs aberrantes (c'est-à-dire que la durée est supérieure à 2 fois la valeur médiane), la fonction affiche les heures de début et de fin pour ces durées. Celles-ci peuvent être utilisées pour inspecter les métriques système pendant ces intervalles de temps.

    La liste suivante indique l'analyse disponible à partir de cette méthode de classe :

    • Type d'itérateurs de chargeur de données initialisés.

    • Nombre de composants par itérateur.

    • Vérifiez si l'itérateur a été initialisé avec ou sans pin_memory.

    • Nombre de fois où les itérateurs ont été initialisés pendant l'entraînement.

  • pt_analysis.analyze_dataloaderWorkers()

    La liste suivante indique l'analyse disponible à partir de cette méthode de classe :

    • Nombre de processus de composant qui ont été détachés pendant toute la durée de l'entraînement.

    • Durée médiane et maximale pour les processus de composant.

    • Heure de début et de fin pour les processus de composant qui sont des anomalies.

  • pt_analysis.analyze_dataloader_getnext()

    La liste suivante indique l'analyse disponible à partir de cette méthode de classe :

    • Nombre d'appels GetNext effectués pendant l'entraînement.

    • Durée médiane et maximale en microsecondes pour les appels GetNext.

    • Heure de début, heure de fin, durée et ID de composant pour la durée d'appel GetNext aberrante.

  • pt_analysis.analyze_batchtime(start_timestamp, end_timestamp, select_events=[".*"], select_dimensions=[".*"])

    Debugger collecte les heures de début et de fin de tous les appels GetNext. Vous pouvez trouver le temps passé par le script d'entraînement sur un lot de données. Dans la fenêtre de la période spécifiée, vous pouvez identifier les appels qui ne contribuent pas directement à l'entraînement. Ces appels peuvent provenir des opérations suivantes : calcul de la précision, ajout des pertes à des fins de débogage ou de journalisation, et impression des informations de débogage. Des opérations comme celles-ci peuvent être exigeantes en calcul ou en temps. Nous pouvons identifier de telles opérations en corrélant le profileur Python, les métriques système et les métriques de cadre.

    La liste suivante indique l'analyse disponible à partir de cette méthode de classe :

    • Temps de profilage consacré à chaque lot de données, BatchTime_in_seconds, en trouvant la différence entre les heures de début des appels GetNext actuels et à venir.

    • Recherchez les valeurs aberrantes dans BatchTime_in_seconds ainsi que l'heure de début et de fin pour ces valeurs aberrantes.

    • Obtenez les métriques système et de cadre au cours de ces horodatages BatchTime_in_seconds. Cela indique à quoi le temps a été consacré.

  • pt_analysis.plot_the_window()

    Trace un graphique chronologique entre un horodatage de début et l'horodatage de fin.