Configurer le profilage du cadre Debugger - Amazon SageMaker

Configurer le profilage du cadre Debugger

Pour activer le profilage du cadre Debugger, configurez le paramètre framework_profile_params lorsque vous créez un estimateur. Le profilage du cadre Debugger recueille des métriques du cadre, telles que les données de l'étape d'initialisation, les processus de chargement de données, les opérateurs Python des cadres de deep learning et des scripts d'entraînement, le profilage détaillé dans et entre les étapes, avec les options cProfile ou Pyinstrument. À l'aide de la classe FrameworkProfile, vous pouvez configurer des options de profilage de cadre personnalisées.

Note

Avant de commencer avec le profilage du cadre Debugger, vérifiez que le cadre utilisé pour créer votre modèle est pris en charge par Debugger pour le profilage du cadre. Pour de plus amples informations, veuillez consulter Cadres et algorithmes pris en charge.

Debugger enregistre les métriques du cadre dans un compartiment S3 par défaut. Le format de l'URI du compartiment S3 par défaut est s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/profiler-output/.

Démarrer une tâche d'entraînement avec la surveillance système et le profilage de cadre par défaut

L'exemple de code suivant est la configuration la plus simple du paramètre profiler_config pour démarrer la surveillance système et le profilage de cadre par défaut. La classe FrameworkProfile de l'exemple de code suivant lance le profilage de cadre par défaut lorsqu'une tâche d'entraînement démarre. Le profilage du cadre Debugger inclut les options suivantes : profilage détaillé, profilage du chargeur de données et profilage Python.

from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile() )

Avec cette configuration du paramètre profiler_config, Debugger appelle les paramètres par défaut de surveillance et de profilage. Debugger contrôle les métriques système toutes les 500 millisecondes. Il profile la cinquième étape avec l'option de profilage détaillé ; la septième étape avec l'option de profilage du chargeur de données ; et les neuvième, dixième et onzième étapes avec l'option de profilage Python.

Pour voir les options de configuration de profilage disponibles, les paramètres par défaut et des exemples de configuration, consultez 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 et SageMaker Debugger API – FrameworkProfile dans Amazon SageMaker Python SDK.

Si vous souhaitez modifier l'intervalle de surveillance système et activer le profilage de cadre par défaut, vous pouvez spécifier le paramètre system_monitor_interval_millis explicitement avec le paramètre framework_profile_params. Par exemple, pour contrôler toutes les 1 000 millisecondes et activer le profilage de cadre par défaut, utilisez l'exemple de code suivant.

from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=1000, framework_profile_params=FrameworkProfile() )

Pour de plus amples informations sur la classe FrameworkProfile, consultez SageMaker Debugger API – FrameworkProfile dans Amazon SageMaker Python SDK.

Démarrer une tâche d'entraînement avec la surveillance système par défaut et le profilage de cadre personnalisé pour les étapes cible ou une plage de temps cible

Si vous souhaitez spécifier des étapes cible ou des intervalles de temps cible pour établir le profil de votre tâche d'entraînement, vous devez spécifier des paramètres pour la classe FrameworkProfile. Les exemples de code suivants montrent comment spécifier les plages cible pour le profilage et la surveillance système.

  • Pour une plage d'étapes cible

    Avec l'exemple de configuration suivant, Debugger surveille l'ensemble de la tâche d'entraînement toutes les 500 millisecondes (surveillance par défaut) et profile une plage d'étapes cible allant de l'étape 5 à l'étape 15 (pour 10 étapes).

    from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile(start_step=5, num_steps=10) )

    Avec l'exemple de configuration suivant, Debugger contrôle l'ensemble de la tâche d'entraînement toutes les 1 000 millisecondes et profile une plage d'étapes cible allant de l'étape 5 à l'étape 15 (pour 10 étapes).

    from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=1000, framework_profile_params=FrameworkProfile(start_step=5, num_steps=10) )
  • Pour une plage de temps cible

    Avec l'exemple de configuration suivant, Debugger contrôle l'ensemble de la tâche d'entraînement toutes les 500 millisecondes (surveillance par défaut) et profile une plage de temps cible à partir de l'heure actuelle Unix pendant 600 secondes.

    import time from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( framework_profile_params=FrameworkProfile(start_unix_time=int(time.time()), duration=600) )

    Avec l'exemple de configuration suivant, Debugger contrôle l'ensemble de la tâche d'entraînement toutes les 1 000 millisecondes et profile une plage de temps cible à partir de l'heure actuelle Unix pendant 600 secondes.

    import time from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=1000, framework_profile_params=FrameworkProfile(start_unix_time=int(time.time()), duration=600) )

    Le profilage du cadre est effectué pour toutes les options de profilage à l'étape cible ou à la plage de temps.

    Pour plus d'informations sur les options de profilage disponibles, consultez SageMaker Debugger APIs – FrameworkProfile dans Amazon SageMaker Python SDK.

    La section suivante vous montre comment écrire les options de profilage disponibles.

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

Vous pouvez utiliser les classes de configuration de profilage suivantes pour gérer les options de profilage de cadre :

  • DetailedProfilingConfig : spécifiez une étape cible ou une plage de temps pour profiler les opérations de cadre à l'aide des profileurs de cadre natifs (TensorFlow Profiler et PyTorch Profiler). Par exemple, si vous utilisez TensorFlow, les hooks Debugger permettent au profileur TensorFlow de collecter des métriques de cadre spécifiques à TensorFlow. Le profilage détaillé vous permet de profiler tous les opérateurs de cadre à une étape préalable (avant la première étape), dans et entre les étapes d'une tâche d'entraînement.

    Note

    Le profilage détaillé peut augmenter considérablement la consommation de mémoire GPU. Nous déconseillons d'activer le profilage détaillé pendant plus de deux étapes.

  • DataLoaderProfilingConfig : spécifiez une étape ou une plage de temps cible pour profiler les processus du chargeur de données de cadre de deep learning. Debugger collecte chaque événement de chargeur de données des cadres.

    Note

    Le profilage du chargeur de données peut réduire les performances d'entraînement lors de la collecte d'informations auprès des chargeurs de données. Nous déconseillons d'activer le profilage du chargeur de données pendant plus de deux étapes.

    Debugger est préconfiguré pour annoter les processus du chargeur de données uniquement pour les conteneurs AWS Deep Learning Containers. Debugger ne peut pas profiler les processus du chargeur de données à partir d'autres conteneurs d'entraînement personnalisés ou externes.

  • PythonProfilingConfig : spécifiez une étape ou une plage de temps cible pour profiler les fonctions Python. Vous avez également le choix entre deux profileurs Python : cProfile et Pyinstrument.

    • cProfile : profileur Python standard. cProfile collecte des informations pour chaque opérateur Python appelé pendant l'entraînement. Avec cProfile, Debugger économise du temps cumulé et des annotations pour chaque appel de fonction, fournissant des détails complets sur les fonctions Python. Dans le deep learning, par exemple, les fonctions les plus fréquemment appelées peuvent être les filtres convolutifs et les opérateurs de transmission vers l'arrière. cProfile profile chacun d'entre elles. Pour l'option cProfile, vous pouvez sélectionner une option de minuterie : temps total, temps CPU et temps hors CPU. Bien que vous puissiez profiler chaque appel de fonction exécuté sur des processeurs (CPU et GPU) en temps CPU, vous pouvez également identifier les goulets d'étranglement d'I/O ou de réseau avec l'option de temps hors CPU. La valeur par défaut est le temps total, et Debugger profile à la fois le temps CPU et le temps hors CPU. Avec cProfile, vous pouvez explorer en détail toutes les fonctions lors de l'analyse des données de profil.

    • Pyinstrument : Pyinstrument est un profileur Python à faible charge qui fonctionne sur la base de l'échantillonnage. Avec l'option Pyinstrument, Debugger échantillonne les événements de profilage toutes les millisecondes. Étant donné que Pyinstrument mesure le temps écoulé au lieu du temps CPU, l'option Pyinstrument peut être plus appropriée par rapport à l'option cProfile pour réduire le bruit de profilage (filtrage des appels de fonction non pertinents qui s'accumulent rapidement) et capturer les opérateurs qui sont en fait exigeants en calcul (s'accumulent lentement) pour l'entraînement de votre modèle. Avec Pyinstrument, vous pouvez voir une arborescence d'appels de fonctions et mieux comprendre la structure et la cause racine de la lenteur.

    Note

    L'activation du profilage Python peut ralentir le temps global d'entraînement. cProfile profile les opérateurs Python les plus fréquemment appelés à chaque appel, de sorte que le temps de traitement du profilage augmente par rapport au nombre d'appels. Dans le cas de Pyinstrument, le temps de profilage cumulé augmente par rapport au temps en raison de son mécanisme d'échantillonnage.

L'exemple de configuration suivant montre la structure complète lorsque vous utilisez les différentes options de profilage avec des valeurs spécifiées.

import time from sagemaker.debugger import (ProfilerConfig, FrameworkProfile, DetailedProfilingConfig, DataloaderProfilingConfig, PythonProfilingConfig, PythonProfiler, cProfileTimer) profiler_config=ProfilerConfig( system_monitor_interval_millis=500, framework_profile_params=FrameworkProfile( detailed_profiling_config=DetailedProfilingConfig( start_step=5, num_steps=1 ), dataloader_profiling_config=DataloaderProfilingConfig( start_step=7, num_steps=1 ), python_profiling_config=PythonProfilingConfig( start_step=9, num_steps=1, python_profiler=PythonProfiler.CPROFILE, cprofile_timer=cProfileTimer.TOTAL_TIME ) ) )

Pour plus d'informations sur les options de profilage disponibles, consultez DetailedProfilingConfig, DataLoaderProfilingConfig et PythonProfilingConfig dans Amazon SageMaker Python SDK.