Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Profilazione del modello con gli strumenti Cloud TPU

.

La profilazione del modello consente di ottimizzare le prestazioni dell'addestramento sulle Cloud TPU. Per profilare il tuo modello, utilizza TensorBoard e il plug-in TensorBoard di Cloud TPU. Per le istruzioni di installazione, consulta le istruzioni di installazione di TensorBoard.

Per ulteriori informazioni sull'utilizzo di TensorBoard con uno dei framework supportati, consulta i seguenti documenti:

Prerequisiti

TensorBoard è installato come parte di TensorFlow. TensorFlow è installato per impostazione predefinita nei nodi Cloud TPU. Puoi anche installare TensorFlow manualmente. In ogni caso, potrebbero essere necessarie alcune dipendenze aggiuntive. Installa questi file eseguendo il comando:

(vm)$ pip3 install --user -r /usr/share/models/official/requirements.txt

Installa il plug-in TensorBoard di Cloud TPU

Accedi tramite SSH al tuo nodo TPU:

$ gcloud compute ssh your-vm --zone=your-zone

Esegui questi comandi:

  pip3 install --upgrade "cloud-tpu-profiler>=2.3.0"
  pip3 install --user --upgrade -U "tensorboard>=2.3"
  pip3 install --user --upgrade -U "tensorflow>=2.3"

Acquisizione di un profilo

Puoi acquisire un profilo utilizzando l'interfaccia utente di TensorBoard o in modo programmatico.

Acquisire un profilo utilizzando TensorBoard

Quando avvii TensorBoard, viene avviato un server web. Quando posizioni il browser sull'URL di TensorBoard, viene visualizzata una pagina web. La pagina web ti consente di acquisire manualmente un profilo e visualizzarne i dati.

Avvia il server Profiler di TensorFlow

tf.profiler.experimental.server.start(6000)

Viene avviato il server del profiler TensorFlow sulla VM VM.

Inizia lo script per l'addestramento

Esegui lo script di addestramento e attendi fino a visualizzare l'output che indica che il modello è in addestramento attivo. L'aspetto dipende dal codice e dal modello. Cerca l'output come Epoch 1/100. In alternativa, puoi andare alla pagina Cloud TPU nella console Google Cloud, selezionare la tua TPU e visualizzare il grafico di utilizzo della CPU. Anche se questo non mostra l'utilizzo della TPU, è comunque una buona indicazione che il tuo modello sia in fase di addestramento.

Avvia il server TensorBoard

Apri una nuova finestra del terminale e connettiti alla tua VM TPU con il port forwarding. Ciò consente al browser locale di comunicare con il server TensorBoard in esecuzione sulla VM TPU.

 gcloud compute tpus execution-groups ssh your-vm --zone=us-central1-a --ssh-flag="-4 -L 9001:localhost:9001"
 

Esegui TensorBoard nella finestra del terminale che hai appena aperto e specifica la directory in cui TensorBoard può scrivere i dati di profilazione con il flag --logdir. Ad esempio:

TPU_LOAD_LIBRARY=0 tensorboard --logdir your-model-dir --port 9001

TensorBoard avvia un server web e visualizza il relativo URL:

Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.3.0 at http://localhost:9001/ (Press CTRL+C to quit)

Apri un browser web e vai all'URL visualizzato nell'output di TensorBoard. Assicurati che TensorBoard abbia caricato completamente i dati di profilazione facendo clic sul pulsante Ricarica nell'angolo in alto a destra della pagina TensorBoard. Per impostazione predefinita, viene visualizzata la pagina TensorBoard con la scheda Scalars selezionata.

immagine

Acquisisci un profilo sui nodi TPU

  1. Seleziona PROFILO dal menu a discesa nella parte superiore dello schermo.
  2. Seleziona il pulsante CAPTURE PROFILE
  3. Seleziona il pulsante di opzione Nome TPU.
  4. Digita il tuo nome TPU
  5. Seleziona il pulsante CAPTURE

Acquisire un profilo in modo programmatico

L'acquisizione programmatica di un profilo dipende dal framework ML utilizzato.

Se utilizzi TensorFlow, avvii e interrompi rispettivamente il profiler utilizzando tf.profiler.experimental.start() e tf.profiler.experimental.stop(). Per saperne di più, consulta la guida alle prestazioni di TensorFlow.

Se utilizzi JAX, utilizza jax.profiler.start_trace() e jax.profiler.stop_trace() per avviare e interrompere rispettivamente il profiler. Per saperne di più, consulta Profilazione di programmi JAX.

Acquisisci i problemi comuni del profilo

A volte, quando provi a rilevare una traccia, potresti vedere messaggi simili al seguente:

No trace event is collected after xx attempt(s). Perhaps, you want to try again
(with more attempts?).Tip: increase number of attempts with --num_tracing_attempts.
Failed to capture profile: empty trace result

Questo può accadere se la TPU non esegue attivamente i calcoli, una fase di addestramento richiede troppo tempo o per altri motivi. Se viene visualizzato questo messaggio, prova a procedere nel seguente modo:

  • Prova ad acquisire un profilo dopo che sono stati eseguiti alcuni periodi.
  • Prova ad aumentare la durata della profilazione nella finestra di dialogo Acquisisci profilo di TensorBoard. È possibile che un passaggio di formazione stia richiedendo troppo tempo.
  • Assicurati che VM e TPU abbiano la stessa versione TF.

Visualizzare i dati del profilo con TensorBoard

La scheda Profilo viene visualizzata dopo aver acquisito alcuni dati del modello. Potrebbe essere necessario fare clic sul pulsante Ricarica nell'angolo in alto a destra della pagina TensorBoard. Una volta che i dati sono disponibili, facendo clic sulla scheda Profilo viene visualizzata una selezione di strumenti utili per l'analisi del rendimento:

Visualizzatore tracce

Trace visualizzatore è uno strumento di analisi delle prestazioni di Cloud TPU disponibile in Profilo. Lo strumento utilizza il visualizzatore di profilazione degli eventi di traccia di Chrome, quindi funziona solo nel browser Chrome.

Il visualizzatore traccia mostra una sequenza temporale che mostra:

  • Durata delle operazioni eseguite dal tuo modello TensorFlow .
  • Quale parte del sistema (TPU o macchina host) ha eseguito un'operazione. In genere, la macchina host esegue operazioni di feed, che preelaborano i dati di addestramento e li trasferisce alla TPU, mentre la TPU esegue l'addestramento del modello effettivo.

Trace visualizzatore consente di identificare i problemi di prestazioni nel modello, quindi di adottare misure per risolverli. Ad esempio, a livello generale, puoi identificare se l'addestramento con feed o modelli richiede più tempo. Visualizzando in dettaglio, puoi identificare quali operazioni TensorFlow richiedono più tempo di esecuzione.

Tieni presente che il visualizzatore tracce è limitato a 1 milione di eventi per Cloud TPU. Se devi valutare più eventi, utilizza invece il visualizzatore di tracce di streaming.

Interfaccia visualizzatore Trace

Per aprire il visualizzatore tracce, vai su TensorBoard, fai clic sulla scheda Profilo nella parte superiore dello schermo e scegli trace_viewer dal menu a discesa Strumenti. Viene visualizzato lo spettatore contenente la tua esecuzione più recente:

immagine

Questa schermata contiene i seguenti elementi principali (contrassegnati da numeri sopra):

  1. Menu a discesa Esecuzioni. Contiene tutte le esecuzioni per le quali hai acquisito le informazioni di traccia. La visualizzazione predefinita è l'esecuzione più recente, ma puoi aprire il menu a discesa per selezionare un'esecuzione diversa.
  2. Menu a discesa Strumenti. Seleziona diversi strumenti di profilazione.
  3. Menu a discesa Host. Seleziona un host che contiene un set Cloud TPU.
  4. Riquadro Spostamenti Mostra le operazioni eseguite da Cloud TPU e dalla macchina host nel tempo.
  5. Riquadro dei dettagli. Mostra ulteriori informazioni per le operazioni selezionate nel riquadro Spostamenti.

Osserva più da vicino il riquadro della sequenza temporale:

immagine

Il riquadro Spostamenti contiene i seguenti elementi:

  1. Barra superiore. Contiene vari controlli ausiliari.
  2. Asse temporale. Mostra il tempo relativo all'inizio della traccia.
  3. Etichette di sezioni e tracce. Ogni sezione contiene più tracce e ha un triangolo a sinistra su cui puoi fare clic per espandere e comprimere la sezione. Esiste una sola sezione per ogni elemento di elaborazione nel sistema.
  4. Selettore strumenti. Contiene vari strumenti per interagire con lo spettatore in Trace.
  5. Eventi. Mostrano il tempo durante il quale è stata eseguita un'operazione o la durata di meta-eventi, ad esempio i passaggi di addestramento.
  6. Barra delle schede verticale. Questo non ha uno scopo utile per Cloud TPU. La barra fa parte dello strumento di visualizzazione di tracce per uso generico fornito da Chrome, utilizzato per svolgere diverse attività di analisi delle prestazioni.

Sezioni e tracce

Il visualizzatore di tracce contiene le seguenti sezioni:

  • Una sezione per ogni nodo TPU, etichettata con il numero del chip TPU e del nodo TPU all'interno del chip (ad esempio, "Chip 2: TPU Core 1"). Ogni sezione del nodo TPU contiene le tracce seguenti:
    • Passaggio. Mostra la durata dei passaggi di addestramento eseguiti sulla TPU.
    • Ops TensorFlow. Mostra le operazioni di TensorFlow eseguite sulla TPU.
    • Ops XLA. Mostra le operazioni XLA eseguite sulla TPU. Ogni operazione viene tradotta in una o più operazioni XLA. Il compilatore XLA traduce le operazioni XLA in codice che viene eseguito sulla TPU.
  • Una sezione per i thread in esecuzione sulla CPU della macchina host,etichettata "Thread host". La sezione contiene una traccia per ogni thread di CPU. Nota: puoi ignorare le informazioni visualizzate accanto alle etichette della sezione.

Selettore dello strumento Cronologia

Puoi interagire con la visualizzazione della sequenza temporale utilizzando il selettore degli strumenti della sequenza temporale in TensorBoard. Puoi fare clic su uno strumento della sequenza temporale oppure utilizzare le seguenti scorciatoie da tastiera per attivare ed evidenziare uno strumento. Per spostare il selettore dello strumento Cronologia, fai clic nell'area tratteggiata in alto, quindi trascina il selettore nella posizione che preferisci.

Utilizza gli strumenti di sequenza temporale come segue:

Strumento di selezione
Fai clic su un evento per selezionarlo o trascinalo per selezionarne più di uno. Nel riquadro dei dettagli verranno visualizzate ulteriori informazioni sull'evento o sugli eventi selezionati (nome, ora di inizio e durata).

Strumento Panoramica
Trascina per eseguire una panoramica orizzontale e verticale della panoramica temporale.

Strumento Zoom
Trascina verso l'alto per aumentare lo zoom o trascina verso il basso per diminuire lo zoom lungo l'asse orizzontale (tempo). La posizione orizzontale del cursore determina il centro intorno al quale viene effettuato lo zoom.

Nota: lo strumento Zoom dispone di un bug noto per cui lo zoom rimane attivo se rilasci il pulsante del mouse mentre il cursore del mouse si trova all'esterno della visualizzazione Cronologia. Se ti dovesse accadere, basta fare clic brevemente sulla visualizzazione della sequenza temporale per interrompere lo zoom.

Strumento cronologico
Trascina in orizzontale per contrassegnare un intervallo di tempo. La durata dell'intervallo viene visualizzata sull'asse del tempo. Per regolare l'intervallo, trascinane le estremità. Per cancellare l'intervallo, fai clic su un punto qualsiasi della visualizzazione della sequenza temporale.

Tieni presente che l'intervallo rimane contrassegnato se selezioni uno degli altri strumenti.

Grafici

TensorBoard fornisce una serie di visualizzazioni, o grafici, del modello e delle relative prestazioni. Utilizza i grafici insieme al visualizzatore di tracce o al visualizzatore di tracce di streaming per perfezionare i modelli e migliorarne le prestazioni su Cloud TPU.

Grafico del modello

Il framework di modellazione potrebbe generare un grafico dal tuo modello. I dati per il grafico sono archiviati nella directory MODEL_DIR nel bucket di archiviazione specificato con il parametro --logdir. Puoi visualizzare questo grafico senza eseguire capture_tpu_profile.

Per visualizzare il grafico di un modello, seleziona la scheda Grafici in TensorBoard.

immagine

Un singolo nodo nel grafico della struttura rappresenta una singola operazione.

Grafico sulla compatibilità delle TPU

La scheda Grafici include un modulo di controllo della compatibilità che verifica e mostra le operazioni che possono causare problemi quando viene eseguito un modello.

Per visualizzare il grafico sulla compatibilità delle TPU di un modello, seleziona la scheda Graphs in TensorBoard, quindi seleziona l'opzione Compatibilità TPU. Il grafico mostra le operazioni compatibili (valide) in verde e le operazioni non compatibili (non valide) in rosso.

immagine

Un determinato nodo può visualizzare entrambi i colori, ognuno come percentuale delle operazioni di compatibilità di Cloud TPU per quel nodo. Per un esempio, consulta Interpretazione dei risultati di compatibilità.

Il riquadro di riepilogo della compatibilità visualizzato a destra del grafico mostra la percentuale di tutte le operazioni compatibili con Cloud TPU, i relativi attributi e un elenco di operazioni incompatibili per un nodo selezionato.

Fai clic su qualsiasi operazione nel grafico per visualizzare i relativi attributi nel riquadro di riepilogo.

immagine

Tieni presente che il controllo di compatibilità non valuta le operazioni assegnate esplicitamente a un dispositivo non TPU utilizzando il posizionamento manuale del dispositivo. Inoltre, il controllore non compila il modello per l'esecuzione, quindi assicurati di interpretare i risultati come una stima della compatibilità.

Interpretazione dei risultati di compatibilità

Profilo

La scheda Profilo viene visualizzata dopo aver acquisito alcuni dati del modello. Potrebbe essere necessario fare clic sul pulsante Ricarica nell'angolo in alto a destra della pagina TensorBoard. Una volta che i dati sono disponibili, facendo clic sulla scheda Profilo viene visualizzata una selezione di strumenti utili per l'analisi del rendimento:

Pagina di riepilogo del profilo

La pagina Panoramica (overview_page), disponibile in Profilo, offre una visualizzazione di primo livello del rendimento del modello durante un'esecuzione di acquisizione. La pagina mostra una pagina di panoramica aggregata per tutte le TPU, nonché un'analisi complessiva della pipeline di input. Nel menu a discesa Host è disponibile un'opzione per selezionare le singole TPU.

La pagina mostra i dati nei seguenti riquadri:

immagine

  • Riepilogo del rendimento

    • Tempo di passi medio: il tempo di passi medio di tutti i passi campionati
    • Tempo di inattività dell'host: la percentuale di tempo di inattività dell'host
    • Tempo di inattività della TPU: la percentuale di tempo in cui la TPU è rimasta inattiva
    • Utilizzo FLOPS: l'utilizzo percentuale delle unità della matrice TPU
    • Utilizzo della larghezza di banda della memoria: la percentuale di larghezza di banda della memoria utilizzata
  • Grafico dei passi. Visualizza un grafico del tempo di passi del dispositivo (in millisecondi) su tutti i passaggi campionati. L'area blu corrisponde alla parte del tempo del passaggio in cui le TPU erano in attesa in attesa dei dati di input dall'host. L'area rossa mostra per quanto tempo Cloud TPU è stato effettivamente funzionante.

  • Le 10 migliori operazioni di TensorFlow su TPU. Visualizza le operazioni di TensorFlow che hanno consumato più tempo:

    Ogni riga mostra il tempo autonomo di un'operazione (come percentuale del tempo impiegato da tutte le operazioni), il tempo cumulativo, la categoria, il nome e la frequenza FLOPS raggiunta.

  • Ambiente di esecuzione

    • Numero di host utilizzati
    • Tipo di TPU utilizzato
    • Numero di core TPU
    • Dimensioni del batch di addestramento
  • Consiglio per i passaggi successivi. Segnala quando un modello è associato a un input e ogni volta che si verificano problemi con Cloud TPU. Ti suggerisce strumenti che puoi utilizzare per individuare i colli di bottiglia delle prestazioni.

Analizzatore pipeline di input

Lo strumento di analisi delle pipeline di input fornisce approfondimenti sui risultati delle prestazioni. Lo strumento mostra i risultati delle prestazioni del file input_pipeline.json raccolti dallo strumento capture_tpu_profile.

Questo strumento indica immediatamente se il programma è vincolato a un input e può guidarti nelle analisi lato dispositivo e lato host per eseguire il debug di qualsiasi fase della pipeline.

Consulta le indicazioni sul rendimento delle pipeline di input per insight più approfonditi sull'ottimizzazione delle prestazioni della pipeline.

Pipeline di input

Quando un programma TensorFlow legge i dati da un file, inizia nella parte superiore del grafico TensorFlow in modalità pipeline. Il processo di lettura è suddiviso in più fasi di elaborazione dati collegate in serie, in cui l'output di una fase è l'input di quella successiva. Questo sistema di lettura è chiamato pipeline di input.

Una tipica pipeline per la lettura di record dai file prevede le seguenti fasi:

  1. Lettura di file
  2. Pre-elaborazione file (facoltativo)
  3. Trasferimento di file dal computer host al dispositivo

Una pipeline di input inefficiente può rallentare l'applicazione. Un'applicazione è considerata vincolata da un input quando trascorre una parte significativa del tempo nella sua pipeline di input. Utilizza l'analizzatore sintattico della pipeline di input per capire dove la pipeline di input non è efficiente.

Dashboard della pipeline di input

Per aprire l'analizzatore sintattico della pipeline di input, seleziona Profilo, quindi seleziona input_pipeline_analyzer dal menu a discesa Strumenti.

La dashboard contiene tre sezioni:

immagine

  1. Riepilogo. Riepiloga la pipeline di input in generale con informazioni relative al fatto che la tua applicazione sia collegata all'input e, in caso affermativo, alla sua qualità.
  2. Analisi lato dispositivo. Mostra risultati dettagliati dell'analisi lato dispositivo, inclusi il tempo di passaggio del dispositivo e l'intervallo di tempo del dispositivo trascorso in attesa dei dati di input relativi ai core in ogni passaggio.
  3. Analisi lato host. Mostra un'analisi dettagliata sul lato host, inclusa un'analisi del tempo di elaborazione dell'input sull'host.
Riepilogo pipeline di input

La prima sezione indica se l'input del programma è vincolato alla presentazione della percentuale di tempo trascorso del dispositivo su un'attesa dell'input da parte dell'host. Se utilizzi una pipeline di input standard strumentata, lo strumento segnala dove viene dedicata la maggior parte del tempo di elaborazione. Ad esempio:

immagine

Analisi lato dispositivo

La seconda sezione descrive nel dettaglio l'analisi lato dispositivo, fornendo informazioni sul tempo trascorso sul dispositivo e sull'host e sul tempo impiegato dal dispositivo in attesa dei dati di input dell'host.

immagine

  1. Statistiche relative al tempo di passaggio del dispositivo. Indica la deviazione media, la deviazione e l'intervallo (minimo, massimo) del tempo di passaggio del dispositivo.
  2. Tempo di passaggio. Visualizza un grafico del tempo di passi del dispositivo (in millisecondi) su tutti i passaggi campionati. L'area blu corrisponde alla parte del passaggio in cui le Cloud TPU sono rimaste inattive in attesa dei dati di input dall'host. L'area rossa mostra per quanto tempo Cloud TPU è stato effettivamente funzionante.
  3. Percentuale di tempo di attesa dei dati di input. Indica la deviazione standard media e l'intervallo (minimo, massimo) della frazione di tempo trascorso su un dispositivo in attesa che i dati di input vengano normalizzati rispetto al tempo totale del passaggio del dispositivo.
  4. Intervallo di tempo del dispositivo sui core utilizzati, in attesa di dati di input, in base al numero di passaggi. Visualizza un grafico a linee che mostra la quantità di tempo del dispositivo (espressa come percentuale del tempo totale del passaggio del dispositivo) trascorsa in attesa dell'elaborazione dei dati di input. La frazione di tempo trascorso varia da core a core, quindi l'intervallo di frazioni per ogni core viene tracciato anche per ogni passaggio. Poiché il tempo impiegato da un passaggio è determinato dal core più lento, vuoi che l'intervallo sia il più piccolo possibile.
Analisi lato host

La sezione 3 mostra i dettagli dell'analisi lato host, i report sul tempo di elaborazione di input (il tempo trascorso sulle operazioni dell'API Dataset) sull'host suddiviso in diverse categorie:

  • Memorizzazione in coda dei dati da trasferire sul dispositivo Tempo trascorso per inserire i dati in una coda in-feed prima di trasferirli al dispositivo.
  • Pre-elaborazione dei dati. Tempo impiegato per operazioni di pre-elaborazione, come la decompressione delle immagini.
  • Lettura anticipata dei dati dai file. Tempo impiegato per la lettura dei file, tra cui memorizzazione nella cache, precaricamento e interfoliazione.
  • Lettura dei dati dai file on demand. Tempo di lettura dei dati dei file senza memorizzazione nella cache, precaricamento e interconnessione.
  • Altre operazioni di lettura o trattamento dei dati. Tempo impiegato per altre operazioni correlate all'input non utilizzando tf.data.

immagine

Per visualizzare le statistiche relative alle singole operazioni di input e alle relative categorie suddivise per tempo di esecuzione, espandi la sezione "Mostra statistiche Op di input".

Viene visualizzata una tabella di dati di origine come la seguente:

immagine

Ogni voce della tabella contiene le seguenti informazioni:

  1. Input Op. Mostra il nome dell'operazione di TensorFlow dell'operazione di input.
  2. Conteggio. Mostra il numero totale di istanze dell'operazione eseguita durante il periodo di profilazione.
  3. Tempo totale (in ms). Mostra la somma cumulativa del tempo trascorso su ciascuna istanza dell'operazione.
  4. %tempo totale: mostra il tempo totale trascorso in un'operazione come frazione del tempo totale trascorso nell'elaborazione dell'input.
  5. Tempo totale totale (in ms). Mostra la somma cumulativa del tempo personale speso in ciascuna di queste istanze. Il tempo dedicato alla misurazione misura il tempo trascorso all'interno del corpo della funzione, escludendo il tempo trascorso nella funzione che chiama. Ad esempio, Iterator::PaddedBatch::Filter::ForeverRepeat::Map è chiamato da Iterator::PaddedBatch::Filter, pertanto il tempo totale totale viene escluso dal tempo totale totale di quest'ultimo.
  6. % tempo self-service totale. Mostra il tempo self-service totale come frazione del tempo totale trascorso in fase di elaborazione dell'input.
  7. Categoria. Mostra la categoria di elaborazione dell'operazione di input.

Profilo op

Il profilo operativo è uno strumento Cloud TPU che mostra le statistiche sulle prestazioni delle operazioni XLA eseguite durante un periodo di profilazione. Il profilo operativo mostra:

  • In che misura la tua applicazione utilizza Cloud TPU come percentuale di tempo trascorso sulle operazioni per categoria e utilizzo di FLOPS di TPU.
  • Le operazioni più lunghe. Queste operazioni sono potenziali obiettivi di ottimizzazione.
  • Dettagli di singole operazioni, tra cui forma, spaziatura interna ed espressioni che utilizzano l'operazione.

Puoi utilizzare il profilo op per trovare buoni target per l'ottimizzazione. Ad esempio, se il modello raggiunge solo il 5% dei FLOPS di picco di TPU, puoi utilizzare lo strumento per identificare le operazioni XLA che richiedono più tempo di esecuzione e il numero di FLOPS di TPU consumati.

Utilizzo del profilo operativo

Durante la raccolta del profilo, capture_tpu_profile crea anche un file op_profile.json contenente statistiche sulle prestazioni delle operazioni XLA.

Puoi visualizzare i dati di op_profile in TensorBoard facendo clic sulla scheda Profilo nella parte superiore dello schermo e selezionando op_profile dal menu a discesa Strumenti. Vedrai uno schermo come questo:

immagine

  1. Sezione Panoramica. Mostra l'utilizzo di Cloud TPU e fornisce suggerimenti per l'ottimizzazione.
  2. Pannello di controllo. Contiene controlli che ti consentono di impostare il numero di operazioni visualizzate nella tabella, quali operazioni vengono visualizzate e come vengono ordinate.
  3. Tabella delle operazioni. Una tabella che elenca le principali categorie di operazioni di TensorFlow associate alle operazioni XLA. Queste operazioni sono ordinate in base alla percentuale di utilizzo di Cloud TPU.
  4. Schede dei dettagli dell'operatore. Dettagli sull'operazione visualizzati quando passi il mouse sopra l'operazione nella tabella. Questi includono l'utilizzo di FLOPS, l'espressione in cui viene utilizzata l'operazione e il layout dell'opera (fit).
Tabella XLA Op

La tabella delle operazioni elenca le categorie di operazioni XLA in ordine decrescente, dalla percentuale più alta all'utilizzo di Cloud TPU. Inizialmente, la tabella mostra la percentuale di tempo impiegato, il nome della categoria op, il nome dell'operazione TensorFlow associato e la percentuale di utilizzo FLOPS per la categoria. Per visualizzare (o nascondere) le 10 operazioni XLA che richiedono più tempo per una categoria, fai clic sul triangolo accanto al nome della categoria nella tabella.

immagine

  1. Ora. Mostra la percentuale totale del tempo trascorso da tutte le operazioni in quella categoria. Puoi fare clic per espandere la voce e vedere la suddivisione del tempo per ogni singola operazione.
  2. 10 operazioni principali. L'opzione di attivazione/disattivazione accanto al nome di una categoria mostra/nasconde le prime 10 operazioni che richiedono più tempo. Se una voce di operazione di fusione è visualizzata nell'elenco delle operazioni, puoi espanderla per vedere le operazioni non di fusione ed elementi contenute.
  3. TensorFlow Op. Mostra il nome dell'operazione TensorFlow associato all'operazione XLA.
  4. FLOPS: Mostra l'utilizzo di FLOPS, che è il numero misurato di FLOPS espresso come percentuale del FLOPS di picco di Cloud TPU. Maggiore è la percentuale di utilizzo FLOPS, più rapidamente vengono eseguite le operazioni. La cella della tabella è codificata per colore: verde per un elevato utilizzo FLOPS (buono) e rosso per un basso utilizzo FLOPS (cattivo).
Schede dettagli operazione

Quando selezioni la voce di una tabella, sulla sinistra viene visualizzata una scheda con i dettagli relativi all'operazione XLA o alla categoria dell'operazione. Una scheda tipica ha il seguente aspetto:

immagine

  • Nome e Categoria. Mostra il nome e la categoria dell'operazione XLA evidenziati.
  • Utilizzo di FLOPS. Visualizza l'utilizzo di FLOPS come percentuale del FLOPS totale possibile.
  • Espressionismo. Mostra l'espressione XLA contenente l'operazione.
  • Utilizzo della memoria. Mostra la percentuale di utilizzo massimo della memoria da parte del tuo programma.
  • Layout (solo operazioni Convolution). Mostra la forma e il layout di un tensore, incluso se la forma del tensore si adatta perfettamente alle unità della matrice e come viene riempita la matrice.
Interpretazione dei risultati

Per le operazioni di convoluzione, l'utilizzo dei FLOPS TPU può essere basso per uno o entrambi i seguenti motivi:

  • spaziatura interna (le unità della matrice sono parzialmente utilizzate)
  • operazione di convoluzione legata alla memoria

Questa sezione fornisce un'interpretazione di alcuni numeri di un modello diverso in cui gli FLOP erano bassi. In questo esempio, la fusione di output e la convolution hanno dominato i tempi di esecuzione e si è verificata una lunga coda di operazioni scalari o vettoriali che avevano FLOPS molto bassi.

Una strategia di ottimizzazione per questo tipo di profilo consiste nel trasformare le operazioni vettoriali o scalari in operazioni di convoluzione.

Nel seguente esempio, %convolution.399 mostra un FLOPS e un utilizzo della memoria inferiori rispetto a %convolution.340 nell'esempio precedente.

immagine

Esamina il layout e nota che la dimensione del batch 16 è stata aggiunta alla 128 e che la dimensione della funzionalità 3 è stata aggiunta alla 8. Ciò indica che solo il 5% delle unità della matrice viene utilizzato in modo efficace. (il calcolo per questa istanza di percentuale di utilizzo è (((batch_time * num_of_features) / padding_size ) / num_of_cores). Confronta i FLOPS in questo esempio con la %convolution.340 nell'esempio precedente, che si adatta esattamente alla matrice.

Visualizzatore pod

Lo strumento Visualizzatore pod fornisce visualizzazioni delle prestazioni per ogni core in un pod e mostra lo stato dei canali di comunicazione tra i core di un pod. Visualizzatore pod può identificare ed evidenziare i potenziali colli di bottiglia e le aree che richiedono un'ottimizzazione. Lo strumento funziona per i pod completi e per tutte le sezioni di pod v2 e v3.

Per visualizzare lo strumento Visualizzatore pod:

  1. Seleziona Profile (Profilo) dal pulsante del menu in alto a destra nella finestra di TensorBoard.
  2. Fai clic sul menu Strumenti sul lato sinistro della finestra e seleziona pod_viewer.

L'interfaccia utente del visualizzatore pod include:

  1. Un dispositivo di scorrimento del passaggio, che consente di selezionare il passaggio da esaminare.
  2. Un grafico di topologia, che mostra in modo interattivo i tuoi core TPU nell'intero sistema TPU.
  3. Un grafico sui link di comunicazione che mostra i canali di invio e ricezione (recv) nel grafico della topologia.
  4. Grafico a barre della latenza dei canali di invio e ricezione. Passa il mouse sopra una barra in questo grafico per attivare i link di comunicazione nel grafico dei link di comunicazione. Nella barra a sinistra viene visualizzata una scheda dei dettagli del canale con informazioni dettagliate sul canale, ad esempio le dimensioni dei dati trasferiti, la latenza e la larghezza di banda.
  5. Un grafico con analisi dei passaggi che mostra l'analisi dettagliata di un passaggio per tutti i core. Può essere utilizzato per monitorare i colli di bottiglia del sistema e se un particolare core rallenta il sistema.

immagine

Dispositivo di scorrimento Passaggio

Utilizza il dispositivo di scorrimento per selezionare un passaggio. Il resto dello strumento visualizza statistiche, come l'analisi dettagliata dei passaggi e i link di comunicazione per quel passaggio.

Grafico topologia

Il grafico di topologia è organizzato in modo gerarchico per host, chip e core. I rettangoli più piccoli sono core TPU. Due core indicano insieme un chip TPU e quattro chip.

immagine

Il grafico della topologia è anche una mappa termica, codificata per percentuale di tempo necessario per un'analisi specifica (ad esempio, computing flop elevato, infeed, invio e così via) nel passaggio selezionato. La barra sotto il grafico della topologia (mostrata nella figura seguente) mostra una codifica a colori per l'utilizzo di core e chip. Il colore dei core mostra l'utilizzo dal giallo al blu. Per i calcoli ad alta frequenza, i numeri più grandi (colore più scuro) indicano più tempo da dedicare alle operazioni di calcolo. Per tutte le altre suddivisioni, i numeri più piccoli (colori più chiari) indicano tempi di attesa più piccoli. Le aree con problemi potenziali, o hotspot, vengono indicate quando un core è più scuro degli altri.

Fai clic sul selettore del menu a discesa accanto al nome del sistema (cerchiato nel diagramma) per scegliere il tipo specifico di suddivisione che vuoi esaminare.

Passa il mouse sopra uno dei rettangoli singoli (singoli core) per visualizzare un suggerimento tecnico che mostra la posizione del core nel sistema, il suo ID chip globale e il nome host. Il suggerimento tecnico include anche la durata della categoria di suddivisione selezionata, ad esempio Flop elevati, e la percentuale di utilizzo al di fuori di un passaggio.

immagine

Canali di comunicazione

Questo strumento aiuta a visualizzare i link di invio e ricezione se il modello li utilizza per comunicare tra i core. Se il tuo modello contiene operazioni di invio e ricezione, puoi utilizzare un selettore di ID canale per selezionare un ID canale. Un link di origine e di origine (src) rappresenta il canale di comunicazione. Viene visualizzato nel grafico della topologia passando il mouse sopra le barre del grafico che mostrano la latenza dei canali di invio e ricezione.

immagine

Nella barra a sinistra viene visualizzata una scheda che fornisce ulteriori dettagli sul canale di comunicazione. Una scheda tipica ha il seguente aspetto:

immagine

  1. Data Transfer, che mostra i dati trasferiti dal canale di invio e ricezione in memibyte (MiB).
  2. Latenza, che mostra la durata, in microsecondi, dall'inizio dell'evento di invio alla fine dell'evento completato in risposta.
  3. BW, che mostra la quantità di dati trasferiti, in gibibit (GiB), dal core di origine a quello di destinazione nel periodo di tempo.
  4. Ritardo dell'invio, che corrisponde alla durata dall'inizio della risposta all'inizio dell'invio in microsecondi. Se l'operazione consigliata viene avviata dopo l'inizio dell'operazione di invio, il ritardo è pari a zero.
  5. Nomi Hlo, che mostra i nomi delle operazioni XLA associate a questo canale. Questi nomi hlo sono associati alle statistiche visualizzate in altri strumenti TensorBoard come op_profile e memory_viewer.

Grafico di suddivisione dei passaggi

Questo grafico fornisce dettagli per ogni fase di addestramento o valutazione.

L'asse x è l'ID chip globale e l'asse y è il tempo in microsecondi. In questo grafico puoi vedere dove viene utilizzato il tempo in una determinata fase di addestramento, dove si trovano eventuali colli di bottiglia e se è presente uno squilibrio del carico tra tutti i chip.

immagine

Nella barra a sinistra viene visualizzata una scheda con ulteriori dettagli sulla suddivisione dei passaggi. Una scheda tipica ha il seguente aspetto:

immagine

I campi della scheda consentono di specificare quanto segue:

  1. High Flops Compute, ovvero il tempo impiegato per operazioni di convoluzione o fusione di output (ops).
  2. Numero ridotto di flop, che viene calcolato sottraendo tutti gli altri gruppi dalla durata totale.
  3. Infeed, ovvero il tempo che la TPU trascorre in attesa sull'host.
  4. Outfeed, ovvero il tempo che l'host trascorre in attesa sull'output della TPU.
  5. AllReduce di sincronizzazione, che è la parte del tempo trascorso sulle operazioni CrossReplicaSum in attesa di sincronizzazione con altri core. Le operazioni CrossReplicaSum calcola la somma tra le repliche.
  6. AllReduce compute, ovvero il tempo di calcolo effettivo trascorso sulle operazioni CrossReplicaSum.
  7. Chip to chip send ops, ovvero il tempo impiegato per l'invio delle operazioni.
  8. Chip per chip di esecuzione delle operazioni di registrazione, ovvero il tempo dedicato alle operazioni di consulenza.

Visualizzatore tracce

Trace visualizzatore è uno strumento di analisi delle prestazioni di Cloud TPU disponibile in Profilo. Lo strumento utilizza il visualizzatore di profilazione degli eventi di traccia di Chrome, quindi funziona solo nel browser Chrome.

Il visualizzatore traccia mostra una sequenza temporale che mostra:

  • Durata delle operazioni eseguite dal tuo modello TensorFlow .
  • Quale parte del sistema (TPU o macchina host) ha eseguito un'operazione. In genere, la macchina host esegue operazioni di feed, che preelaborano i dati di addestramento e li trasferisce alla TPU, mentre la TPU esegue l'addestramento del modello effettivo.

Trace visualizzatore consente di identificare i problemi di prestazioni nel modello, quindi di adottare misure per risolverli. Ad esempio, a livello generale, puoi identificare se l'addestramento con feed o modelli richiede più tempo. Visualizzando in dettaglio, puoi identificare quali operazioni TensorFlow richiedono più tempo di esecuzione.

Tieni presente che il visualizzatore tracce è limitato a 1 milione di eventi per Cloud TPU. Se devi valutare più eventi, utilizza invece il visualizzatore di tracce di streaming.

Interfaccia visualizzatore Trace

Per aprire il visualizzatore tracce, vai su TensorBoard, fai clic sulla scheda Profilo nella parte superiore dello schermo e scegli trace_viewer dal menu a discesa Strumenti. Viene visualizzato lo spettatore contenente la tua esecuzione più recente:

immagine

Questa schermata contiene i seguenti elementi principali (contrassegnati da numeri sopra):

  1. Menu a discesa Esecuzioni. Contiene tutte le esecuzioni per le quali hai acquisito le informazioni di traccia. La visualizzazione predefinita è l'esecuzione più recente, ma puoi aprire il menu a discesa per selezionare un'esecuzione diversa.
  2. Menu a discesa Strumenti. Seleziona diversi strumenti di profilazione.
  3. Menu a discesa Host. Seleziona un host che contiene un set Cloud TPU.
  4. Riquadro Spostamenti Mostra le operazioni eseguite da Cloud TPU e dalla macchina host nel tempo.
  5. Riquadro dei dettagli. Mostra ulteriori informazioni per le operazioni selezionate nel riquadro Spostamenti.

Osserva più da vicino il riquadro della sequenza temporale:

immagine

Il riquadro Spostamenti contiene i seguenti elementi:

  1. Barra superiore. Contiene vari controlli ausiliari.
  2. Asse temporale. Mostra il tempo relativo all'inizio della traccia.
  3. Etichette di sezioni e tracce. Ogni sezione contiene più tracce e ha un triangolo a sinistra su cui puoi fare clic per espandere e comprimere la sezione. Esiste una sola sezione per ogni elemento di elaborazione nel sistema.
  4. Selettore strumenti. Contiene vari strumenti per interagire con lo spettatore in Trace.
  5. Eventi. Mostrano il tempo durante il quale è stata eseguita un'operazione o la durata di meta-eventi, ad esempio i passaggi di addestramento.
  6. Barra delle schede verticale. Questo non ha uno scopo utile per Cloud TPU. La barra fa parte dello strumento di visualizzazione di tracce per uso generico fornito da Chrome, utilizzato per svolgere diverse attività di analisi delle prestazioni.
Sezioni e tracce

Il visualizzatore di tracce contiene le seguenti sezioni:

  • Una sezione per ogni nodo TPU, etichettata con il numero del chip TPU e del nodo TPU all'interno del chip (ad esempio, "Chip 2: TPU Core 1"). Ogni sezione del nodo TPU contiene le tracce seguenti:
    • Passaggio. Mostra la durata dei passaggi di addestramento eseguiti sulla TPU.
    • Ops TensorFlow. Mostra le operazioni di TensorFlow eseguite sulla TPU.
    • Ops XLA. Mostra le operazioni XLA eseguite sulla TPU. Ogni operazione viene tradotta in una o più operazioni XLA. Il compilatore XLA traduce le operazioni XLA in codice che viene eseguito sulla TPU.
  • Una sezione per i thread in esecuzione sulla CPU della macchina host,etichettata "Thread host". La sezione contiene una traccia per ogni thread di CPU. Nota: puoi ignorare le informazioni visualizzate accanto alle etichette della sezione.
Selettore dello strumento Cronologia

Puoi interagire con la visualizzazione della sequenza temporale utilizzando il selettore degli strumenti della sequenza temporale in TensorBoard. Puoi fare clic su uno strumento della sequenza temporale oppure utilizzare le seguenti scorciatoie da tastiera per attivare ed evidenziare uno strumento. Per spostare il selettore dello strumento Cronologia, fai clic nell'area tratteggiata in alto, quindi trascina il selettore nella posizione che preferisci.

Utilizza gli strumenti di sequenza temporale come segue:

Strumento di selezione
Fai clic su un evento per selezionarlo o trascinalo per selezionarne più di uno. Nel riquadro dei dettagli verranno visualizzate ulteriori informazioni sull'evento o sugli eventi selezionati (nome, ora di inizio e durata).

Strumento Panoramica
Trascina per eseguire una panoramica orizzontale e verticale della panoramica temporale.

Strumento Zoom
Trascina verso l'alto per aumentare lo zoom o trascina verso il basso per diminuire lo zoom lungo l'asse orizzontale (tempo). La posizione orizzontale del cursore determina il centro intorno al quale viene effettuato lo zoom.

Nota: lo strumento Zoom dispone di un bug noto per cui lo zoom rimane attivo se rilasci il pulsante del mouse mentre il cursore del mouse si trova all'esterno della visualizzazione Cronologia. Se ti dovesse accadere, basta fare clic brevemente sulla visualizzazione della sequenza temporale per interrompere lo zoom.

Strumento cronologico
Trascina in orizzontale per contrassegnare un intervallo di tempo. La durata dell'intervallo viene visualizzata sull'asse del tempo. Per regolare l'intervallo, trascinane le estremità. Per cancellare l'intervallo, fai clic su un punto qualsiasi della visualizzazione della sequenza temporale.

Tieni presente che l'intervallo rimane contrassegnato se selezioni uno degli altri strumenti.
Eventi

Gli eventi nella sequenza temporale vengono visualizzati in colori diversi, che non hanno un significato specifico.

Barra superiore della sequenza temporale

La barra superiore del riquadro Spostamenti contiene diversi controlli ausiliari:

immagine

  1. Visualizzazione metadati. Non utilizzato per le TPU.
  2. Visualizza le opzioni. Non utilizzato per le TPU.
  3. Casella di ricerca. Inserisci il testo per cercare tutti gli eventi il cui nome contiene il testo. Fai clic sui pulsanti freccia a destra della casella di ricerca per spostarti avanti e indietro tra gli eventi corrispondenti, selezionando ciascun evento a turno.
  4. Pulsante Console. Non utilizzato per le TPU.
  5. Pulsante Guida. Fai clic per visualizzare un riepilogo della guida.
Scorciatoie da tastiera

Di seguito sono riportate le scorciatoie da tastiera che puoi utilizzare in Visualizzatore tracce. Fai clic sul pulsante della guida (?) nella barra superiore per visualizzare altre scorciatoie da tastiera.

    w Zoom in
    s Zoom out
    a Pan left
    d Pan right
    f Zoom to selected event(s)
    m Mark time interval for selected event(s)
    1 Activate selection tool
    2 Activate pan tool
    3 Activate zoom tool
    4 Activate timing tool

La scorciatoia F può essere molto utile. Prova a selezionare un passaggio e premi F per ingrandire rapidamente il passaggio.

Eventi caratteristici

Di seguito sono riportati alcuni tipi di evento che possono essere molto utili quando si analizzano le prestazioni delle TPU.

immagine

  • InfeedDequeueTuple. Questa operazione TensorFlow viene eseguita su una TPU e riceve dati di input provenienti dall'host. Quando l'importazione richiede molto tempo, può significare che le operazioni di TensorFlow che preelaborano i dati sulla macchina host non possono tenere il passo con la percentuale di consumo di dati delle TPU. Puoi vedere gli eventi corrispondenti nelle tracce dell'host chiamate InfeedEnqueueTuple. Per visualizzare un'analisi della pipeline di input più dettagliata, utilizza lo strumento Input Pipeline Analyzer.

  • CrossReplicaSum, Questa operazione TensorFlow viene eseguita su una TPU e calcola una somma tra le repliche. Poiché ogni replica corrisponde a un nodo TPU diverso, l'operazione deve attendere il completamento di un passaggio per tutti i nodi TPU. Se questa operazione richiede molto tempo, potrebbe non significare che l'operazione di somma stessa sia lenta, ma che un nodo TPU sia in attesa di un altro nodo TPU con un feed di dati lento.

immagine

  • Ops set di dati. Il visualizzatore Trace mostra le operazioni del set di dati eseguite durante il caricamento dei dati utilizzando l'API Dataset. Il Iterator::Filter::Batch::ForeverRepeat::Memory nell'esempio viene compilato e corrisponde all'operazione dataset.map() . Usa il visualizzatore traccia per esaminare le operazioni di caricamento durante il debug e la mitigazione dei colli di bottiglia della pipeline di input.

immagine

  • Precarica i thread. L'utilizzo di dataset.prefetch() per il buffer di dati di input può impedire rallentamenti sporadici nell'accesso ai file che creano colli di bottiglia nella pipeline di input.
Che cosa può andare storto

Di seguito sono riportati alcuni problemi potenziali da tenere presenti quando utilizzi il visualizzatore tracce:

  • Limite di visualizzazione degli eventi. Il visualizzatore tracce mostra un massimo di 1 milione di eventi. Se hai acquisito più eventi, viene visualizzato solo il primo milione; quelli successivi vengono eliminati. Per acquisire più eventi TPU, puoi utilizzare il --include_dataset_ops=False flag per richiedere esplicitamente capture_tpu_profile di escludere le operazioni del set di dati.
  • Eventi molto lunghi. Gli eventi che iniziano prima o dopo la fine di un'acquisizione non sono visibili nel visualizzatore tracce. Di conseguenza, gli eventi molto lunghi possono non essere presenti.
  • Quando avviare l'acquisizione della traccia. Assicurati di avviare l'acquisizione delle tracce dopo aver verificato che Cloud TPU è in esecuzione. Se inizi prima di allora, potresti visualizzare solo pochi eventi o nessuno evento nel visualizzatore tracce. Puoi aumentare il tempo di profilazione utilizzando il flag --duration_ms e impostare nuovi tentativi automatici usando il flag --num_tracing_attempts . Ad esempio:

      (vm)$ capture_tpu_profile --tpu=$TPU_NAME
        --logdir=${MODEL_DIR} --duration_ms=60000 --num_tracing_attempts=10
        

Visualizzatore della memoria

Il visualizzatore di memoria ti consente di visualizzare il picco di utilizzo della memoria per il tuo programma e le tendenze di utilizzo della memoria per tutta la durata del programma.

L'interfaccia utente del visualizzatore di memoria ha il seguente aspetto:

immagine

  1. Menu a discesa host. Seleziona per l'host TPU e i moduli XLA High Level Optimization (HLO) da visualizzare.
  2. Panoramica della memoria. Visualizza l'allocazione e le dimensioni della memoria di picco senza spaziatura interna.
  3. Grafico dell'area di lavoro. Mostra l'utilizzo massimo della memoria e un grafico delle tendenze di utilizzo della memoria per tutta la durata del programma. Passa il mouse sopra un buffer in uno dei grafici buffer per aggiungere un'annotazione relativa alla durata del buffer e alla scheda dei dettagli del buffer.
  4. Grafici a buffer. Due grafici che mostrano l'allocazione del buffer nel punto di utilizzo della memoria di picco, come indicato dalla linea verticale nell'area di lavoro. Passa il mouse sopra un buffer in uno dei grafici buffer per visualizzare la barra della durata del buffer nel grafico dell'area di lavoro e una scheda dei dettagli a sinistra.
  5. Scheda Dettagli allocazione del buffer. Visualizza i dettagli di allocazione per un buffer.
Riquadro Panoramica della memoria

Il riquadro Panoramica della memoria (in alto) mostra il nome del modulo e l'allocazione di memoria massima impostata quando le dimensioni totali di allocazione del buffer raggiungono il valore massimo. Viene mostrata anche la dimensione senza restrizioni di allocazione del picco.

immagine

Grafico dell'area di lavoro

Questo grafico mostra l'utilizzo massimo della memoria e un grafico delle tendenze di utilizzo della memoria per tutta la durata del programma. La linea tracciata dall'alto verso il basso del grafico indica il picco di utilizzo della memoria per il programma. Questo punto determina se un programma può rientrare o meno nello spazio di memoria globale disponibile.

immagine

Ogni punto del grafico sovrapposto rappresenta un "punto di programma" nel programma HLO di XLA come programmato dal compilatore. La linea fornisce un'idea della presenza di picco da e verso il picco di utilizzo.

Interazione con gli elementi del grafico del buffer

Quando passi il mouse sopra un buffer visualizzato in uno dei grafici buffer sotto il grafico dell'area di lavoro, viene visualizzata una linea orizzontale per il buffer nel grafico dell'area di lavoro. La linea orizzontale è dello stesso colore del buffer evidenziato.

immagine

Lo spessore della linea orizzontale indica l'entità relativa della dimensione del buffer rispetto all'allocazione della memoria di picco. La lunghezza della riga corrisponde alla durata del buffer, a partire dal punto del programma in cui è stato allocato lo spazio buffer e terminando quando lo spazio è stato liberato.

Grafici a buffer

Due grafici mostrano la suddivisione dell'utilizzo della memoria nel punto di utilizzo massimo (indicato dalla linea verticale nel grafico sopra i grafici).

immagine

  • Per ordine del programma. Visualizza i buffer da sinistra a destra nell'ordine in cui erano attivi durante l'esecuzione del programma. I buffer attivi per il tempo più lungo si trovano sul lato sinistro del grafico.

  • Per dimensione. Visualizza i buffer attivi durante l'esecuzione del programma in ordine di dimensione decrescente. I buffer che hanno avuto l'impatto maggiore al momento del picco di utilizzo della memoria sono sulla sinistra.

Scheda dettagli allocazione buffer

Quando passi il mouse sopra un buffer visualizzato in uno dei grafici del buffer, viene visualizzata una scheda dei dettagli di allocazione del buffer (oltre alla linea temporale visualizzata nel grafico di lavoro). Una scheda dei dettagli tipica ha il seguente aspetto:

immagine

  1. Nome. Nome dell'operazione della XLA.
  2. Categoria. Categoria operazione.
  3. Dimensioni. Dimensioni dell'allocazione del buffer (inclusa la spaziatura interna).
  4. Dimensioni non imbottite. Dimensioni dell'allocazione del buffer senza spaziatura interna.
  5. Espansione. Impatto relativo delle dimensioni del buffer imbottito rispetto alle dimensioni non imbottite.
  6. Memoria extra. Indica la quantità di memoria extra utilizzata per la spaziatura interna.
  7. Forma. Descrive il ranking, le dimensioni e il tipo di dati dell'array N-dimensionale.
  8. Nome operazione TensorFlow. Mostra il nome dell'operazione di TensorFlow associata all'allocazione del buffer.
  9. Tipo di allocazione. Indica la categoria di allocazione del buffer. I tipi sono: Parametro, Output, Thread-locale e Temporaneo (ad esempio, allocazione del buffer all'interno di una fusione).
Errori "Memoria insufficiente"

Se esegui un modello e ricevi un messaggio di errore "esaurimento della memoria", utilizza il comando seguente per acquisire un profilo di memoria e visualizzarlo nel visualizzatore. Assicurati di impostare la durata appropriata in modo che il periodo di profilazione si sovrapponga al tempo di compilazione del programma. L'output può aiutarti a capire la causa dell'errore:

  (vm)$ capture_tpu_profile --tpu=$TPU_NAME --logdir=${MODEL_DIR} --duration_ms=60000
  

Visualizzatore tracce streaming

Il visualizzatore di flussi di dati (trace_viewer) è uno strumento di analisi delle prestazioni di Cloud TPU, disponibile per TensorFlow 2.11.0 o versioni successive, che fornisce il rendering di tracce dinamiche. Lo strumento utilizza il visualizzatore di profilazione degli eventi di traccia di Chrome, quindi funziona solo nel browser Chrome.

Quando utilizzi capture_tpu_profile per acquisire un profilo, viene salvato un file .tracetable nel tuo bucket di archiviazione Google Cloud. Il file contiene un gran numero di eventi di traccia che possono essere visualizzati sia nel visualizzatore tracce sia nel flusso streaming visualizzatore.

Utilizzo del visualizzatore di tracce di streaming

Per utilizzare il visualizzatore di flussi di dati, trace_viewer, devi arrestare la sessione TensorBoard esistente e riavviare TensorBoard utilizzando l'indirizzo IP della TPU che vuoi esaminare. Il visualizzatore tracce in streaming richiede TensorBoard per effettuare una chiamata di procedura remota Google (GRPC) a un indirizzo IP per Cloud TPU. Il canale GRPC non è criptato.

Puoi trovare l'indirizzo IP di un host Cloud TPU nella pagina di Cloud TPU. Individua la tua Cloud TPU e cerca l'indirizzo IP nella colonna IP interno.

Nella tua VM, esegui TensorBoard come segue sostituendo tpu-ip con l'indirizzo IP della tua TPU:

  (vm)$ tensorboard --logdir=${MODEL_DIR} \
    --master_tpu_unsecure_channel=tpu-ip

Lo strumento in TensorBoard viene visualizzato nell'elenco a discesa Strumenti.

immagine

Nella sequenza temporale, puoi aumentare e diminuire lo zoom per visualizzare gli eventi di traccia caricati dinamicamente nel browser.

immagine

Monitoraggio del job Cloud TPU

Questa sezione descrive come utilizzare capture_tpu_profile per acquisire un singolo profilo o monitorare continuamente il tuo job Cloud TPU sull'interfaccia a riga di comando in tempo reale. Se imposti l'opzione --monitoring_level su 0 (impostazione predefinita), 1 o 2, ottieni rispettivamente un singolo profilo, un monitoraggio di base o un monitoraggio dettagliato.

Apri una nuova sessione di Cloud Shell ed esegui l'SSH nella tua VM (sostituisci vm-name nel comando con il tuo nome VM):

  (vm)$ gcloud compute ssh vm-name \
  --ssh-flag=-L6006:localhost:6006

Nella nuova versione di Cloud Shell, esegui capture_tpu_profile con il flag --monitoring_level impostato su 1 o 2, ad esempio:

  (vm)$ capture_tpu_profile --tpu=$TPU_NAME \
   --monitoring_level=1

L'impostazione di monitoring_level=1 genera un output simile al seguente:

    TPU type: TPU v2
    Utilization of TPU Matrix Units is (higher is better): 10.7%

L'impostazione monitoring_level=2 mostra informazioni più dettagliate:

    TPU type: TPU v2
    Number of TPU Cores: 8
    TPU idle time (lower is better): 0.091%
    Utilization of TPU Matrix Units is (higher is better): 10.7%
    Step time: 1.95 kms (avg), 1.90kms (minute), 2.00 kms (max)
    Infeed percentage: 87.5% (avg). 87.2% (min), 87.8 (max)

Flag di Monitoring

  • --tpu (obbligatorio) specifica il nome della Cloud TPU che vuoi monitorare.
  • --monitoring_level. Modifica il comportamento di capture_tpu_profile dalla produzione di un singolo profilo al monitoraggio continuo di base o dettagliato. Sono disponibili tre livelli: Livello 0 (impostazione predefinita): consente di generare un singolo profilo, quindi di uscire. Livello 1: mostra la versione e l'utilizzo della TPU. Livello 2: mostra l'utilizzo di TPU, il tempo di inattività delle TPU e il numero di core TPU utilizzati. Fornisce inoltre tempi di passi minimi, medi e massimi insieme al contributo percentuale dell'annuncio.
  • --duration_ms (facoltativo, il valore predefinito è 1000 ms) specifica per quanto tempo profilare l'host TPU durante ogni ciclo. In genere, questa operazione dovrebbe essere sufficiente per acquisire almeno un passaggio di addestramento. 1 secondo acquisisce un passaggio di addestramento nella maggior parte dei modelli, ma se il tempo di passaggio del modello è molto elevato, puoi impostare il valore su 2x step_time(in ms).
  • --num_queries specifica il numero di cicli per eseguire capture_tpu_profile. Per monitorare continuamente il job TPU, imposta il valore su un numero elevato. Per controllare rapidamente il tempo di passi del modello, imposta il valore su un numero basso.