Profila il tuo modello sui nodi Cloud TPU

La profilazione del modello consente di ottimizzare le prestazioni dell'addestramento sulle Cloud TPU. Per profilare il modello, utilizza TensorBoard e il plug-in Cloud TPU TensorBoard. Per istruzioni sull'installazione, consulta le istruzioni per l'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. Per installarli, esegui:

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

Installa il plug-in TensorBoard per Cloud TPU

SSH nel 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'UI di TensorBoard o in modo programmatico.

Acquisire un profilo utilizzando TensorBoard

Quando avvii TensorBoard, viene avviato un server web. Quando il browser rimanda all'URL di TensorBoard, viene visualizzata una pagina web. La pagina web ti consente di acquisire manualmente un profilo e visualizzare i dati del profilo.

Avvia il server TensorFlow Profiler

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

Questa azione avvia il server profiler TensorFlow sulla VM TPU.

Inizia lo script di addestramento

Esegui lo script di addestramento e attendi fino a quando non viene visualizzato un output che indica che il modello è in fase di addestramento attivo. L'aspetto dipende dal codice e dal modello. Cerca un output simile a 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 questa opzione non mostra l'utilizzo della TPU, è una buona indicazione del fatto che la TPU sta addestrando il tuo modello.

Avvia il server TensorBoard

Apri una nuova finestra del terminale ed SSH nella 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 appena aperta e specifica la directory in cui TensorBoard può scrivere 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, nella pagina TensorBoard viene visualizzata la scheda Scalars.

immagine

Acquisisci un profilo sui nodi TPU

  1. Seleziona PROFILO dal menu a discesa nella parte superiore dello schermo
  2. Seleziona il pulsante ACQUISTA PROFILO
  3. Seleziona il pulsante di opzione Nome TPU
  4. Digita il nome della tua TPU
  5. Seleziona il pulsante CAPTURA.

Acquisisci un profilo in modo programmatico

Le modalità di acquisizione programmatica di un profilo dipendono dal framework ML utilizzato.

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

Se usi JAX, usa i jax.profiler.start_trace() e jax.profiler.stop_trace() per avviare e arrestare rispettivamente il profiler. Per ulteriori informazioni, consulta la sezione Profilazione dei programmi JAX.

Problemi comuni del profilo di acquisizione

A volte, quando cerchi di acquisire una traccia, potresti vedere messaggi come i seguenti:

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ò verificarsi se la TPU non esegue calcoli attivamente, un passaggio di addestramento richiede troppo tempo o altri motivi. Se ricevi questo messaggio, prova a procedere nel seguente modo:

  • Prova ad acquisire un profilo dopo che sono state eseguite alcune epoche.
  • Prova ad aumentare la durata della profilazione nella finestra di dialogo Acquisisci profilo di TensorBoard. È possibile che una fase di addestramento richieda troppo tempo.
  • Assicurati che la VM e la TPU abbiano la stessa versione TF.

Visualizza 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 di TensorBoard. Una volta che i dati sono disponibili, se fai clic sulla scheda Profilo viene visualizzata una selezione di strumenti utili per l'analisi del rendimento:

Visualizzatore Trace

Il visualizzatore Trace è 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 in modo che funzioni solo nel browser Chrome.

Il visualizzatore tracce mostra una sequenza temporale che mostra:

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

Il visualizzatore Trace ti consente di identificare i problemi di prestazioni del modello e di adottare le misure necessarie per risolverli. Ad esempio, a livello generale, puoi identificare se l'addestramento dei feed o del modello sta richiedendo la maggior parte del tempo. Visualizzando in dettaglio, puoi identificare quali operazioni di TensorFlow richiedono più tempo per l'esecuzione.

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

Interfaccia del visualizzatore Trace

Per aprire il visualizzatore delle tracce, vai a TensorBoard, fai clic sulla scheda Profile (Profilo) nella parte superiore dello schermo e scegli trace_viewer dal menu a discesa Strumenti. Lo spettatore viene visualizzato con l'esecuzione più recente:

immagine

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

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

Ecco un'occhiata più da vicino al riquadro della sequenza temporale:

immagine

Il riquadro Cronologia contiene i seguenti elementi:

  1. Barra superiore. Contiene vari controlli ausiliari.
  2. Asse temporale. Mostra l'ora relativa all'inizio della traccia.
  3. Etichette di sezioni e tracce: Ogni sezione contiene più tracce e a sinistra è presente un triangolo su cui puoi fare clic per espandere e comprimere la sezione. C'è una sezione per ogni elemento di elaborazione del sistema.
  4. Selettore dello strumento. Contiene vari strumenti per interagire con il visualizzatore traccia.
  5. Eventi. Mostrano il tempo durante il quale è stata eseguita un'operazione o la durata dei meta-eventi, come i passaggi di addestramento.
  6. Barra della scheda verticale. Questo non ha uno scopo utile per Cloud TPU. La barra fa parte dello strumento di visualizzazione delle tracce per uso generico fornito da Chrome, che viene utilizzato per una serie di attività di analisi del rendimento.

Sezioni e tracce

Il visualizzatore Trace contiene le seguenti sezioni:

  • Una sezione per ogni nodo TPU, con l'etichetta del numero del chip TPU e del nodo TPU all'interno del chip (ad esempio, "Chip 2: TPU Core 1"). Ogni sezione di nodi TPU contiene le seguenti tracce:
    • Passaggio: Mostra la durata dei passaggi di addestramento in esecuzione sulla TPU.
    • TensorFlow Ops. Mostra le operazioni TensorFlow eseguite sulla TPU.
    • XLA Ops. Mostra le operazioni XLA eseguite sulla TPU. (Ogni operazione viene tradotta in una o più operazioni XLA. Il compilatore XLA converte 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 della CPU. Nota: puoi ignorare le informazioni visualizzate insieme alle etichette delle sezioni.

Selettore dello strumento Timeline

Puoi interagire con la visualizzazione della sequenza temporale utilizzando il selettore dello strumento 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 della sequenza temporale, fai clic nell'area tratteggiata in alto e trascina il selettore dove vuoi.

Utilizza gli strumenti della sequenza temporale nel seguente modo:

Strumento di selezione
Fai clic su un evento per selezionarlo o trascina per selezionare più eventi. 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 la panoramica della visualizzazione cronologica orizzontalmente e verticalmente.

Strumento Zoom
Trascina verso l'alto per aumentare lo zoom o verso il basso per diminuire lo zoom lungo l'asse temporale orizzontale. La posizione orizzontale del cursore del mouse determina il centro attorno al quale viene eseguito lo zoom.

Nota: lo strumento di zoom presenta 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 della sequenza temporale. Se si verifica questa situazione, fai clic brevemente sulla visualizzazione cronologica per interrompere lo zoom.

Strumento di sincronizzazione
Trascina in orizzontale per contrassegnare un intervallo di tempo. La lunghezza dell'intervallo viene visualizzata sull'asse del tempo. Per regolare l'intervallo, trascinane le estremità. Per cancellare l'intervallo, fai clic in un punto qualsiasi all'interno della visualizzazione cronologica.

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 sue prestazioni. Utilizza i grafici con il visualizzatore di tracce o il visualizzatore delle tracce in streaming per perfezionare i modelli e migliorarne le prestazioni su Cloud TPU.

Grafico del modello

Il framework di definizione dei modelli può generare un grafico dal modello. I dati del grafico sono archiviati nella directory MODEL_DIR del 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 della compatibilità delle TPU

La scheda Grafici include un modulo per il controllo della compatibilità che verifica e visualizza le operazioni che potrebbero causare problemi durante l'esecuzione di un modello.

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

immagine

Un determinato nodo può visualizzare entrambi i colori, ciascuno 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 non compatibili per un nodo selezionato.

Fai clic su un'operazione del 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 controllo non compila il modello per l'esecuzione, quindi assicurati di interpretare i risultati come una stima di compatibilità.

Interpretazione dei risultati di compatibilità

Profilo

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

Pagina Panoramica del profilo

La pagina Panoramica (overview_page), disponibile in Profile, fornisce una visualizzazione di primo livello del rendimento del modello durante l'esecuzione di un'acquisizione. La pagina mostra una pagina di riepilogo aggregata per tutte le TPU, oltre a un'analisi complessiva della pipeline di input. C'è un'opzione per selezionare singole TPU nel menu a discesa Host.

La pagina mostra i dati nei seguenti riquadri:

immagine

  • Riepilogo del rendimento

    • Tempo di passi medio: il tempo di passi calcolato in media su tutti i passi campionati
    • Tempo di inattività dell'host: la percentuale di tempo di inattività dell'host
    • Tempo di inattività TPU: la percentuale di tempo di inattività della TPU
    • 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 passo-tempo. Visualizza un grafico del tempo di passo del dispositivo (in millisecondi) relativo a tutti i passaggi campionati. L'area blu corrisponde alla porzione di tempo del passaggio in cui le TPU erano inattive in attesa di dati di input dall'host. L'area rossa mostra per quanto tempo la Cloud TPU è stata effettivamente funzionante.

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

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

  • Esegui ambiente

    • Numero di host utilizzati
    • Tipo di TPU utilizzato
    • Numero di core TPU
    • Dimensione batch di addestramento
  • Consiglio per i passaggi successivi. Segnala quando un modello viene associato all'input e ogni volta che si verificano problemi con Cloud TPU. Suggerisce strumenti che puoi usare per individuare i colli di bottiglia nelle prestazioni.

Analizzatore pipeline di input

L'analizzatore della pipeline di input fornisce insight sui risultati delle prestazioni. Lo strumento mostra i risultati sul rendimento del file input_pipeline.json raccolto dallo strumento capture_tpu_profile.

Lo strumento indica immediatamente se il programma è associato all'input e può guidarti attraverso l'analisi lato host e dispositivo per eseguire il debug di qualsiasi fase della pipeline che sta creando colli di bottiglia.

Consulta le indicazioni sulle prestazioni della 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 secondo una pipeline. Il processo di lettura è suddiviso in più fasi di elaborazione dei dati collegate in serie, dove l'output di una fase corrisponde all'input della fase 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 (facoltativa)
  3. Trasferimento di file dal computer host al dispositivo

Una pipeline di input inefficiente può rallentare gravemente l'applicazione. Un'applicazione è considerata vincolata all'input quando trascorre una notevole quantità di tempo nella sua pipeline di input. Usa lo strumento di analisi della pipeline di input per capire dove è inefficiente.

Dashboard della pipeline di input

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

La dashboard contiene tre sezioni:

immagine

  1. Riepilogo. Riepiloga la pipeline di input complessiva con informazioni che indicano se l'applicazione è vincolata all'input e, in tal caso, in che misura.
  2. Analisi lato dispositivo: Mostra risultati dettagliati dell'analisi lato dispositivo, tra cui il tempo di esecuzione del dispositivo e l'intervallo di tempo del dispositivo trascorso in attesa dei dati di input tra i core in ogni passaggio.
  3. Analisi lato host. Mostra un'analisi dettagliata sul lato host, inclusa un'analisi del tempo di elaborazione degli input sull'host.
Riepilogo pipeline di input

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

immagine

Analisi lato dispositivo

La seconda sezione descrive in dettaglio l'analisi lato dispositivo, fornendo insight sul tempo trascorso sul dispositivo rispetto all'host e su quanto tempo è stato trascorso sul dispositivo in attesa dei dati di input dall'host.

immagine

  1. Statistiche sul tempo di percorrenza del dispositivo. Segnala la media, la deviazione standard e l'intervallo (minimo, massimo) del tempo di passo del dispositivo.
  2. Tempo dei passi. Visualizza un grafico del tempo di passo del dispositivo (in millisecondi) relativo a tutti i passaggi campionati. L'area blu corrisponde alla parte del tempo di inattività delle Cloud TPU, in attesa dei dati di input dall'host. L'area rossa indica per quanto tempo la Cloud TPU è stata effettivamente in funzione.
  3. Percentuale di tempo di attesa per i dati di input. Segnala la media, la deviazione standard e l'intervallo (minimo, massimo) della frazione di tempo trascorsa su un dispositivo in attesa dei dati di input normalizzati per il tempo di passaggio totale del dispositivo.
  4. Intervallo di tempo tra i core del dispositivo e i core di attesa per i dati di input, per numero di passaggi. Visualizza un grafico a linee che mostra la quantità di tempo sul dispositivo (espressa come percentuale del tempo totale di passaggi del dispositivo) trascorso in attesa dell'elaborazione dei dati di input. La frazione di tempo speso varia dal core al core, quindi viene tracciato anche l'intervallo di frazioni per ciascun core. Poiché il tempo impiegato da un passo è determinato dal core più lento, l'intervallo deve essere il più ridotto possibile.
Analisi lato host

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

  • Inserimento in coda dei dati da trasferire sul dispositivo Tempo dedicato all'inserimento dei dati in una coda di inserimento dei dati prima del trasferimento dei dati al dispositivo.
  • Pre-elaborazione dei dati. Tempo dedicato alle operazioni di pre-elaborazione, come la decompressione delle immagini.
  • Leggere in anticipo i dati dei file. Il tempo dedicato alla lettura dei file, inclusi memorizzazione nella cache, precaricamento e interleaving.
  • Lettura dei dati da file on demand. Tempo dedicato alla lettura dei dati dai file senza memorizzazione nella cache, precaricamento e interleaving.
  • Lettura o elaborazione di altri dati. Tempo trascorso su altre operazioni relative all'input che non utilizzano tf.data.

immagine

Per visualizzare le statistiche relative a singole operazioni di input e le relative categorie suddivise per ora di esecuzione, espandi la sezione "Mostra statistiche operative di input".

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

immagine

Ogni voce della tabella contiene le seguenti informazioni:

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

Profilo operativo

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

  • L'efficacia dell'applicazione di Cloud TPU come percentuale di tempo speso sulle operazioni per categoria e di utilizzo di FLOPS TPU.
  • Le operazioni che richiedono più tempo. Queste operazioni sono potenziali bersagli per l'ottimizzazione.
  • Dettagli delle singole operazioni, tra cui forma, spaziatura interna ed espressioni che utilizzano l'operazione.

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

Utilizzo del profilo operativo

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

Puoi visualizzare i dati di op_profile in TensorBoard facendo clic sulla scheda Profile (Profilo) nella parte superiore dello schermo e selezionando op_profile dal menu a discesa Strumenti. Verrà visualizzata una schermata simile alla seguente:

immagine

  1. Sezione Panoramica. Mostra l'utilizzo di Cloud TPU e fornisce suggerimenti per l'ottimizzazione.
  2. Pannello di controllo. Contiene controlli che consentono di impostare il numero di operazioni visualizzate nella tabella, quali operazioni vengono visualizzate e come sono ordinate.
  3. Tabella operativa: una tabella che elenca le principali categorie operative di TensorFlow associate alle operazioni XLA. Queste operazioni sono ordinate per percentuale di utilizzo di Cloud TPU.
  4. Schede dei dettagli dell'operazione. Dettagli dell'operazione visualizzati quando passi il mouse sopra un'operazione nella tabella. Includono l'utilizzo di FLOPS, l'espressione in cui viene usata l'operazione e il relativo layout (fit).
Tabella operativa XLA

La tabella operativa elenca le categorie di operazioni XLA in ordine dalla percentuale più alta a quella più bassa di utilizzo di Cloud TPU. Inizialmente, la tabella mostra la percentuale di tempo impiegato, il nome della categoria operativa, il nome dell'operazione TensorFlow associato e la percentuale di utilizzo di 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 di tempo trascorso da tutte le operazioni in quella categoria. Puoi fare clic per espandere la voce e visualizzare il tempo trascorso in base a ogni singola operazione.
  2. 10 operazioni principali. Il pulsante di attivazione/disattivazione accanto al nome di una categoria mostra/nasconde le 10 principali operazioni all'interno della categoria. Se nell'elenco delle operazioni viene visualizzata una voce relativa a un'operazione di fusione, puoi espanderla per visualizzare le operazioni non di fusione, a livello di elemento, che contiene.
  3. TensorFlow Op: mostra il nome dell'operazione TensorFlow associato all'operazione XLA.
  4. FLOPS. Mostra l'utilizzo dei FLOPS, ovvero il numero misurato di FLOPS espresso come percentuale dei FLOPS di picco di Cloud TPU. Maggiore è la percentuale di utilizzo dei FLOPS, più rapida sarà l'esecuzione delle operazioni. Alla cella della tabella è associato un colore: verde per un utilizzo elevato di FLOPS (buono) e rosso per un utilizzo ridotto di FLOPS (non valido).
Schede dei dettagli dell'operatività

Quando selezioni una voce della tabella, a sinistra viene visualizzata una scheda con i dettagli dell'operazione XLA o della categoria dell'operazione. Una tipica carta ha il seguente aspetto:

immagine

  • Nome e Categoria. Mostra il nome e la categoria dell'operazione XLA evidenziati.
  • Utilizzo FLOPS. Visualizza l'utilizzo dei FLOPS come percentuale del totale di FLOPS possibile.
  • Espressione. Mostra l'espressione XL contenente l'operazione.
  • Utilizzo della memoria. Mostra la percentuale di utilizzo della memoria di picco da parte del tuo programma.
  • Layout (solo operazioni di convoluzione). Mostra la forma e il layout di un tensore, indicando anche se la forma del tensore si adatta esattamente alle unità della matrice e il modo in cui la matrice è riempita.
Interpretazione dei risultati

Per le operazioni di convoluzione, l'utilizzo dei FLOPS TPU può essere ridotto a causa di uno dei seguenti motivi o di entrambi:

  • spaziatura interna (le unità della matrice sono utilizzate parzialmente)
  • L'operazione convoluzione è vincolata alla memoria

Questa sezione fornisce un'interpretazione di alcuni numeri di un altro modello in cui i FLOP erano bassi. In questo esempio, la fusione di output e la convoluzione hanno dominato il tempo di esecuzione ed c'era una lunga coda di operazioni vettoriali o scalari con FLOPS molto bassi.

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

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

immagine

Esamina il layout e nota che la dimensione del batch 16 viene riempita fino a 128 e che la dimensione della funzionalità 3 viene riempita fino a 8, il che indica che solo il 5% delle unità matrici viene utilizzato in modo efficace. (Il calcolo per questa istanza di utilizzo percentuale è (((batch_time * num_of_features) / padding_size ) / num_of_cores). Confronta i FLOPS in questo esempio con il valore %convolution.340 dell'esempio precedente, che ha un adattamento esatto alla matrice.

Visualizzatore pod

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

Per visualizzare lo strumento Visualizzatore pod:

  1. Seleziona 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 dei passaggi, che consente di selezionare il passaggio da esaminare.
  2. Un grafico della topologia, che mostra in modo interattivo i core TPU nell'intero sistema TPU.
  3. Un grafico sui link di comunicazione che mostra i canali di invio e ricezione (ricev) nel grafico della topologia.
  4. Grafico a barre della latenza dei canali di invio e ricezione. Se passi il mouse sopra una barra di questo grafico, vengono attivati i link di comunicazione nel grafico Link di comunicazione. Nella barra di sinistra viene visualizzata una scheda dei dettagli del canale, che fornisce informazioni dettagliate sul canale, ad esempio dimensioni dei dati trasferiti, latenza e larghezza di banda.
  5. Un grafico di analisi dei passaggi, che mostra l'analisi di un passaggio per tutti i core. Questa funzionalità può essere usata per tenere traccia dei colli di bottiglia del sistema e per capire se un particolare core sta rallentando il sistema.

immagine

Dispositivo di scorrimento dei passaggi

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

Grafico della topologia

Il grafico della topologia è organizzato gerarchicamente per host, chip e core. I rettangoli più piccoli sono i core TPU. Due core insieme indicano un chip TPU, mentre quattro chip insieme indicano un host.

immagine

Il grafico della topologia è anche una mappa termica, con codifica a colori in base alla percentuale di tempo impiegato da una determinata suddivisione (ad esempio calcolo ad alta flop, infeed, invio e così via) nel passaggio selezionato. La barra appena sotto il grafico della topologia (mostrato nel grafico seguente) mostra una codifica a colori per l'utilizzo di core e chip. Il colore dei core mostra l'utilizzo che va dal giallo al blu. Per un calcolo flop elevato, numeri più grandi (colore più scuro) indicano più tempo dedicato al calcolo. Per tutte le altre suddivisioni, i numeri più piccoli (colori più chiari) indicano tempi di attesa più brevi. Le aree con problemi potenziali, o hotspot, vengono indicate quando un nucleo è 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 da esaminare.

Passa il mouse sopra uno qualsiasi dei piccoli rettangoli (singoli core) per visualizzare un suggerimento tecnico che mostra la posizione del core nel sistema, l'ID chip globale e il nome host. Il suggerimento tecnico include anche la durata della categoria di analisi selezionata, ad esempio Floop alti, e la relativa percentuale di utilizzo fuori da un passaggio.

immagine

Canali di comunicazione

Questo strumento consente di visualizzare i link di invio e ricezione se il modello li utilizza per comunicare tra i core. Se il modello contiene operazioni di invio e ricezione, puoi utilizzare un selettore di ID canale per selezionarne uno. Un link dal core di origine (src) e dal core di destinazione (dst) rappresenta il canale di comunicazione. Viene visualizzata 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 con ulteriori dettagli sul canale di comunicazione. Una tipica scheda ha il seguente aspetto:

immagine

  1. Data Transferred, 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 registrato.
  3. BW, che mostra la quantità di dati trasferiti, in gibibite (GiB), dal core di origine al core di destinazione nella durata di tempo.
  4. Ritardo di invio, che corrisponde alla durata in microsecondi dall'inizio della registrazione completata all'inizio dell'invio. Se l'operazione confermata inizia dopo l'inizio dell'operazione di invio, il ritardo è pari a zero.
  5. Nomi Hlo, che mostra i nomi delle operazioni hlo XLA associati 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 i dettagli per ogni passaggio di addestramento o valutazione.

L'asse x è l'ID globale del chip e l'asse y è il tempo in microsecondi. Da questo grafico, puoi vedere dove viene utilizzato il tempo in una determinata fase di addestramento, dove ci sono colli di bottiglia e se esiste uno squilibrio del carico in tutti i chip.

immagine

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

immagine

I campi della scheda specificano quanto segue:

  1. Calcolo ad alta flop, ovvero il tempo dedicato alle operazioni (operazioni) di convoluzione o di fusione di output.
  2. Calcolo a basso flop, calcolato sottraendo tutte le altre analisi dalla durata totale.
  3. Infeed, che è il tempo che la TPU trascorre in attesa sull'host.
  4. Outfeed, ovvero il tempo che l'host trascorre in attesa all'output della TPU.
  5. Sincronizzazione AllReduce, ovvero la porzione di tempo dedicata alle operazioni CrossReplicaSum in attesa di sincronizzazione con gli altri core. Le operazioni CrossReplicaSum calcolano la somma delle repliche.
  6. Calcolo AllReduce, ovvero il tempo di calcolo effettivo speso per le operazioni di CrossReplicaSum.
  7. Operazioni di invio da chip a chip, ovvero il tempo dedicato alle operazioni di invio.
  8. Operazioni di chip to chip completate, ovvero il tempo dedicato alle operazioni di conferma.

Visualizzatore Trace

Il visualizzatore Trace è 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 in modo che funzioni solo nel browser Chrome.

Il visualizzatore tracce mostra una sequenza temporale che mostra:

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

Il visualizzatore Trace ti consente di identificare i problemi di prestazioni del modello e di adottare le misure necessarie per risolverli. Ad esempio, a livello generale, puoi identificare se l'addestramento dei feed o del modello sta richiedendo la maggior parte del tempo. Visualizzando in dettaglio, puoi identificare quali operazioni di TensorFlow richiedono più tempo per l'esecuzione.

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

Interfaccia del visualizzatore Trace

Per aprire il visualizzatore delle tracce, vai a TensorBoard, fai clic sulla scheda Profile (Profilo) nella parte superiore dello schermo e scegli trace_viewer dal menu a discesa Strumenti. Lo spettatore viene visualizzato con l'esecuzione più recente:

immagine

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

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

Ecco un'occhiata più da vicino al riquadro della sequenza temporale:

immagine

Il riquadro Cronologia contiene i seguenti elementi:

  1. Barra superiore. Contiene vari controlli ausiliari.
  2. Asse temporale. Mostra l'ora relativa all'inizio della traccia.
  3. Etichette di sezioni e tracce: Ogni sezione contiene più tracce e a sinistra è presente un triangolo su cui puoi fare clic per espandere e comprimere la sezione. C'è una sezione per ogni elemento di elaborazione del sistema.
  4. Selettore dello strumento. Contiene vari strumenti per interagire con il visualizzatore traccia.
  5. Eventi. Mostrano il tempo durante il quale è stata eseguita un'operazione o la durata dei meta-eventi, come i passaggi di addestramento.
  6. Barra della scheda verticale. Questo non ha uno scopo utile per Cloud TPU. La barra fa parte dello strumento di visualizzazione delle tracce per uso generico fornito da Chrome, che viene utilizzato per una serie di attività di analisi del rendimento.
Sezioni e tracce

Il visualizzatore Trace contiene le seguenti sezioni:

  • Una sezione per ogni nodo TPU, con l'etichetta del numero del chip TPU e del nodo TPU all'interno del chip (ad esempio, "Chip 2: TPU Core 1"). Ogni sezione di nodi TPU contiene le seguenti tracce:
    • Passaggio: Mostra la durata dei passaggi di addestramento in esecuzione sulla TPU.
    • TensorFlow Ops. Mostra le operazioni TensorFlow eseguite sulla TPU.
    • XLA Ops. Mostra le operazioni XLA eseguite sulla TPU. (Ogni operazione viene tradotta in una o più operazioni XLA. Il compilatore XLA converte 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 della CPU. Nota: puoi ignorare le informazioni visualizzate insieme alle etichette delle sezioni.
Selettore dello strumento Timeline

Puoi interagire con la visualizzazione della sequenza temporale utilizzando il selettore dello strumento 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 della sequenza temporale, fai clic nell'area tratteggiata in alto e trascina il selettore dove vuoi.

Utilizza gli strumenti della sequenza temporale nel seguente modo:

Strumento di selezione
Fai clic su un evento per selezionarlo o trascina per selezionare più eventi. 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 la panoramica della visualizzazione cronologica orizzontalmente e verticalmente.

Strumento Zoom
Trascina verso l'alto per aumentare lo zoom o verso il basso per diminuire lo zoom lungo l'asse temporale orizzontale. La posizione orizzontale del cursore del mouse determina il centro attorno al quale viene eseguito lo zoom.

Nota: lo strumento di zoom presenta 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 della sequenza temporale. Se si verifica questa situazione, fai clic brevemente sulla visualizzazione cronologica per interrompere lo zoom.

Strumento di sincronizzazione
Trascina in orizzontale per contrassegnare un intervallo di tempo. La lunghezza dell'intervallo viene visualizzata sull'asse del tempo. Per regolare l'intervallo, trascinane le estremità. Per cancellare l'intervallo, fai clic in un punto qualsiasi all'interno della visualizzazione cronologica.

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

Gli eventi all'interno della sequenza temporale vengono visualizzati in colori diversi; i colori stessi non hanno un significato specifico.

Barra superiore Timeline

La barra superiore del riquadro Timeline contiene diversi controlli ausiliari:

immagine

  1. Visualizzazione dei metadati. Non utilizzato per le TPU.
  2. Opzioni di visualizzazione. 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 della 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 nel visualizzatore delle tracce. Fai clic sul pulsante 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 a premere f per aumentare rapidamente lo zoom.

Eventi caratteristici

Di seguito sono riportati alcuni dei tipi di eventi che possono essere molto utili per l'analisi delle prestazioni delle TPU.

immagine

  • InfeedDequeueTuple. Questa operazione TensorFlow viene eseguita su una TPU e riceve i dati di input provenienti dall'host. Se il caricamento richiede molto tempo, le operazioni di TensorFlow che pre-elaborano i dati sulla macchina host non sono in grado di tenere il passo con la velocità di consumo dei dati della TPU. Puoi vedere gli eventi corrispondenti nelle tracce dell'host chiamate InfeedEnqueueTuple. Per visualizzare un'analisi più dettagliata della pipeline di input, utilizza lo strumento Input Pipeline Analyzer.

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

immagine

  • Operazioni set di dati. Il visualizzatore di Trace mostra le operazioni sul set di dati eseguite quando i dati vengono caricati utilizzando l'API set di dati. Iterator::Filter::Batch::ForeverRepeat::Memory nell'esempio è compilato e corrisponde all'operazione dataset.map() . Utilizza il visualizzatore di tracce per esaminare le operazioni di caricamento mentre esegui il debug e la mitigazione dei colli di bottiglia delle pipeline di input.

immagine

  • Precarica i thread. L'utilizzo di dataset.prefetch() per eseguire il buffering dei dati di input può impedire rallentamenti sporadici dell'accesso ai file che creano colli di bottiglia nella pipeline di input.
Cosa può andare storto

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

  • Limite di visualizzazione degli eventi. Il visualizzatore Trace mostra un massimo di 1 milione di eventi. Se hai acquisito più eventi, vengono visualizzati solo i primi 1 milione di eventi; gli eventi successivi vengono eliminati. Per acquisire più eventi TPU, puoi usare 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 dell'inizio di un'acquisizione o che terminano dopo l'acquisizione non sono visibili nel visualizzatore delle tracce. Di conseguenza, è possibile che si perdano eventi molto lunghi.
  • Quando avviare l'acquisizione della traccia. Avvia l'acquisizione della traccia dopo aver saputo che Cloud TPU è in esecuzione. Se inizi prima di questa data, potresti vedere solo pochi eventi o nessun evento nel visualizzatore delle tracce. Puoi aumentare la durata del profilo utilizzando il flag --duration_ms e puoi impostare nuovi tentativi automatici utilizzando 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 memoria

Il visualizzatore memoria consente di visualizzare il picco di utilizzo della memoria per il tuo programma e le tendenze di utilizzo della memoria nel corso del ciclo di vita del programma.

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

immagine

  1. Elenco a discesa Host. Consente di selezionare un host TPU e moduli HLO (High Level Optimization) (HLO) per la visualizzazione.
  2. Panoramica della memoria. Mostra l'allocazione e le dimensioni del picco della memoria senza spaziatura interna.
  3. Grafico dello spazio di lavoro. Mostra il picco di utilizzo della memoria e un grafico delle tendenze di utilizzo della memoria nel corso del ciclo di vita del programma. Se passi il mouse sopra un buffer in uno dei grafici del buffer, viene aggiunta un'annotazione per la durata del buffer e la scheda dei dettagli del buffer.
  4. Grafici buffer. Due grafici che mostrano l'allocazione del buffer nel punto di picco di utilizzo della memoria, come indicato dalla linea verticale nel grafico dello spazio di lavoro. Se passi il mouse sopra un buffer in uno dei grafici del buffer, viene visualizzata la barra della durata del buffer nel grafico dello spazio di lavoro e una scheda dei dettagli a sinistra.
  5. Scheda Dettagli sull'allocazione del buffer. Visualizza i dettagli di allocazione per un buffer.
Riquadro Panoramica della memoria

Il riquadro Panoramica della memoria (superiore) mostra il nome del modulo e il picco di allocazione della memoria impostata quando la dimensione totale di allocazione del buffer raggiunge il valore massimo. Viene mostrata anche la dimensione di allocazione massima senza riempimento per il confronto.

immagine

Grafico dello spazio di lavoro

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

immagine

Ogni punto sul grafico a linee rappresenta un "punto di programma" nel programma HLO di XLA come programmato dal compilatore. La linea fornisce un'idea della punta dell'utilizzo da e verso i picchi di utilizzo.

Interazione con gli elementi del grafico a buffer

Quando passi il mouse sopra un buffer visualizzato in uno dei grafici del buffer sotto il grafico dello spazio di lavoro, nel grafico dello spazio di lavoro viene visualizzata una linea orizzontale della durata del buffer. 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 del picco della memoria. La lunghezza della riga corrisponde alla durata del buffer, a partire dal punto del programma in cui è stato allocato lo spazio del buffer fino al punto in cui lo spazio è stato liberato.

Grafici buffer

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

immagine

  • Su 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 periodo di tempo più lungo si trovano sul lato sinistro del grafico.

  • Per dimensione. Visualizza i buffer attivi durante l'esecuzione del programma in ordine di dimensioni decrescente. I buffer con l'impatto maggiore nel momento di picco di utilizzo della memoria si trovano a sinistra.

Scheda dei dettagli dell'allocazione del 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 del lifetime dell'utente visualizzata nel grafico di lavoro). Una tipica scheda dei dettagli è simile alla seguente:

immagine

  1. Nome. Nome dell'operazione 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. Grandezza relativa della dimensione del buffer riempita rispetto alla dimensione non imbottita.
  6. Memoria extra. Indica la quantità di memoria extra utilizzata per la spaziatura interna.
  7. Forma. Descrive il rango, le dimensioni e il tipo di dati dell'array N-dimensionale.
  8. Nome operazione TensorFlow. Mostra il nome dell'operazione 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 esaurita"

Se esegui un modello e ricevi un "errore di memoria insufficiente", usa il comando seguente per acquisire un profilo di memoria e visualizzarlo nel visualizzatore della memoria. Assicurati di impostare durata_ms appropriata in modo che il periodo di profilazione si sovrapponga alla data/ora di compilazione del programma. L'output può aiutarti a capire cosa ha causato l'errore:

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

Visualizzatore traccia di flussi di dati

Il visualizzatore delle tracce in modalità flusso (trace_viewer) è uno strumento di analisi delle prestazioni di Cloud TPU, disponibile per TensorFlow 2.16.1 o versioni successive, che fornisce rendering delle tracce dinamiche. Lo strumento utilizza il visualizzatore di profilazione degli eventi di traccia di Chrome per cui funziona solo nel browser Chrome.

Quando utilizzi capture_tpu_profile per acquisire un profilo, un file .tracetable viene salvato nel bucket di archiviazione di Google Cloud. Il file contiene un numero elevato di eventi di traccia che possono essere visualizzati sia nel visualizzatore della traccia sia nel visualizzatore delle tracce in modalità flusso.

Utilizzo del visualizzatore delle tracce in modalità flusso

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

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

Nella 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 TensorBoard viene visualizzato nell'elenco a discesa Strumenti.

immagine

Nella sequenza temporale, puoi aumentare e diminuire lo zoom per visualizzare gli eventi traccia caricati in modo dinamico 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 job Cloud TPU sull'interfaccia a riga di comando in tempo reale. Se imposti l'opzione --monitoring_level su 0 (valore predefinito), 1 o 2, ottieni rispettivamente un singolo profilo, un monitoraggio di base o un monitoraggio dettagliato.

Apri un nuovo Cloud Shell ed esegui SSH sulla VM (sostituisci vm-name nel comando con il nome della tua VM):

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

Nel nuovo 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 produce 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 monitoraggio

  • --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 (valore predefinito): crea un singolo profilo, quindi esci. Livello 1: mostra la versione di TPU e l'utilizzo di TPU. Livello 2: mostra l'utilizzo della TPU, il tempo di inattività della TPU e il numero di core TPU utilizzati. Fornisce inoltre tempi di passo minimi, medi e massimi insieme al contributo percentuale nel feed.
  • --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 abbastanza lunga da acquisire almeno un passaggio di addestramento dei dati. 1 secondo acquisisce una fase 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 da eseguire capture_tpu_profile. Per monitorare continuamente il job TPU, imposta il valore su un numero alto. Per controllare rapidamente il tempo di passo del modello, imposta il valore su un numero basso.