Profilazione del modello con gli strumenti Cloud TPU

La profilazione del modello consente di ottimizzare le prestazioni di addestramento su Cloud TPU. Per creare un profilo per il modello, utilizza TensorBoard e il plug-in TensorBoard di Cloud TPU. 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 in Cloud TPU Nodes. Puoi anche installare TensorFlow manualmente. In entrambi i casi, potrebbero essere necessarie alcune dipendenze aggiuntive. Installale eseguendo questo comando:

pip3 install -r /usr/share/tpu/models/official/requirements.txt

Installa il plug-in TensorBoard di Cloud TPU

Accedi al nodo TPU mediante SSH:

   $ gcloud compute tpus execution-groups ssh your-vm --zone=your-zone
   

Esegui i seguenti 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"

Acquisire un profilo

Puoi acquisire un profilo utilizzando la UI di TensorBoard o in modo programmatico.

Acquisire un profilo utilizzando TensorBoard

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

Avvia il server TensorFlow Profiler

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

Questo avvia il server del profiler TensorFlow sulla VM TPU.

Inizia lo script di addestramento

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

Avvia il server TensorBoard

Apri una nuova finestra del terminale e connettiti alla tua VM TPU con port forwarding. In questo modo, il browser locale può comunicare con il server TensorBoard in esecuzione sulla VM VM.

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

Esegui TensorBoard nella finestra del terminale che hai appena aperto e specifica la directory in cui TensorBoard può scrivere 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:6006/ (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 ricaricamento nell'angolo in alto a destra della pagina TensorBoard. Per impostazione predefinita, nella pagina TensorBoard viene selezionata 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 PROTURA PROFILO.
  3. Seleziona il pulsante di opzione Nome TPU
  4. Digita il tuo nome TPU
  5. Seleziona il pulsante ACQUISTA.

Acquisire un profilo in modo programmatico

Il modo in cui acquisisci un profilo in modo programmatico dipende dal framework di ML che stai utilizzando.

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

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

Acquisisci i problemi più comuni del profilo

A volte, quando tenti di acquisire una traccia, potresti vedere messaggi simili al seguente:

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

Questo può verificarsi se la TPU non esegue attivamente i calcoli, la fase di addestramento richiede troppo tempo o per altri motivi. Se viene visualizzato questo messaggio, prova quanto segue:

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

Visualizzare i dati del profilo con TensorBoard

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

Visualizzatore di tracce

Trace visualizzatore è uno strumento di analisi delle prestazioni Cloud TPU disponibile in Profilo. Lo strumento utilizza il visualizzatore di profilazione degli eventi di traccia di Chrome, pertanto funziona 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 le operazioni di incremento, che preelaborano i dati di addestramento e li trasferisce alla TPU, mentre la TPU esegue l'addestramento effettivo del modello.

Il visualizzatore di tracce consente di identificare i problemi di prestazioni del modello, quindi di adottare misure per risolverli. Ad esempio, a un livello generale puoi capire se l'addestramento con feed o modelli richiede la maggior parte del tempo. Visualizzando i dettagli puoi identificare le operazioni di TensorFlow che richiedono l'esecuzione più lunga.

Tieni presente che il visualizzatore di tracce è limitato a un milione di eventi per Cloud TPU. Se devi valutare altri eventi, utilizza invece il visualizzatore delle tracce in streaming.

Interfaccia di visualizzazione di Trace

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

immagine

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

  1. Menu a discesa Esegui. Contiene tutte le esecuzioni per le quali hai acquisito informazioni di traccia. La visualizzazione predefinita è l'esecuzione più recente, ma puoi aprire il menu a discesa per selezionarne un'altra.
  2. Menu a discesa Strumenti. Seleziona diversi strumenti di profilazione.
  3. Menu a discesa Host. Seleziona un host che contiene un set Cloud TPU.
  4. Riquadro 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 della sequenza temporale.

Vediamo più in dettaglio il riquadro della sequenza temporale:

immagine

Il riquadro della sequenza temporale 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 monitoraggio. Ogni sezione contiene più tracce e presenta un triangolo a sinistra su cui puoi fare clic per espandere e comprimere la sezione. Nel sistema è presente una sezione per ogni elemento di elaborazione.
  4. Selettore strumenti. Contiene vari strumenti per interagire con il visualizzatore di tracce.
  5. Eventi. Mostrano il tempo durante il quale è stata eseguita un'operazione o la durata dei meta eventi, ad esempio le fasi dell'addestramento.
  6. Barra verticale delle schede. Questa funzione non ha uno scopo utile per Cloud TPU. La barra fa parte dello strumento di monitoraggio generale delle tracce fornito da Chrome utilizzato per diverse attività di analisi delle prestazioni.

Sezioni e tracce

Il visualizzatore tracce contiene le seguenti sezioni:

  • Una sezione per ogni nodo TPU, etichettata con il numero del chip TPU e del nodo TPU all'interno del chip (ad esempio, "Chip 2: TPU Core 1"). Ogni sezione nodo 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.
    • Operazioni XLA. Mostra le operazioni XLA in esecuzione 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 del computer host, con l'etichetta "Thread Thread". La sezione contiene una traccia per ogni thread di CPU. Nota: puoi ignorare le informazioni visualizzate accanto alle etichette delle sezioni.

Selettore strumento cronologia

Puoi interagire con la visualizzazione della sequenza temporale utilizzando il relativo strumento in TensorBoard. Puoi fare clic su uno strumento della sequenza temporale o utilizzare le seguenti scorciatoie da tastiera per attivare ed evidenziare uno strumento. Per spostare il selettore dello strumento "Spostamenti", fai clic nell'area tratteggiata in alto, quindi trascina il selettore fino alla posizione desiderata.

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 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 della sequenza temporale in orizzontale e in verticale.

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

Nota: lo strumento zoom dispone di un bug noto per cui lo zoom rimane attivo se rilasci il pulsante del mouse quando il cursore del mouse si trova all'esterno della visualizzazione della sequenza temporale. Se ti dovesse accadere, fai clic per breve tempo sulla visualizzazione della sequenza temporale per interrompere lo zoom.

Strumento di sincronizzazione
Trascina orizzontalmente per contrassegnare un intervallo di tempo. La lunghezza dell'intervallo viene mostrata sull'asse temporale. Per regolare l'intervallo, trascina le estremità. Per cancellare l'intervallo, fai clic in un punto qualsiasi della visualizzazione della sequenza temporale.

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

Grafici

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

Grafico del modello

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

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

immagine

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

Grafico di compatibilità TPU

La scheda Grafici include un modulo di verifica della compatibilità che verifica la presenza di operazioni che possono causare problemi quando viene eseguito un modello.

Per visualizzare il grafico sulla 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 le operazioni incompatibili (non valide) in rosso.

immagine

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

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

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

immagine

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

Interpretare i risultati di compatibilità

Profilo

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

Pagina Panoramica del profilo

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

La pagina mostra i dati nei seguenti riquadri:

immagine

  • Riepilogo del rendimento

    • Tempo di passi medio: la durata media del passaggio su tutti i passi campionati
    • Tempo di inattività dell'host: la percentuale di tempo in cui l'host è rimasto inattivo
    • Tempo di inattività della TPU - La percentuale di tempo in cui la TPU è rimasta inattiva
    • Utilizzo FLOPS: l'utilizzo percentuale delle unità matrice TPU
    • Utilizzo della larghezza di banda della memoria: la percentuale di larghezza di banda della memoria utilizzata
  • Grafico dei passaggi. Mostra un grafico del tempo di passaggio del dispositivo (in millisecondi) tra tutti i passaggi campionati. L'area blu corrisponde alla parte del tempo in cui le TPU sono rimaste inattive in attesa dei dati di input dell'host. L'area rossa mostra per quanto tempo Cloud TPU è stato effettivamente in funzione.

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

    Ogni riga mostra il tempo di attività di un'operazione (come percentuale del tempo impiegato da tutte le operazioni), il tempo cumulativo, la categoria, il nome e la tariffa 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 da un input e ogni volta che si verificano problemi con Cloud TPU. Suggerisce strumenti che puoi utilizzare per individuare i colli di bottiglia delle prestazioni.

Analizzatore sintattico delle pipeline di input

Lo strumento di analisi delle pipeline di input fornisce informazioni sui risultati relativi alle prestazioni. Lo strumento mostra i risultati relativi alle prestazioni del file input_pipeline.json che viene raccolto dallo strumento capture_tpu_profile.

Questo strumento indica immediatamente se il tuo programma è vincolato all'input e può illustrarti le analisi lato dispositivo e host per eseguire il debug di qualsiasi fase della pipeline.

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

Pipeline di input

Quando un programma TensorFlow legge i dati da un file, inizia in cima al grafico di TensorFlow in modalità pipeline. Il processo di lettura è diviso in più fasi di elaborazione dati collegate in serie, in cui l'output di una fase è l'input di quello successivo. Questo sistema di lettura è chiamato pipeline di input.

Una pipeline tipica per la lettura di record da file è costituita dalle fasi seguenti:

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

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

Dashboard pipeline di input

Per aprire lo strumento di analisi delle pipeline di input, seleziona Profilo e poi input_pipeline_analyzer dal menu a discesa Strumenti.

La dashboard è composta da tre sezioni:

immagine

  1. Riepilogo. Riepiloga la pipeline di input generale con informazioni sull'eventuale presenza di limiti di input della tua applicazione e, in caso affermativo, in che misura.
  2. Analisi lato dispositivo. Mostra risultati dettagliati delle analisi lato dispositivo, tra cui il tempo di esecuzione del dispositivo e l'intervallo di tempo del dispositivo utilizzato per attendere i dati di input tra i core per 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 il tuo programma è vincolato presentando la percentuale di tempo del dispositivo utilizzato per attendere l'input dell'host. Se utilizzi una pipeline di input standard strumentalizzata, lo strumento segnala dove viene utilizzata la maggior parte del tempo di elaborazione degli input. Ad esempio:

immagine

Analisi lato dispositivo

La seconda sezione descrive l'analisi lato dispositivo, fornendo informazioni sul tempo trascorso sul dispositivo e sull'host, nonché sulla quantità di tempo trascorso in attesa sui dati di input provenienti dall'host.

immagine

  1. Statistiche relative al tempo di esecuzione del dispositivo. Indica la media, la deviazione standard e l'intervallo (minimo, massimo) del tempo di passaggio del dispositivo.
  2. Tempo di passaggio. Mostra un grafico del tempo di passaggio del dispositivo (in millisecondi) tra tutti i passaggi campionati. L'area blu corrisponde alla parte del passaggio tempo di inattività delle Cloud TPU in attesa dei dati di input dell'host. L'area rossa mostra per quanto tempo Cloud TPU è stato effettivamente in funzione.
  3. Percentuale di tempo di attesa dei dati di input. Segnala la deviazione standard media e l'intervallo (minimo, massimo) della frazione di tempo trascorso su un dispositivo in attesa dei dati di input normalizzati sul tempo di passaggio totale del dispositivo.
  4. Intervallo di tempo del dispositivo tra i core utilizzati in attesa dei dati di input, per numero di passaggi. Visualizza un grafico a linee che mostra la durata del tempo sul dispositivo (espressa come percentuale del tempo totale di passi del dispositivo) in attesa dell'elaborazione dei dati di input. La frazione del tempo trascorso varia da core a core, pertanto anche l'intervallo di frazioni di ciascun core viene tracciato per ogni passaggio. Poiché il tempo richiesto da un passaggio è determinato dal core più lento, vuoi che l'intervallo sia il più piccolo possibile.
Analisi lato host

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

  • Mettere in coda i dati da trasferire sul dispositivo Tempo di mettere i dati in una coda di feed prima di trasferirli al dispositivo.
  • Pre-elaborazione dei dati. Tempo impiegato nelle operazioni di pre-elaborazione, come la decompressione delle immagini.
  • Lettura in anticipo dei dati dai file. Tempo di lettura dei file, incluse memorizzazione nella cache, precaricamento e interfoliazione.
  • Lettura di dati dai file on demand. Tempo dedicato alla lettura dei dati da file senza memorizzazione nella cache, precaricamento e interfoliazione.
  • Altre operazioni di lettura o elaborazione dei dati. Tempo impiegato per altre operazioni correlate all'input che non utilizzano tf.data.

immagine

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

Viene visualizzata una tabella di dati di origine simile alla seguente:

immagine

Ogni voce della tabella contiene le seguenti informazioni:

  1. Input Op. Mostra il nome dell'operazione TensorFlow dell'operazione di input.
  2. Conteggio. Mostra il numero totale di istanze dell'operazione eseguita durante il periodo di profilazione.
  3. Tempo totale (in ms). Mostra la somma complessiva di tempo trascorso in ciascuna istanza dell'operazione.
  4. % totale del tempo. Mostra il tempo totale trascorso su un'operazione come frazione del tempo totale trascorso nell'elaborazione dell'input.
  5. Tempo di autonomia totale (in ms). Mostra la somma complessiva del tempo trascorso in ogni istanza. Il tempo individuale misura il tempo trascorso all'interno del corpo della funzione, escluso il tempo trascorso nella funzione chiamata. Ad esempio, l'Iterator::PaddedBatch::Filter::ForeverRepeat::Map è chiamato da Iterator::PaddedBatch::Filter, pertanto l'autonomia totale è esclusa dal tempo totale stesso di quest'ultimo.
  6. %tempo autom. : mostra il tempo personale totale come frazione del tempo totale trascorso per l'elaborazione dell'input.
  7. Categoria. Mostra la categoria di elaborazione dell'operazione di input.

Profilo operativo

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

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

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

Utilizzo del profilo operativo

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

Puoi visualizzare i dati da op_profile in TensorBoard facendo clic sulla scheda Profile nella parte superiore dello schermo e selezionando op_profile dal menu a discesa Tools (Strumenti). Vedrai un display come questo:

immagine

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

Nella tabella Op sono elencate le categorie operative XLA, 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 op, il nome dell'operazione TensorFlow associato e la percentuale di utilizzo FLOPS per la categoria. Per visualizzare (o nascondere) le 10 operazioni XLA che richiedono più tempo per una categoria, fai clic sul triangolo accanto al nome della categoria nella tabella.

immagine

  1. Ora. Mostra la percentuale totale di tempo trascorso da tutte le operazioni in quella categoria. Puoi fare clic per espandere la voce e vedere la suddivisione del tempo trascorso da ogni singola operazione.
  2. Top 10 Ops. Il pulsante di attivazione/disattivazione accanto al nome di una categoria mostra/nasconde le prime 10 operazioni che richiedono molto tempo 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 fusione, a livello contenitore.
  3. TensorFlow Op. Mostra il nome dell'operatore TensorFlow associato all'operazione XLA.
  4. FLIP Mostra l'utilizzo di FLOPS, che corrisponde al numero misurato di FLOPS espresso come percentuale del FLOPS di picco di Cloud TPU. Maggiore è la percentuale di utilizzo FLOPS, più rapidamente sarà possibile eseguire le operazioni. La cella della tabella è codificata per colore: verde per un elevato utilizzo FLOPS (buono) e rosso per basso utilizzo FLOPS (cattivo).
Schede dei dettagli dell'operazione

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

immagine

  • Nome e Categoria. Mostra il nome e la categoria dell'operazione XLA evidenziati.
  • Utilizzo di FLOPS. Mostra l'utilizzo di FLOPS come percentuale del totale di FLOPS.
  • Espressioni. Mostra l'espressione XLA che contiene l'operazione.
  • Utilizzo della memoria. Mostra la percentuale di utilizzo massimo della memoria in base al programma.
  • Layout (solo operazioni Convolution). Mostra la forma e il layout di un tensore, compreso se la forma del tensore è adatta esattamente alle unità matrice e al modo in cui la matrice è imbottita.
Interpretare i risultati

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

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

Questa sezione fornisce un'interpretazione di alcuni numeri di un modello diverso in cui le FLOP erano basse. In questo esempio, la fusione dell'output e la convoluzione hanno dominato i tempi di esecuzione ed è stata presente una lunga coda di operazioni vettoriali o scalate con FLOPS molto bassi.

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

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

immagine

Esamina il layout e tieni presente che la dimensione batch 16 viene aggiunta a 128, mentre la dimensione caratteristica 3 viene aggiunta a 8, il che significa che viene utilizzato in modo efficace solo il 5% delle unità matrice. (il calcolo per questa istanza dell'utilizzo percentuale è ((batch_time * num_of_features) / padding_size ) / num_of_cores. Confronta i FLOPS in questo esempio con la macro %convolution.340 nell'esempio precedente, che si adatta esattamente alla matrice.

Visualizzatore pod

Lo strumento Visualizzatore pod fornisce visualizzazioni delle prestazioni per ogni core in un pod e mostra lo stato dei canali di comunicazione tra i core di un pod. Il visualizzatore pod è in grado di identificare ed evidenziare i potenziali colli di bottiglia e le aree che richiedono un'ottimizzazione. Lo strumento 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 della finestra di TensorBoard.
  2. Fai clic sul menu Strumenti sul lato sinistro della finestra e seleziona pod_viewer.

L'interfaccia utente del visualizzatore pod include:

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

immagine

Dispositivo di scorrimento Passaggio

Utilizza il dispositivo di scorrimento per selezionare un passaggio. Nel resto dello strumento vengono mostrate statistiche, come analisi dei passaggi e link di comunicazione, per quel passaggio.

Grafico di topologia

Il grafico della topologia è organizzato gerarchicamente in base all'host, al chip e al core. I rettangoli più piccoli sono i core TPU. Due core indicano un chip TPU e quattro chip indicano un host.

immagine

Il grafico della topologia è anche una mappa termica, codificata con il colore in base alla percentuale di tempo in cui un passaggio specifico (ad esempio computing flop elevato, infeed, invio e così via) esegue il passaggio selezionato. La barra appena sotto il grafico della topologia (mostrata nell'immagine seguente) mostra un codice colore per l'utilizzo di core e chip. Il colore dei core mostra l'utilizzo dal giallo al blu. Per i calcoli flop elevati, i numeri più grandi (colore più scuro) indicano più tempo che viene speso per il calcolo. Per tutte le altre analisi, numeri più piccoli (colori più chiari) indicano tempi di attesa inferiori. Le aree con problemi potenziali, o hotspot, sono indicate quando un core è più scuro degli altri.

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

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

immagine

Canali di comunicazione

Questo strumento ti aiuta a visualizzare i link di invio e di risposta se il modello li utilizza per comunicare tra i core. Se il tuo modello contiene operazioni di invio e risposta, puoi utilizzare un selettore ID canale per selezionarne uno. Un link del core di origine (src) e 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 che fornisce ulteriori dettagli sul canale di comunicazione. In genere una scheda di questo tipo ha il seguente aspetto:

immagine

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

Grafico di dettaglio dei passaggi

Questo grafico fornisce i dettagli relativi a ciascun passaggio della formazione o della valutazione.

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

immagine

Nella barra a sinistra viene visualizzata una scheda che fornisce ulteriori dettagli sulla suddivisione dei passaggi. In genere una scheda di questo tipo ha il seguente aspetto:

immagine

I campi nella scheda specificano quanto segue:

  1. High Flops Compute, il tempo dedicato alle operazioni di evoluzione o di fusione degli output.
  2. Calcolo flop basso, calcolato sottraendo tutte le altre suddivisioni dalla durata totale.
  3. Infeed, ossia il tempo dedicato alla TPU in attesa sull'host.
  4. Outfeed, ovvero il tempo trascorso dall'host in attesa sull'output della TPU.
  5. AllRiduzione la sincronizzazione, che è la parte del tempo dedicata alle operazioni CrossReplicaSum in attesa di sincronizzazione con altri core. Il sistema operativo CrossReplicaSum calcola la somma delle repliche.
  6. AllReduce di computing, che è il tempo di calcolo effettivo trascorso sulle operazioni CrossReplicaSum.
  7. Chip per chip di invio invio, ovvero il tempo dedicato alle operazioni di invio.
  8. Chip per chip RECv-done Ops, che indica il tempo impiegato per le operazioni recv.

Visualizzatore di tracce

Trace visualizzatore è uno strumento di analisi delle prestazioni Cloud TPU disponibile in Profilo. Lo strumento utilizza il visualizzatore di profilazione degli eventi di traccia di Chrome, pertanto funziona 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 le operazioni di incremento, che preelaborano i dati di addestramento e li trasferisce alla TPU, mentre la TPU esegue l'addestramento effettivo del modello.

Il visualizzatore di tracce consente di identificare i problemi di prestazioni del modello, quindi di adottare misure per risolverli. Ad esempio, a un livello generale puoi capire se l'addestramento con feed o modelli richiede la maggior parte del tempo. Visualizzando i dettagli puoi identificare le operazioni di TensorFlow che richiedono l'esecuzione più lunga.

Tieni presente che il visualizzatore di tracce è limitato a un milione di eventi per Cloud TPU. Se devi valutare altri eventi, utilizza invece il visualizzatore delle tracce in streaming.

Interfaccia di visualizzazione di Trace

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

immagine

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

  1. Menu a discesa Esegui. Contiene tutte le esecuzioni per le quali hai acquisito informazioni di traccia. La visualizzazione predefinita è l'esecuzione più recente, ma puoi aprire il menu a discesa per selezionarne un'altra.
  2. Menu a discesa Strumenti. Seleziona diversi strumenti di profilazione.
  3. Menu a discesa Host. Seleziona un host che contiene un set Cloud TPU.
  4. Riquadro 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 della sequenza temporale.

Vediamo più in dettaglio il riquadro della sequenza temporale:

immagine

Il riquadro della sequenza temporale 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 monitoraggio. Ogni sezione contiene più tracce e presenta un triangolo a sinistra su cui puoi fare clic per espandere e comprimere la sezione. Nel sistema è presente una sezione per ogni elemento di elaborazione.
  4. Selettore strumenti. Contiene vari strumenti per interagire con il visualizzatore di tracce.
  5. Eventi. Mostrano il tempo durante il quale è stata eseguita un'operazione o la durata dei meta eventi, ad esempio le fasi dell'addestramento.
  6. Barra verticale delle schede. Questa funzione non ha uno scopo utile per Cloud TPU. La barra fa parte dello strumento di monitoraggio generale delle tracce fornito da Chrome utilizzato per diverse attività di analisi delle prestazioni.
Sezioni e tracce

Il visualizzatore tracce contiene le seguenti sezioni:

  • Una sezione per ogni nodo TPU, etichettata con il numero del chip TPU e del nodo TPU all'interno del chip (ad esempio, "Chip 2: TPU Core 1"). Ogni sezione nodo 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.
    • Operazioni XLA. Mostra le operazioni XLA in esecuzione 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 del computer host, con l'etichetta "Thread Thread". La sezione contiene una traccia per ogni thread di CPU. Nota: puoi ignorare le informazioni visualizzate accanto alle etichette delle sezioni.
Selettore strumento cronologia

Puoi interagire con la visualizzazione della sequenza temporale utilizzando il relativo strumento in TensorBoard. Puoi fare clic su uno strumento della sequenza temporale o utilizzare le seguenti scorciatoie da tastiera per attivare ed evidenziare uno strumento. Per spostare il selettore dello strumento "Spostamenti", fai clic nell'area tratteggiata in alto, quindi trascina il selettore fino alla posizione desiderata.

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 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 della sequenza temporale in orizzontale e in verticale.

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

Nota: lo strumento zoom dispone di un bug noto per cui lo zoom rimane attivo se rilasci il pulsante del mouse quando il cursore del mouse si trova all'esterno della visualizzazione della sequenza temporale. Se ti dovesse accadere, fai clic per breve tempo sulla visualizzazione della sequenza temporale per interrompere lo zoom.

Strumento di sincronizzazione
Trascina orizzontalmente per contrassegnare un intervallo di tempo. La lunghezza dell'intervallo viene mostrata sull'asse temporale. Per regolare l'intervallo, trascina le estremità. Per cancellare l'intervallo, fai clic in un punto qualsiasi 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 sono visualizzati in colori diversi; i colori stessi non hanno alcun significato specifico.

Barra superiore della sequenza temporale

La barra superiore del riquadro Cronologia contiene diversi controlli ausiliari:

immagine

  1. Visualizzazione 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 avanti avanti e indietro tra gli eventi corrispondenti, selezionandoli a turno.
  4. Pulsante Console. Non utilizzato per le TPU.
  5. Pulsante Guida. Fai clic per visualizzare un riepilogo della guida.
Scorciatoie da tastiera

Di seguito sono riportate le scorciatoie da tastiera che puoi utilizzare nel visualizzatore tracce. Fai clic sul pulsante della 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 premi f per aumentarlo rapidamente.

Eventi caratteristici

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

immagine

  • InfeedDequeueTuple. Questa operazione di TensorFlow viene eseguita su una TPU e riceve dati di input provenienti dall'host. Quando l'alimentazione richiede molto tempo, può significare che le operazioni di TensorFlow che preelaborano i dati sulla macchina host non sono in grado di tenere il passo con la velocità di consumo dei dati TPU. Puoi visualizzare gli eventi corrispondenti nelle tracce host denominate InfeedEnqueueTuple. Per visualizzare un'analisi della pipeline di input più dettagliata, utilizza lo Strumento di analisi delle pipeline di input.

  • CrossReplicaSum: Questa operazione di 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 tutti i nodi TPU con un passaggio. Se questa operazione richiede molto tempo, potrebbe non significare che l'operazione di somma stessa è lenta, ma che un nodo TPU è in attesa di un altro nodo TPU con un feed di dati lento.

immagine

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

immagine

  • Precarica thread. L'utilizzo di dataset.prefetch() per il buffer 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 tracce:

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

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

Visualizzatore ricordo

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

L'interfaccia utente del visualizzatore di memoria è simile alla seguente:

immagine

  1. Menu a discesa Host. Seleziona per visualizzare un host in TPU e i moduli Ottimizzatore di alto livello XLA (HLO).
  2. Panoramica della memoria. Mostra l'allocazione e le dimensioni massime della memoria senza spaziatura interna.
  3. Grafico dell'area di lavoro. Mostra le tendenze di utilizzo massimo della memoria e un grafico delle tendenze di utilizzo della memoria per tutta la durata 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 dell'utilizzo massimo della memoria, come indicato dalla linea verticale nell'area di lavoro. Se passi il mouse sopra un buffer in uno dei grafici buffer, viene visualizzata la barra di durata del buffer nel grafico dell'area di lavoro e una scheda dei dettagli a sinistra.
  5. Scheda Dettagli allocazione del buffer. Visualizza i dettagli di allocazione per un buffer.
Riquadro Panoramica della memoria

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

immagine

Grafico dell'area di lavoro

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

immagine

Ogni punto sul diagramma di linea sovrastante rappresenta un "punto di programma" nel programma HLO di XLA come pianificato dal compilatore. La linea fornisce un'idea della spinta che porta a un picco dell'utilizzo.

Interazione con elementi del buffer

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

Grafici buffer

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

immagine

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

  • Per dimensione. Mostra i buffer attivi durante l'esecuzione del programma in ordine decrescente di dimensione. I buffer con l'impatto maggiore al punto di utilizzo massimo della memoria sono a sinistra.

Scheda dettagli allocazione buffer

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

immagine

  1. Nome. Nome dell'operazione XLA.
  2. Categoria. Categoria operativa.
  3. Dimensioni. Dimensione dell'allocazione del buffer (inclusa la spaziatura interna).
  4. Dimensioni non imbottite. Dimensione dell'allocazione del buffer senza spaziatura interna.
  5. Espansione. Magnitudo relativa della dimensione del buffer imbottito rispetto alla dimensione non imbottita.
  6. Memoria aggiuntiva. Indica la quantità di memoria supplementare utilizzata per la spaziatura interna.
  7. Forma. Descrive il ranking, le dimensioni e il tipo di dati dell'array N-dimensional.
  8. Nome operazione TensorFlow. Mostra il nome dell'operazione di TensorFlow associata all'allocazione del buffer.
  9. Tipo di allocazione. Indica la categoria di allocazione del buffer. I tipi sono: Parametro, Output, Thread-local e Temporaneo (ad es. buffering all'interno di una fusione).
Errori di memoria esaurita

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

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

Visualizzatore tracce in streaming

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

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

Utilizzo del visualizzatore di tracce di streaming

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

Puoi trovare l'indirizzo IP di un host Cloud TPU nella pagina Cloud TPU. Cerca 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 o diminuire lo zoom per vedere gli eventi di traccia 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 tuo 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 un unico profilo, monitoraggio di base o monitoraggio dettagliato, rispettivamente.

Apri un nuovo Cloud Shell e connettilo alla VM (sostituisci vm-name nel comando con il tuo nome VM):

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

Nel nuovo Cloud Shell, esegui capture_tpu_profile con il flag --monitoring_levelimpostato 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 in termini di produzione di un singolo profilo o monitoraggio continuo di base o dettagliato. Sono disponibili tre livelli: Livello 0 (predefinito): genera un singolo profilo, quindi esci. Livello 1: mostra la versione TPU e l'utilizzo della TPU. Livello 2: mostra l'utilizzo della TPU, il tempo di inattività della TPU e il numero di core TPU utilizzati. Fornisce inoltre i tempi di caricamento minimi, medi e massimi insieme alla percentuale di contributo.
  • --duration_ms (facoltativo, il valore predefinito è 1000 ms) specifica per quanto tempo profilare l'host TPU durante ogni ciclo. In genere, questo dovrebbero essere sufficienti a rilevare almeno un passaggio di dati di addestramento. 1 secondo acquisisce un passaggio di addestramento nella maggior parte dei modelli, ma se il tempo di passaggio del modello è molto elevato, puoi impostare il valore su 2x step_time (in ms).
  • --num_queries specifica il numero di cicli di esecuzione di capture_tpu_profile. Per monitorare continuamente il job TPU, imposta il valore su un numero alto. Per controllare rapidamente il tempo di passi del modello, imposta il valore su un numero basso.