Configurazione per la profilazione del framework - Amazon SageMaker

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configurazione per la profilazione del framework

avvertimento

A favore di Amazon SageMaker Profiler, SageMaker Debugger depreca la funzionalità di profilazione del framework a partire dalla versione 2.11 e 2.0. TensorFlow PyTorch Puoi comunque utilizzare la funzionalità nelle versioni precedenti dei framework e degli SDK come segue.

  • SageMaker Python SDK <= v2.130.0

  • PyTorch >= v1.6.0, < v2.0

  • TensorFlow >= v2.3.1, < v2.1

Consulta anche 16 marzo 2023.

Per abilitare la profilazione del framework di Debugger, configura il parametro quando costruisci uno strumento di valutazione framework_profile_params. La profilazione del framework di Debugger raccoglie i parametri del framework, come i dati della fase di inizializzazione, i processi di caricamento dei dati, gli operatori Python dei framework di deep learning e gli script di addestramento, la profilazione dettagliata all'interno e tra le fasi, con le opzioni cProfile o Pyinstrument. Utilizzando la classe FrameworkProfile, è possibile configurare opzioni di profilazione del framework personalizzate.

Nota

Prima di iniziare con la profilazione del framework di Debugger, verifica che il framework utilizzato per creare il modello sia supportato da Debugger per la profilazione del framework. Per ulteriori informazioni, consulta Framework e algoritmi supportati.

Debugger salva i parametri del framework nel bucket S3 predefinito. Il formato dell'URI del bucket S3 predefinito è s3://sagemaker-<region>-<12digit_account_id>/<training-job-name>/profiler-output/.

Avvia un processo di addestramento con la profilazione predefinita del framework

Il codice di esempio seguente è l'impostazione del parametro profiler_config più semplice per avviare il monitoraggio predefinito del sistema e la profilazione del framework predefinito. La classe FrameworkProfile nel codice di esempio seguente avvia la profilazione predefinita del framework all'avvio di un processo di addestramento. La profilazione del framework di Debugger include le seguenti opzioni: profilazione dettagliata, profilazione del data loader e profilazione Python.

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

Con questa configurazione del parametro profiler_config, Debugger richiama le impostazioni predefinite di monitoraggio e profilazione. Debugger monitora i parametri di sistema ogni 500 millisecondi; profila la quinta fase con l'opzione di profilazione dettagliata, la settima fase con l'opzione di profilazione del caricatore di dati e la nona, la decima e l’undicesima fase con l'opzione di profilazione Python.

Per trovare le opzioni di configurazione della profilazione disponibili, le impostazioni dei parametri predefinite ed esempi su come configurarle, consulta le API Inizia un processo di addestramento con il monitoraggio del sistema predefinito e la profilazione del framework personalizzata con diverse opzioni di profilazione e SageMaker Debugger, nell'SDK FrameworkProfile Amazon Python. SageMaker

Se desideri modificare l'intervallo di monitoraggio del sistema e abilitare la profilazione predefinita del framework, puoi specificare il parametro system_monitor_interval_millis in modo esplicito con il parametro framework_profile_params. Ad esempio, per monitorare ogni 1000 millisecondi e abilitare la profilazione predefinita del framework, utilizza il seguente codice di esempio.

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

Per ulteriori informazioni sulla FrameworkProfile classe, consulta SageMaker Debugger APIs, in FrameworkProfile Amazon Python SDK. SageMaker

Inizia un processo di addestramento con il monitoraggio del sistema predefinito e la profilazione del framework personalizzata per le fasi target o un intervallo di tempo previsto

Se desideri specificare le fasi o gli intervalli di tempo target per profilare il tuo processo di addestramento, devi specificare i parametri per la classe FrameworkProfile. L'esempio di codice seguente mostra come specificare gli intervalli di destinazione per la profilazione e il monitoraggio del sistema.

  • Per un intervallo di fasi target

    Con la seguente configurazione di esempio, Debugger monitora l'intero processo di addestramento ogni 500 millisecondi (monitoraggio predefinito) e profila un intervallo di fasi target dalla fase 5 alla fase 15 (per 10 fasi).

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

    Con la seguente configurazione di esempio, Debugger monitora l'intero processo di addestramento ogni 1000 millisecondi e profila un intervallo di fasi target dalla fase 5 alla fase 15 (per 10 fasi).

    from sagemaker.debugger import ProfilerConfig, FrameworkProfile profiler_config=ProfilerConfig( system_monitor_interval_millis=1000, framework_profile_params=FrameworkProfile(start_step=5, num_steps=10) )
  • Per un intervallo di tempo target

    Con la seguente configurazione di esempio, Debugger monitora l'intero processo di addestramento ogni 500 millisecondi (monitoraggio predefinito) e profila un intervallo di tempo target dal tempo Unix corrente per 600 secondi.

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

    Con la seguente configurazione di esempio, Debugger monitora l'intero processo di addestramento ogni 1000 millisecondi e profila un intervallo di tempo target dal tempo Unix corrente per 600 secondi.

    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) )

    La profilazione del framework viene eseguita per tutte le opzioni di profilazione nella fase o nell'intervallo di tempo di destinazione.

    Per ulteriori informazioni sulle opzioni di profilazione disponibili, consulta SageMaker Debugger APIs, in FrameworkProfile Amazon Python SDK. SageMaker

    La prossima sezione illustra le modalità di creazione degli script delle opzioni di profilazione disponibili.

Inizia un processo di addestramento con il monitoraggio del sistema predefinito e la profilazione del framework personalizzata con diverse opzioni di profilazione

È possibile utilizzare le seguenti classi di configurazione della profilazione per gestire le opzioni di profilazione del framework:

  • DetailedProfilingConfig: specifica un passaggio o un intervallo di tempo di destinazione per le operazioni del framework di profilatura utilizzando i profiler del framework nativi (profiler e TensorFlow profiler). PyTorch Ad esempio, se utilizzati TensorFlow, gli hook Debugger consentono al profiler di raccogliere metriche del framework specifiche. TensorFlow TensorFlow La profilazione dettagliata consente di profilare tutti gli operatori del framework in una fase previa (prima della prima fase), all'interno delle fasi e tra le fasi di un processo di addestramento.

    Nota

    La profilazione dettagliata potrebbe aumentare in modo significativo il consumo di memoria della GPU. Non è consigliabile abilitare la profilazione dettagliata per più di un paio di fasi.

  • DataloaderProfilingConfig: specifica una fase o un intervallo di tempo target per profilare i processi di caricamento dei dati del framework di deep learning. Debugger raccoglie tutti gli eventi di caricamento dati dei framework.

    Nota

    La profilazione del data loader potrebbe ridurre le prestazioni di addestramento durante la raccolta di informazioni dai caricatori di dati. Non è consigliabile abilitare la profilazione del data loader per più di un paio di fasi.

    Debugger è preconfigurato per annotare i processi di caricamento dei dati solo per i container di deep learning AWS . Debugger non può profilare i processi di caricamento dei dati da altri container di addestramento personalizzati o esterni.

  • PythonProfilingConfig: specifica un passaggio o un intervallo di tempo di destinazione per profilare le funzioni Python. Puoi anche scegliere tra due profiler Python: cProfile e Pyinstrument.

    • cProfile: il profiler Python standard. cProfile raccoglie informazioni per ogni operatore Python chiamato durante l'addestramento. Con cProfile, Debugger consente di risparmiare tempo e annotazioni cumulativi per ogni chiamata di funzione, fornendo dettagli completi sulle funzioni Python. Nel deep learning, ad esempio, le funzioni più frequentemente chiamate potrebbero essere i filtri convoluzionali e gli operatori di passaggio all'indietro e i profili cProfile ciascuno di essi. Per l'opzione cProfile, puoi selezionare ulteriormente un'opzione timer: tempo totale, tempo CPU e tempo fuori dalla CPU. Sebbene sia possibile profilare ogni chiamata di funzione eseguita sui processori (sia CPU che GPU) in base al tempo di CPU, è anche possibile identificare i colli di bottiglia di I/O o di rete con l'opzione relativa al tempo fuori dalla CPU. L'impostazione predefinita è il tempo totale e Debugger profila sia il tempo della CPU che quello esterno alla CPU. Con cProfile, puoi approfondire ogni singola funzione durante l'analisi dei dati del profilo.

    • Pyinstrument: Pyinstrument è un profiler Python a basso costo che funziona in base al campionamento. Con l'opzione Pyinstrument, Debugger campiona gli eventi di profilazione ogni millisecondo. Poiché Pyinstrument misura il tempo trascorso dall'orologio da parete anziché il tempo della CPU, l'opzione Pyinstrument può essere una scelta migliore rispetto all'opzione cProfile per ridurre il rumore di profilazione (filtrando le chiamate a funzioni irrilevanti che sono cumulativamente veloci) e catturare gli operatori che in realtà richiedono molta elaborazione (cumulativamente lenti) per addestrare il modello. Con Pyinstrument, puoi vedere un albero di chiamate di funzioni e comprendere meglio la struttura e la causa principale della lentezza.

    Nota

    L'abilitazione della profilazione Python potrebbe rallentare il tempo di addestramento complessivo. cProfile profila gli operatori Python chiamati più frequentemente a ogni chiamata, quindi il tempo di elaborazione della profilazione aumenta rispetto al numero di chiamate. Per Pyinstrument, il tempo di profilazione cumulativo aumenta rispetto al tempo a causa del meccanismo di campionamento.

La configurazione di esempio seguente mostra la struttura completa quando si utilizzano le diverse opzioni di profilazione con valori specificati.

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 ) ) )

Per ulteriori informazioni sulle opzioni di profilazione disponibili, consulta DetailedProfilingConfig, Config PythonProfilinge DataloaderProfiling Config nell' SageMaker SDK Amazon Python.