Profila il tuo modello sui nodi Cloud TPU

La profilazione del modello ti consente di ottimizzare le prestazioni dell'addestramento sulle Cloud TPU. Per profilare il modello, utilizza TensorBoard e il plug-in TensorBoard 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 viene 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. Installali eseguendo:

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

Installa il plug-in TensorBoard per Cloud TPU

Accedi tramite SSH al 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.

Acquisisci un profilo utilizzando TensorBoard

Quando avvii TensorBoard, viene avviato un server web. Quando indirizzi il browser all'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 di TensorFlow Profiler

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

Viene avviato il server di profilazione di TensorFlow sulla VM TPU.

Avvia lo script di addestramento

Esegui lo script di addestramento e attendi di visualizzare l'output che indica che il modello è in addestramento attivo. Il risultato dipende dal codice e dal modello. Cerca un output come Epoch 1/100. In alternativa, puoi andare alla pagina Cloud TPU nella console Google Cloud, selezionare la TPU e visualizzare il grafico di utilizzo della CPU. Anche se questo non mostra l'utilizzo della TPU, è un buon indicatore del fatto che la TPU stia addestrando il tuo modello.

Avvia il server TensorBoard

Apri una nuova finestra del terminale e accedi tramite SSH alla VM TPU con il port forwarding. In questo modo, il browser locale può 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 dove 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 ne mostra l'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 di ricarica nell'angolo in alto a destra della pagina di TensorBoard. Per impostazione predefinita, la pagina TensorBoard viene visualizzata con la scheda Scalari selezionata.

immagine

Acquisisci un profilo sui nodi TPU

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

Acquisire un profilo in modo programmatico

La modalità di acquisizione di un profilo tramite programmazione dipende dal framework ML utilizzato.

Se utilizzi TensorFlow, avvia e interrompi il profiler rispettivamente con tf.profiler.experimental.start() e tf.profiler.experimental.stop(). Per ulteriori informazioni, consulta la guida al miglioramento delle prestazioni di TensorFlow.

Se utilizzi JAX, utilizza jax.profiler.start_trace() e jax.profiler.stop_trace() per avviare e arrestare rispettivamente il profiler. Per ulteriori informazioni, consulta Profilazione dei programmi JAX.

Problemi comuni relativi al profilo di acquisizione

A volte, quando provi a acquisire una traccia, potresti visualizzare messaggi come quelli riportati di seguito:

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

Ciò può accadere se la TPU non esegue attivamente calcoli, se un passaggio di addestramento richiede troppo tempo o per altri motivi. Se visualizzi questo messaggio, prova a procedere nel seguente modo:

  • Prova a acquisire un profilo dopo l'esecuzione di alcune epoche.
  • Prova ad aumentare la durata del profiling nella finestra di dialogo Acquisisci profilo di TensorBoard. È possibile che un passaggio di addestramento stia richiedendo troppo tempo.
  • Assicurati che sia la VM sia la TPU abbiano la stessa versione di 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 di ricarica nell'angolo in alto a destra della pagina di TensorBoard. Una volta che i dati sono disponibili, fai clic sulla scheda Profilo per visualizzare una selezione di strumenti utili per l'analisi del rendimento:

Visualizzatore tracce

Trace Viewer è uno strumento di analisi delle prestazioni di Cloud TPU disponibile in Profilo. Lo strumento utilizza il Visualizzatore di profili degli eventi traccia di Chrome, pertanto funziona solo nel browser Chrome.

Lo strumento di visualizzazione Trace mostra una sequenza temporale che indica:

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

Lo strumento di Trace ti consente di identificare i problemi di prestazioni del modello, quindi di adottare misure per risolverli. Ad esempio, a un livello generale, puoi identificare se l'infeed o l'addestramento del modello occupa la maggior parte del tempo. Se vai più in profondità, puoi identificare le operazioni TensorFlow che richiedono più tempo per essere eseguite.

Tieni presente che lo strumento di visualizzazione dei tracciati è limitato a 1 milione di eventi per Cloud TPU. Se devi valutare più eventi, utilizza il visualizzatore delle tracce in streaming.

Interfaccia del visualizzatore di Trace

Per aprire il visualizzatore di traccia, vai a TensorBoard, fai clic sulla scheda Profilo nella parte superiore dello schermo e scegli trace_viewer dal menu a discesa Strumenti. Viene visualizzato il visualizzatore con l'esecuzione più recente:

immagine

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

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

Ecco un'immagine più dettagliata del 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 sezione e traccia. Ogni sezione contiene più tracce e ha un triangolo a sinistra su cui puoi fare clic per espandere e comprimere la sezione. Esiste una sezione per ogni elemento di elaborazione del sistema.
  4. Selettore di strumenti. Contiene vari strumenti per interagire con il visualizzatore di traccia.
  5. Eventi. Questi mostrano il momento in cui è stata eseguita un'operazione o la durata dei 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 delle tracce per uso generale fornito da Chrome, che viene utilizzato per una serie di attività di analisi delle prestazioni.

Sezioni e canali

Il visualizzatore di Trace contiene le seguenti sezioni:

  • Una sezione per ogni nodo TPU, etichettata con il numero del chip TPU e il nodo TPU all'interno del chip (ad esempio, "Chip 2: TPU Core 1"). Ogni sezione del nodo TPU contiene i seguenti canali:
    • 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 traduce le operazioni XLA in codice che viene eseguito sulla TPU.
  • Una sezione per i thread in esecuzione sulla CPU della macchina host,etichettata come "Thread host". La sezione contiene un canale per ogni thread della CPU. Nota: puoi ignorare le informazioni visualizzate accanto alle etichette delle sezioni.

Selettore di strumenti Timeline

Puoi interagire con la visualizzazione della cronologia utilizzando il selettore dello strumento della cronologia in TensorBoard. Puoi fare clic su uno strumento della cronologia o utilizzare le seguenti scorciatoie da tastiera per attivare e evidenziare uno strumento. Per spostare il selettore degli strumenti della sequenza temporale, fai clic nell'area tratteggiata in alto e trascinalo dove preferisci.

Utilizza gli strumenti della sequenza temporale come segue:

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

Strumento di panoramica
Trascina per eseguire la panoramica della visualizzazione della cronologia orizzontalmente e verticalmente.

Strumento Zoom
Trascina verso l'alto per aumentare lo zoom o verso il basso per diminuirlo sull'asse orizzontale (tempo). La posizione orizzontale del cursore del mouse determina il centro intorno al quale avviene lo zoom.

Nota: lo strumento di zoom presenta un bug noto per cui lo zoom rimane attivo se rilasci il tasto del mouse mentre il cursore del mouse è al di fuori della visualizzazione della sequenza temporale. In questo caso, fai clic brevemente sulla visualizzazione della sequenza temporale per interrompere lo zoom.

Strumento di temporizzazione
Trascina in orizzontale per contrassegnare un intervallo di tempo. La durata dell'intervallo viene visualizzata sull'asse del tempo. Per regolare l'intervallo, trascina le estremità. Per cancellare l'intervallo, fai clic in un punto qualsiasi all'interno 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 sue prestazioni. Utilizza i grafici insieme al visualizzatore di traccia o al visualizzatore di traccia in streaming per perfezionare i modelli e migliorare le loro prestazioni su Cloud TPU.

Grafico del modello

Il framework di modellazione potrebbe generare un grafico dal tuo modello. I dati del grafico vengono memorizzati 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 Graphs (Grafici) in TensorBoard.

immagine

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

Grafico di compatibilità delle TPU

La scheda Grafici include un modulo di controllo della compatibilità che verifica e mostra le operazioni che possono potenzialmente causare problemi durante l'esecuzione di un modello.

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

immagine

Un determinato nodo può mostrare entrambi i colori, ciascuno come percentuale delle operazioni di compatibilità 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 un'operazione nel grafico per visualizzarne gli attributi nel riquadro di riepilogo.

immagine

Tieni presente che lo strumento di controllo della compatibilità non valuta le operazioni assegnate esplicitamente a un dispositivo non TPU utilizzando il posizionamento manuale del dispositivo. Inoltre, lo strumento di controllo non compila effettivamente 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 di ricarica nell'angolo in alto a destra della pagina di TensorBoard. Una volta che i dati sono disponibili, fai clic sulla scheda Profilo per visualizzare una selezione di strumenti utili per l'analisi del rendimento:

Pagina Panoramica del profilo

La pagina Panoramica (overview_page), disponibile in Profilo, fornisce una panoramica di primo livello sul rendimento del modello durante l'esecuzione di una sessione di acquisizione. La pagina mostra una pagina di panoramica aggregata per tutti i TPU, nonché un'analisi complessiva della pipeline di input. Esiste 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 passo medio: il tempo di passo medio calcolato su tutti i passi campionati
    • Tempo di inattività dell'host: la percentuale di tempo durante la quale l'host è rimasto inattivo
    • Tempo di inattività TPU: la percentuale di tempo in cui la TPU è stata inattiva
    • Utilizzo FLOPS: la percentuale di utilizzo delle unità di matrice TPU
    • Utilizzo larghezza di banda memoria: la percentuale di larghezza di banda memoria utilizzata
  • Grafico dei passaggi nel tempo. Mostra un grafico del tempo del passaggio del dispositivo (in millisecondi) su tutti i passaggi campionati. L'area blu corrisponde alla parte del tempo del passaggio in cui le TPU erano inattive in attesa dei dati di input dall'host. L'area rossa mostra il tempo di funzionamento effettivo di Cloud TPU.

  • Le 10 principali operazioni TensorFlow su TPU. Mostra le operazioni TensorFlow che hanno richiesto più tempo:

    Ogni riga mostra il tempo di esecuzione 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
    • Dimensione del batch di addestramento
  • Consiglio per i passaggi successivi. Segnala quando un modello è vincolato all'input e ogni volta che si verificano problemi con Cloud TPU. Suggerisce strumenti che puoi utilizzare per individuare i colli di bottiglia delle prestazioni.

Analizza la pipeline di input

Lo strumento di analisi della pipeline di input fornisce approfondimenti sui risultati del rendimento. Lo strumento mostra i risultati sul rendimento del file input_pipeline.json raccolto dallo strumento capture_tpu_profile.

Lo strumento ti dice immediatamente se il tuo programma è vincolato all'input e può guidarti nell'analisi del dispositivo e del lato host per eseguire il debug delle fasi della pipeline che stanno creando colli di bottiglia.

Consulta le indicazioni sul rendimento della pipeline di input per informazioni più approfondite sull'ottimizzazione del rendimento della pipeline.

Pipeline di input

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

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

  1. Lettura dei file
  2. Pre-elaborazione dei file (facoltativa)
  3. Trasferimento di file dalla macchina host al dispositivo

Una pipeline di input inefficiente può rallentare notevolmente l'applicazione. Un'applicazione è considerata limitata dall'input quando trascorre una parte significativa di tempo nella pipeline di input. Utilizza lo strumento di analisi della pipeline di input per capire dove la pipeline di input non è efficiente.

Dashboard della pipeline di input

Per aprire lo strumento di analisi della pipeline di input, seleziona Profilo, quindi input_pipeline_analyzer dal menu a discesa Strumenti.

La dashboard contiene tre sezioni:

immagine

  1. Riepilogo. Riassume la pipeline di input complessiva con informazioni su se la tua applicazione è vincolata dall'input e, in caso affermativo, in che misura.
  2. Analisi lato dispositivo. Mostra risultati di analisi dettagliati sul lato del dispositivo, tra cui il tempo del passaggio del dispositivo e l'intervallo di tempo del dispositivo impiegato in attesa dei dati di input su tutti i core in ogni passaggio.
  3. Analisi lato host. Mostra un'analisi dettagliata sul lato dell'host, inclusa una suddivisione del tempo di elaborazione dell'input sull'host.
Riepilogo della pipeline di input

La prima sezione indica se il programma è vincolato dall'input mostrando la percentuale di tempo del dispositivo trascorso in attesa di input dall'host. Se utilizzi una pipeline di input standard che è stata strumentata, lo strumento segnala dove viene spesa la maggior parte del tempo di elaborazione degli input. Ad esempio:

immagine

Analisi lato dispositivo

La seconda sezione descrive in dettaglio l'analisi lato dispositivo, fornendo informazioni sul tempo trascorso sul dispositivo rispetto all'host e sulla quantità di tempo del dispositivo trascorso in attesa dei dati di input dall'host.

immagine

  1. Statistiche sui tempi dei passaggi del dispositivo. Indica la media, la deviazione standard e l'intervallo (minima, massima) del tempo del passo del dispositivo.
  2. Tempo del passaggio. Mostra un grafico del tempo del passaggio del dispositivo (in millisecondi) su tutti i passaggi campionati. L'area blu corrisponde alla parte del passaggio in cui le Cloud TPU erano inattive in attesa dei dati di input dall'host. L'area rossa mostra il tempo effettivo di lavoro di Cloud TPU.
  3. Percentuale di tempo di attesa per i dati di input. Indica la media, la deviazione standard e l'intervallo (minima, massima) della frazione di tempo trascorsa su un dispositivo in attesa dei dati di input, normalizzata in base al tempo totale del passaggio del dispositivo.
  4. Intervallo di tempo del dispositivo nei core trascorso in attesa dei dati di input, per numero di passaggio. Mostra un grafico a linee che indica il tempo del dispositivo (espresso in percentuale del tempo totale del passaggio del dispositivo) impiegato in attesa dell'elaborazione dei dati di input. La frazione di tempo trascorsa varia da un core all'altro, pertanto anche l'intervallo di frazioni per ogni core viene tracciato per ogni passaggio. Poiché il tempo necessario per un passaggio è determinato dal core più lento, l'intervallo deve essere il più piccolo possibile.
Analisi lato host

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

  • Coda dei dati da trasferire al dispositivo Tempo impiegato per inserire i dati in una coda infeed prima di trasferirli al dispositivo.
  • Pre-elaborazione dei dati. Tempo impiegato per le operazioni di pre-elaborazione, ad esempio la compressione delle immagini.
  • Lettura anticipata dei dati dai file. Tempo impiegato per leggere i file, tra cui memorizzazione nella cache, prelettura e interlacciamento.
  • Lettura dei dati dai file on demand. Tempo impiegato per leggere i dati dai file senza memorizzazione nella cache, precaricamento e interlacciamento.
  • Altre letture o elaborazioni di dati. Tempo impiegato per altre operazioni relative all'input non utilizzando tf.data.

immagine

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

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

immagine

Ogni voce della tabella contiene le seguenti informazioni:

  1. Operazione di input. Mostra il nome dell'operazione di input di TensorFlow.
  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 in ciascuna delle istanze di operazione.
  4. %tempo totale. Mostra il tempo totale impiegato per un'operazione come frazione del tempo totale impiegato per l'elaborazione dell'input.
  5. Tempo totale auto (in ms). Mostra la somma cumulativa del tempo auto speso in ciascuna di queste istanze. Il tempo self misura il tempo trascorso all'interno del corpo della funzione, escluso il tempo trascorso nella funzione chiamata. Ad esempio, Iterator::PaddedBatch::Filter::ForeverRepeat::Mapviene chiamato da Iterator::PaddedBatch::Filter, pertanto il suo tempo di esecuzione totale è escluso dal tempo di esecuzione totale di quest'ultimo.
  6. %tempo autonomo totale. Mostra il tempo autonomo totale come frazione del tempo totale impiegato per l'elaborazione dell'input.
  7. Categoria. Mostra la categoria di elaborazione dell'operazione di immissione.

Profilo dell'operatore

Il profilo delle operazioni è uno strumento Cloud TPU che mostra le statistiche sul rendimento delle operazioni XLA eseguite durante un periodo di profilazione. Il profilo dell'operatore mostra:

  • Il rendimento dell'utilizzo di Cloud TPU da parte dell'applicazione come percentuale di tempo impiegato per le operazioni per categoria e di utilizzo dei FLOPS TPU.
  • Le operazioni che richiedono più tempo. Queste operazioni sono potenziali obiettivi 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 target efficaci per l'ottimizzazione. Ad esempio, se il tuo modello raggiunge solo il 5% dei FLOPS di picco di TPU, puoi utilizzare lo strumento per identificare le operazioni XLA che richiedono più tempo per l'esecuzione e quanti FLOPS di TPU consumano.

Utilizzo del profilo dell'operatore

Durante la raccolta dei profili, capture_tpu_profile crea anche un file op_profile.json contenente le statistiche sul rendimento delle operazioni XLA.

Puoi visualizzare i dati di op_profile in TensorBoard facendo clic sulla scheda Profilo nella parte superiore dello schermo e poi selezionando op_profile dal menu a discesa Strumenti. Viene visualizzato un messaggio simile al seguente:

immagine

  1. Sezione Panoramica. Mostra l'utilizzo di Cloud TPU e fornisce suggerimenti per l'ottimizzazione.
  2. Pannello di controllo. Contiene i controlli che ti consentono di impostare il numero di operazioni visualizzate nella tabella, le operazioni da visualizzare e il relativo ordinamento.
  3. Tabella Op. Una tabella che elenca le principali categorie di operazioni TensorFlow associate alle operazioni XLA. Queste operazioni sono ordinate in base alla percentuale di utilizzo di Cloud TPU.
  4. Schede dei dettagli dell'operazione. Dettagli sull'operazione visualizzati quando passi il mouse sopra un'operazione nella tabella. Sono inclusi l'utilizzo di FLOPS, la espressione in cui viene utilizzata l'operazione e il layout dell'operazione (adattamento).
Tabella Op XLA

La tabella Op 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 di operazioni, il nome dell'operazione TensorFlow associata e la percentuale di utilizzo dei FLOPS per la categoria. Per visualizzare (o nascondere) le 10 operazioni XLA più dispendiose in termini di tempo per una categoria, fai clic sul triangolo accanto al nome della categoria nella tabella.

immagine

  1. Ora. Mostra la percentuale totale di tempo impiegato da tutte le operazioni nella categoria. Puoi fare clic per espandere la voce e visualizzare la suddivisione del tempo impiegato da ogni singola operazione.
  2. Top10 Ops. Il pulsante di attivazione/disattivazione accanto al nome di una categoria mostra/nasconde le 10 operazioni più dispendiose in termini di tempo all'interno della categoria. Se nell'elenco delle operazioni viene visualizzata una voce di operazione di fusione, puoi espanderla per visualizzare le operazioni elementari non di fusione che contiene.
  3. Operazione TensorFlow. Mostra il nome dell'operazione TensorFlow associata all'operazione XLA.
  4. FLOPS. Mostra l'utilizzo in FLOPS, ovvero il numero misurato di FLOPS espresso in percentuale dei FLOPS di picco di Cloud TPU. Maggiore è la percentuale di utilizzo dei FLOPS, più velocemente vengono eseguite le operazioni. La cella della tabella è codificata a colori: verde per un utilizzo elevato di FLOPS (buono) e rosso per un utilizzo ridotto di FLOPS (cattivo).
Schede dei dettagli dell'operazione

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

immagine

  • Nome e Categoria. Mostra il nome e la categoria dell'operazione XLA evidenziati.
  • Utilizzo dei FLOPS. Mostra l'utilizzo dei FLOPS come percentuale del totale di FLOPS possibili.
  • Espressione. Mostra l'espressione XLA contenente l'operazione.
  • Utilizzo della memoria. Mostra la percentuale di utilizzo di picco della memoria da parte del programma.
  • Layout (solo operazioni di convoluzione). Mostra la forma e il layout di un tensore, ad esempio se la forma del tensore è una corrispondenza esatta per le 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:

  • padding (le unità della matrice vengono utilizzate parzialmente)
  • l'operazione di convoluzione è vincolata dalla memoria

Questa sezione fornisce un'interpretazione di alcuni numeri di un altro modello in cui i FLOP erano bassi. In questo esempio, la fusione in uscita e la convoluzione dominavano il tempo di esecuzione e 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 FLOPS e utilizzo della memoria inferiori rispetto a %convolution.340 nell'esempio precedente.

immagine

Esamina il layout e tieni presente che la dimensione del batch 16 viene aumentata a 128 e la dimensione della funzionalità 3 viene aumentata a 8, il che 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 %convolution.340 nell'esempio precedente, che ha una corrispondenza esatta con la matrice.

Visualizzatore pod

Lo strumento Pod Viewer fornisce visualizzazioni del rendimento per ogni core in un pod e mostra lo stato dei canali di comunicazione tra i core in un pod. Pod Viewer può identificare ed evidenziare potenziali colli di bottiglia e aree che richiedono ottimizzazione. Lo strumento funziona per i pod completi e per tutti i sezioni dei pod v2 e v3.

Per visualizzare lo strumento Visualizzatore di 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 di Pod Viewer include:

  1. Un cursore dei passaggi che ti consente di selezionare il passaggio da esaminare.
  2. Un grafico di topologia che visualizza in modo interattivo i core TPU nell'intero sistema TPU.
  3. Un grafico dei link di comunicazione, che mostra i canali di invio e ricezione nel grafico della topologia.
  4. Un grafico a barre della latenza dei canali di invio e ricezione. Se passi il mouse sopra una barra in 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 con informazioni dettagliate sul canale, come le dimensioni dei dati trasferiti, la latenza e la larghezza di banda.
  5. Un grafico di analisi dettagliata dei passaggi, che mostra un'analisi dettagliata di un passaggio per tutti i core. Questo può essere utilizzato per monitorare i colli di bottiglia del sistema e verificare se un determinato core sta rallentando il sistema.

immagine

Cursore del passaggio

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

Grafico della topologia

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

immagine

Il grafico della topologia è anche una mappa termica, codificata in base alla percentuale di tempo impiegata da un determinato tipo di suddivisione (ad esempio calcolo con elevato numero di operazioni in virgola mobile, infeed, invio e così via) nel passaggio selezionato. La barra appena sotto il grafico della topologia (mostrata nella seguente grafica) mostra una codifica a colori per l'utilizzo di core e chip. Il colore dei core indica l'utilizzo che va dal giallo al blu. Per il calcolo con un numero elevato di flop, i numeri più grandi (di colore più scuro) indicano un tempo maggiore impiegato per il calcolo. Per tutte le altre suddivisioni, i numeri più piccoli (colori più chiari) indicano tempi di attesa inferiori. Le potenziali aree problematiche, o hotspot, sono indicate quando un nucleo è più scuro degli altri.

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

Passa il mouse sopra uno dei piccoli rettangoli (core singoli) per visualizzare un suggerimento tecnico che mostra la posizione del core nel sistema, il relativo 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 sua percentuale di utilizzo in un passaggio.

immagine

Canali di comunicazione

Questo strumento consente di visualizzare i link send e recv se il tuo modello li utilizza per comunicare tra i core. Quando il modello contiene operazioni send e recv, puoi utilizzare un selettore di ID canale per selezionare un ID canale. Un link dal core di origine (src) al core di destinazione (dst) 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 send e recv.

immagine

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

immagine

  1. Dati trasferiti, che mostra i dati trasferiti dal canale send e recv in mebibyte (MiB).
  2. Latenza, che mostra la durata, in microsecondi, dall'inizio dell'evento send alla fine dell'evento recv-done.
  3. BW, che mostra la quantità di dati trasferiti, in gigabyte (GiB), dal core di origine al core di destinazione nel periodo di tempo.
  4. Ritardo invio, ovvero la durata dall'inizio di recv-done all'inizio dell'invio in microsecondi. Se l'operazione recv-done inizia dopo l'inizio dell'operazione send, il ritardo è zero.
  5. Nomi hlo, che mostra i nomi delle operazioni hlo XLA associate a questo canale. Questi nomi hlo sono associati alle statistiche visualizzate in altri strumenti di TensorBoard, come op_profile e memory_viewer.

Grafico di distribuzione dei passaggi

Questo grafico fornisce i dettagli per ogni passaggio 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 un determinato passaggio di addestramento, dove si trovano eventuali colli di bottiglia e se è presente un bilanciamento 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 specificano quanto segue:

  1. Calcolo ad alto numero di operazioni in virgola mobile, ovvero il tempo impiegato per le operazioni di convolve o fusione di output.
  2. Calcolo con pochi flop, che viene calcolato sottraendo dalla durata totale tutti gli altri dettagli.
  3. Infeed, ovvero il tempo che la TPU impiega in attesa sull'host.
  4. Outfeed, ovvero il tempo che l'host impiega in attesa dell'output della TPU.
  5. Sincronizzazione AllReduce, ovvero la parte di tempo impiegata per le operazioni CrossReplicaSum in attesa di sincronizzazione con altri core. Le operazioni CrossReplicaSum calcolano la somma tra le repliche.
  6. Calcolo AllReduce, ovvero il tempo di calcolo effettivo impiegato per le operazioni CrossReplicaSum.
  7. Operazioni di invio da chip a chip, ovvero il tempo impiegato per le operazioni di invio.
  8. Operazioni di invio-completamento da chip a chip, ovvero il tempo impiegato per le operazioni di invio.

Visualizzatore tracce

Trace Viewer è uno strumento di analisi delle prestazioni di Cloud TPU disponibile in Profilo. Lo strumento utilizza il Visualizzatore di profili degli eventi traccia di Chrome, pertanto funziona solo nel browser Chrome.

Lo strumento di visualizzazione dei traccianti mostra una sequenza temporale che indica:

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

Lo strumento di Trace ti consente di identificare i problemi di prestazioni del modello, quindi di adottare misure per risolverli. Ad esempio, a un livello generale, puoi identificare se l'infeed o l'addestramento del modello occupa la maggior parte del tempo. Se vai più in profondità, puoi identificare le operazioni TensorFlow che richiedono più tempo per essere eseguite.

Tieni presente che lo strumento di visualizzazione dei tracciati è limitato a 1 milione di eventi per Cloud TPU. Se devi valutare più eventi, utilizza il visualizzatore delle tracce in streaming.

Interfaccia del visualizzatore di Trace

Per aprire il visualizzatore di traccia, vai a TensorBoard, fai clic sulla scheda Profilo nella parte superiore dello schermo e scegli trace_viewer dal menu a discesa Strumenti. Viene visualizzato il visualizzatore con l'esecuzione più recente:

immagine

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

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

Ecco un'immagine più dettagliata del 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 sezione e traccia. Ogni sezione contiene più tracce e ha un triangolo a sinistra su cui puoi fare clic per espandere e comprimere la sezione. Esiste una sezione per ogni elemento di elaborazione del sistema.
  4. Selettore di strumenti. Contiene vari strumenti per interagire con il visualizzatore di traccia.
  5. Eventi. Questi mostrano il momento in cui è stata eseguita un'operazione o la durata dei 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 delle tracce per uso generale fornito da Chrome, che viene utilizzato per una serie di attività di analisi delle prestazioni.
Sezioni e canali

Il visualizzatore di Trace contiene le seguenti sezioni:

  • Una sezione per ogni nodo TPU, etichettata con il numero del chip TPU e il nodo TPU all'interno del chip (ad esempio, "Chip 2: TPU Core 1"). Ogni sezione del nodo TPU contiene i seguenti canali:
    • 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 traduce le operazioni XLA in codice che viene eseguito sulla TPU.
  • Una sezione per i thread in esecuzione sulla CPU della macchina host,etichettata come "Thread host". La sezione contiene un canale per ogni thread della CPU. Nota: puoi ignorare le informazioni visualizzate accanto alle etichette delle sezioni.
Selettore di strumenti Timeline

Puoi interagire con la visualizzazione della cronologia utilizzando il selettore degli strumenti della cronologia in TensorBoard. Puoi fare clic su uno strumento della cronologia o utilizzare le seguenti scorciatoie da tastiera per attivare e evidenziare uno strumento. Per spostare il selettore degli strumenti della sequenza temporale, fai clic nell'area tratteggiata in alto e trascinalo dove preferisci.

Utilizza gli strumenti della sequenza temporale come segue:

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

Strumento di panoramica
Trascina per eseguire la panoramica della visualizzazione della cronologia orizzontalmente e verticalmente.

Strumento Zoom
Trascina verso l'alto per aumentare lo zoom o verso il basso per diminuirlo sull'asse orizzontale (tempo). La posizione orizzontale del cursore del mouse determina il centro intorno al quale avviene lo zoom.

Nota: lo strumento di zoom presenta un bug noto per cui lo zoom rimane attivo se rilasci il tasto del mouse mentre il cursore del mouse è al di fuori della visualizzazione della sequenza temporale. In questo caso, fai clic brevemente sulla visualizzazione della sequenza temporale per interrompere lo zoom.

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

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. Visualizza opzioni. Non utilizzato per le TPU.
  3. Casella di ricerca. Inserisci il testo da cercare in tutti gli eventi il cui nome contiene il testo. Fai clic sui pulsanti freccia a destra della casella di ricerca per andare avanti e indietro tra gli eventi corrispondenti, selezionandoli uno alla volta.
  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 di traccia. Fai clic sul pulsante Guida (?) nella barra in alto 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 ingrandirlo rapidamente.

Eventi caratteristici

Di seguito sono riportati alcuni tipi di eventi che possono essere molto utili per analizzare il rendimento delle TPU.

immagine

  • InfeedDequeueTuple. Questa operazione TensorFlow viene eseguita su una TPU e riceve i dati di input provenienti dall'host. Se l'infeed richiede molto tempo, può significare che le operazioni di TensorFlow che pre-elaborano i dati sulla macchina host non riescono a tenere il passo con il tasso di consumo dei dati 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 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 sia lenta, ma che un nodo TPU stia aspettando un altro nodo TPU con un infeed di dati lento.

immagine

  • Dataset Ops. Il visualizzatore di Trace visualizza le operazioni sui set di dati eseguite quando i dati vengono caricati utilizzando l'API Dataset. Il Iterator::Filter::Batch::ForeverRepeat::Memory nell'esempio è compilato e corrisponde all'operazione dataset.map() . Utilizza il visualizzatore di 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 mettere in buffer i dati di input può evitare rallentamenti sporadici nell'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 presente quando utilizzi lo strumento di visualizzazione dei tracciati:

  • Limite di visualizzazione degli eventi. Il visualizzatore di 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 ignorati. Per acquisire più eventi TPU, puoi utilizzare il flag --include_dataset_ops=False per richiedere esplicitamente capture_tpu_profile di escludere le operazioni sui set di dati.
  • Eventi molto lunghi. Gli eventi che iniziano prima dell'inizio di un rilevamento o che terminano dopo il termine di un rilevamento non sono visibili nel visualizzatore di tracce. Di conseguenza, gli eventi molto lunghi possono essere persi.
  • Quando avviare l'acquisizione delle tracce. Assicurati di avviare l'acquisizione delle tracce dopo aver verificato che Cloud TPU sia in esecuzione. Se inizi prima di questa data, potresti vedere solo alcuni eventi o nessun evento nel visualizzatore di traccia. Puoi aumentare il tempo del profilo utilizzando il flag --duration_ms e puoi impostare i 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 della memoria

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

L'interfaccia utente del visualizzatore dei ricordi ha il seguente aspetto:

immagine

  1. Menu a discesa Host. Consente di selezionare un host TPU e i moduli di ottimizzazione di alto livello XLA (HLO) da visualizzare.
  2. Panoramica della memoria. Mostra l'allocazione e le dimensioni di picco della memoria senza spaziatura interna.
  3. Diagramma dello spazio di lavoro. Mostra il picco di utilizzo della memoria e un grafico delle tendenze di utilizzo della memoria nel corso della vita del programma. Se passi il mouse sopra un buffer in uno dei grafici dei buffer, viene aggiunta un'annotazione per la durata del buffer e la scheda dei dettagli del buffer.
  4. Grafici di 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 dei 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. Mostra i dettagli dell'allocazione per un buffer.
Riquadro Panoramica della memoria

Il riquadro Panoramica della memoria (in alto) mostra il nome del modulo e l'allocazione massima della memoria impostata quando la dimensione dell'allocazione del buffer totale raggiunge il massimo. Per il confronto viene mostrata anche la dimensione dell'allocazione di picco non riempita.

immagine

Grafico dello spazio di lavoro

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

immagine

Ogni punto del grafico a linee sovrapposto rappresenta un "punto di programma" nel programma HLO di XLA come pianificato dal compilatore. La linea fornisce un'idea della picchiosità che precede e segue il picco di utilizzo.

Interazione con gli elementi del grafico con buffer

Quando passi il mouse sopra un buffer visualizzato in uno dei grafici dei 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'ordine di grandezza relativo della dimensione del buffer rispetto all'allocazione massima della memoria. La lunghezza della riga corrisponde alla vita del buffer, a partire dal punto del programma in cui è stato allocato lo spazio del buffer e fino al punto in cui lo spazio è stato liberato.

Grafici di buffer

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

immagine

  • In base all'ordine del programma. Mostra i buffer da sinistra a destra nell'ordine in cui erano attivi durante l'esecuzione del programma. I buffer attivi per più tempo si trovano sul lato sinistro del grafico.

  • Per dimensioni. Mostra i buffer attivi durante l'esecuzione del programma in ordine decrescente di dimensioni. I buffer che hanno avuto l'impatto maggiore nel punto 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 dei buffer, viene visualizzata una scheda dei dettagli sull'allocazione del buffer (oltre alla linea Lifetime visualizzata nel grafico di lavoro). Una scheda dei dettagli tipica ha il seguente aspetto:

immagine

  1. Nome. Nome dell'operazione XLA.
  2. Categoria. Categoria dell'operazione.
  3. Dimensioni. Dimensioni dell'allocazione del buffer (inclusa la spaziatura interna).
  4. Taglia senza imbottitura. Dimensioni dell'allocazione del buffer senza spaziatura interna.
  5. Espansione. Magnitudine relativa della dimensione del buffer con spaziatura rispetto alle dimensioni senza spaziatura.
  6. Memoria aggiuntiva. Indica la quantità di memoria aggiuntiva utilizzata per il riempimento.
  7. Forma. Descrive il rango, le dimensioni e il tipo di dati dell'array N-dimensionale.
  8. Nome dell'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, Locale per thread e Temporaneo (ad esempio, allocazione del buffer all'interno di una fusione).
Errori "Memoria insufficiente"

Se esegui un modello e ricevi un "errore di esaurimento della memoria", utilizza il seguente comando per acquisire un profilo della memoria e visualizzarlo nel visualizzatore della memoria. Assicurati di impostare un valore appropriato per duration_ms in modo che il periodo di profilazione si sovrapponga al tempo 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 di tracce in streaming

Lo strumento di visualizzazione delle tracce in streaming (trace_viewer) è uno strumento di analisi delle prestazioni di Cloud TPU, disponibile per TensorFlow 2.18.0 o versioni successive, che fornisce rendering delle tracce dinamiche. Lo strumento utilizza il visualizzatore di profili degli eventi traccia di Chrome, pertanto funziona solo nel browser Chrome.

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

Utilizzo del visualizzatore di tracce di streaming

Per utilizzare lo strumento di visualizzazione delle tracce in streaming, trace_viewer, devi arrestare la sessione TensorBoard esistente e riavviare TensorBoard utilizzando l'indirizzo IP della TPU che vuoi esaminare. Lo strumento di visualizzazione delle tracce in streaming richiede che TensorBoard effettui una chiamata di procedura remota (GRPC) di Google a 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 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 vedere il caricamento dinamico degli eventi traccia 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 (il valore predefinito), 1 o 2, ottieni rispettivamente un singolo profilo, un monitoraggio di base o un monitoraggio dettagliato.

Apri una nuova Cloud Shell e connettiti tramite SSH alla tua VM (sostituisci il nome della VM nel comando con il nome della tua VM):

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

Nella nuova Cloud Shell, esegui capture_tpu_profile con il --monitoring_levelflag impostato su 1 o 2, ad esempio:

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

L'impostazione 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)

Indicatori di monitoraggio

  • --tpu (obbligatorio) specifica il nome della Cloud TPU che vuoi monitorare.
  • --monitoring_level. Modifica il comportamento di capture_tpu_profile da produzione di un singolo profilo a monitoraggio continuo di base o dettagliato. Sono disponibili tre livelli: Livello 0 (predefinito): genera un singolo profilo e poi esce. Livello 1: mostra la versione e l'utilizzo delle TPU. Livello 2: mostra l'utilizzo della TPU, il tempo di inattività della TPU e il numero di core TPU utilizzati. Fornisce anche i tempi di passaggio minimi, medi e massimi, nonché il contributo percentuale in-feed.
  • --duration_ms (facoltativo, il valore predefinito è 1000 ms) specifica il tempo per eseguire il profiling dell'host TPU durante ogni ciclo. In genere, deve essere sufficientemente lungo per acquisire almeno un valore di dati per un passaggio di addestramento. 1 secondo acquisisce un passaggio di addestramento nella maggior parte dei modelli, ma se il tempo del passaggio del modello è molto elevato, puoi impostare il valore su 2 volte 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 elevato. Per controllare rapidamente il tempo del passaggio del modello, imposta il valore su un numero basso.