Strumento di visualizzazione di Trace
Puoi utilizzare Trace Viewer per visualizzare la sequenza temporale degli eventi che si sono verificati
durante la sessione di profilazione. Mostra le durate delle operazioni eseguite
dal modello su parti diverse del sistema, come l'host (CPU) e
gli acceleratori (GPU o TPU). In questo modo puoi capire in che modo il tuo modello utilizza le risorse hardware, identificare i colli di bottiglia delle prestazioni e ottimizzare il modello per un'esecuzione più rapida. L'interfaccia utente di Trace Viewer si basa su quella utilizzata inchrome://tracing
e pertanto richiede l'utilizzo del browser Chrome.
Piattaforme supportate
TPU: supportata
GPU: supportata
Trace Viewer per le GPU raggruppa gli eventi in base alle tempistiche per chip GPU e gli stream al loro interno, mentre per le TPU organizza gli eventi in base alle tempistiche per chip e core TPU. In entrambi i casi, Trace Viewer presenta anche gli eventi sulle sequenze temporali per thread per la CPU host a cui sono collegati gli acceleratori.
Interazione con Spostamenti
Trace Viewer fornisce diversi strumenti e metodi per navigare ed esaminare la sequenza temporale:
- Navigazione: puoi utilizzare le seguenti scorciatoie da tastiera:
- W: aumenta lo zoom.
- S: diminuisci lo zoom.
- R: Esegui una panoramica verso sinistra.
- D: Esegui la panoramica a destra.
- Selettore strumenti: puoi fare clic su uno strumento nel selettore o utilizzare la corrispondente scorciatoia da tastiera:
- Strumento di selezione (1 o !): fai clic su un evento per selezionarlo e visualizzarne i dettagli nel riquadro Dettagli. Seleziona più eventi tramite Ctrl+clic per visualizzare un riepilogo.
- Strumento panoramica (2 o @): trascina per spostare la sequenza temporale in orizzontale o in verticale.
- Strumento Zoom (3 o #): trascina per aumentare lo zoom di un'area specifica della cronologia.
- Strumento di misurazione del tempo (4 o $): trascina per contrassegnare un intervallo di tempo. Verrà visualizzata la durata dell'intervallo contrassegnato. Puoi anche utilizzare la chiave 'm' per contrassegnare una selezione e determinarne la durata totale.
- Zoom sugli eventi selezionati (F): seleziona uno o più eventi e premi il tasto F per aumentare rapidamente lo zoom della parte della sequenza temporale in questione. Questa opzione è utile per concentrarsi su un determinato passaggio dell'addestramento.
Quando gestisce un numero elevato di eventi traccia, il Visualizzatore tracce funziona in modalità streaming. Ciò significa che carica i dati su richiesta mentre esegui la panoramica e lo zoom sulla cronologia, in modo simile al funzionamento delle applicazioni di mappe. Se aumenti lo zoom più velocemente di quanto i dati possano essere caricati, potresti visualizzare una rappresentazione a bassa risoluzione dei dati fino al completamento del caricamento.
Componenti dell'interfaccia del visualizzatore di tracce
Di seguito sono riportati i componenti principali dell'interfaccia utente in Trace Viewer:
- L'asse del tempo è in orizzontale nella parte superiore e mostra il tempo rispetto all'inizio della traccia.
- Le sequenze temporali sono organizzate per sezioni e tracce, con le etichette situate sull'asse verticale di sinistra. Ogni sezione rappresenta un elemento di elaborazione (ad esempio un nodo del dispositivo o thread host) e può essere espansa o compressa. All'interno di ogni sezione sono presenti i canali, ovvero le tempistiche di attività specifiche.
- Gli eventi sono i blocchi rettangolari colorati nei canali della sequenza temporale, che rappresentano la durata di un'operazione o di un meta-evento come un passaggio di allenamento. Il colore degli eventi non ha un significato specifico.
- Il riquadro dei dettagli mostra informazioni aggiuntive sugli eventi selezionati nel riquadro della sequenza temporale, ad esempio il nome, l'ora di inizio e la durata.
Sezioni e canali tipici
Trace Viewer fornisce le seguenti sezioni e canali.
- Una sezione per ogni nodo TPU, con i seguenti canali:
- Modulo XLA: il programma XLA in esecuzione.
- XLA Ops: mostra le operazioni XLA HLO eseguite sul core TPU. Ogni operazione del framework di livello superiore (ad esempio JAX, Tensorflow o PyTorch) viene tradotta in una o più operazioni XLA, che vengono poi compilate per essere eseguite sulla TPU. Quando fai clic su un'operazione XLA, puoi vedere i link all'operazione nel visualizzatore di grafici, insieme a informazioni aggiuntive sull'operazione, come le ore di inizio/arresto, la durata e la traccia dello stack di origine (se resa disponibile dal framework e dal compilatore).
- XLA TraceMe: annotazioni specificate dall'utente nel codice che descrivono le unità di lavoro logiche che intende monitorare. Potresti comunque visualizzare i dati qui anche se non hai aggiunto annotazioni. Queste vengono in genere aggiunte da XLA (ad es. core barriera) o dalla stessa XProf (ad es. voci di traccia eliminate).
- Passaggio: mostra la durata dei passaggi di addestramento in esecuzione sul core TPU, se annotati in modo appropriato nel programma o nel framework dell'utente.
- Operazioni del framework: mostra le operazioni del framework (ad esempio JAX, Tensorflow o PyTorch) eseguite sul core TPU, se opportunamente annotate nel programma o nel framework dell'utente.
- Ambito del nome del framework: per ogni operazione del framework, una visualizzazione della traccia di stack. Per brevità, questo canale viene visualizzato solo per un singolo dispositivo.
- Codice sorgente: percorso del codice sorgente in esecuzione, se disponibile nel profilo.
- Unità scalare: per le TPU, gli eventi in esecuzione nell'unità scalare, visualizzati se presenti nel profilo.
- TensorCore Sync Flags: meccanismo di sincronizzazione sulle TPU, visualizzato se presente nel profilo.
- Offload dell'host: operazioni che spostano in modo asincrono i dati tra la memoria dell'host e la memoria dell'acceleratore. In genere, nella riga XLA Ops sono presenti operazioni di inizio e arresto corrispondenti che indicano che l'acceleratore si sta preparando per il trasferimento dei dati (ad es. contrassegnare le regioni di memoria di origine/destinazione come "in uso" per la durata del trasferimento). Potrebbero essere presenti più righe di offload dell'host se sono in esecuzione più operazioni di offload in parallelo, il che richiede al visualizzatore della traccia di mostrare contemporaneamente più eventi.
- Una sezione per ogni nodo Sparsecore: alcune generazioni di TPU (ad es. TPU v5p e TPU v6e) sono opremite con una o più unità SparseCore oltre alle unità MXU per il calcolo ad alta densità; i moduli, le operazioni e i TraceMe associati a questi core verranno visualizzati in questa sezione.
- Una sezione per ogni nodo GPU, con i seguenti canali:
- Moduli XLA, operazioni del framework, ambito del nome del framework, passaggi, codice sorgente. Sono tutte simili alle sezioni TPU.
- Un canale per stream, con il nome dello stream che include anche informazioni sui tipi di operazioni eseguite sullo stream (Memcpy, Compute e così via).
- XLA TraceMe non è supportato per le GPU.
- Le operazioni XLA vengono visualizzate nelle sezioni GPU, ma al momento non sono sempre accurate, poiché derivano dai dati dello stream. Pertanto, non possono tenere conto completamente del modello di esecuzione della GPU, in cui potrebbe esserci un mapping N:M delle operazioni XLA ai kernel effettivi che vengono eseguiti sui diversi stream e la pianificazione dinamica di più stream su diversi SM nell'hardware.
- Una sezione per ogni componente (ad es. un threadpool) in esecuzione sulla CPU della macchina ospitante, con un canale per thread, nel caso dei threadpool. Qui vedrai anche le tracce di Python se sono state attivate durante la raccolta del profilo.
Tieni presente che solo le operazioni XLA per le TPU e i dati in streaming per le GPU sono direttamente basate sul profilo raccolto; tutte le altre righe sono "righe derivate", che includono informazioni facoltative "sideband" fornite dal compilatore, annotazioni facoltative dell'utente e/o heuristics applicate da XProf. Pertanto, queste linee ricavate possono o meno essere visualizzate in determinati profili.
Altre funzionalità
- Puoi cercare nomi di eventi specifici utilizzando la barra di ricerca "Trova eventi". Al momento, la ricerca viene eseguita solo all'interno dell'intervallo di tempo visibile sullo schermo, e non nell'intera traccia.
- Eventi di flusso: se attivi questa opzione facendo clic sul pulsante "Eventi di flusso" nella barra superiore, vengono aggiunte visualizzazioni che collegano gli eventi in un thread o in una riga agli eventi in un'altra riga del thread. Ad esempio, potrebbe essere presente una freccia che va dall'operazione sull'host che mette in coda o avvia il lavoro per un acceleratore all'operazione sull'acceleratore che esegue il lavoro. XProf determina questi link tramite una combinazione di annotazioni utente, regole di euristica predefinite e informazioni di post-elaborazione che riceve da diversi componenti (ad es. Driver CUPTI, ID di avvio del kernel, informazioni sul runtime TPU e così via).
- Se fai clic su un'operazione XLA, vengono visualizzate ulteriori informazioni nel riquadro dei dettagli. Ad esempio, rimanda all'operazione nello strumento Visualizzatore grafico. Potrebbe anche fornire riferimenti al codice sorgente e/o alla traccia dello stack di Python, all'operazione del framework che ha causato la generazione di questa operazione XLA e così via (se presente nel profilo). Potrebbe anche mostrare FLOPS (numero di operazioni con virgola mobile eseguite dall'operazione) e byte a cui ha eseguito l'accesso l'operazione. Queste informazioni vengono acquisite in modo statico da XLA durante la compilazione, anziché informazioni di runtime del profilo.