Strumento di visualizzazione della memoria

Puoi utilizzare il visualizzatore della memoria per visualizzare l'utilizzo della memoria durante il ciclo di vita del programma. Puoi esaminare i dettagli dei contenuti della memoria nel momento di picco dell'utilizzo della memoria, ad esempio per eseguire il debug di situazioni di esaurimento della memoria (OOM). Lo strumento di visualizzazione della memoria può aiutarti a vedere l'utilizzo della memoria globale e quanto manca al calcolo per esaurire la memoria.

Tutte le informazioni visualizzate in Visualizzatore della memoria sono puramente statiche, ottenute dal compilatore XLA; le informazioni di runtime dinamiche sono presentate nello strumento Profilo della memoria.

Piattaforme supportate

TPU: supportata

GPU: supportata

Componenti di Memory Viewer

Memory Viewer è costituito da diversi componenti chiave:

  1. Menu a discesa di controllo utente che ti consentono di personalizzare i dati visualizzati:
    • Tipi di memoria: i tipi di memoria supportati dipendono dall'acceleratore. Per le GPU, l'attenzione è rivolta alla memoria a larghezza di banda elevata (HBM), mentre per le TPU puoi visualizzare anche l'utilizzo delle memorie on-chip, tra cui VMEM, SMEM, CMEM, Sync Flags (SFlag), Sparsecore e la memoria host.
    • Moduli: si tratta dei programmi XLA che hanno fatto parte dell'esecuzione. Un buon punto di partenza è spesso un modulo di primo livello, con un'etichetta simile a "jit_train_step" o "jit_generate".
  2. La sezione di panoramica del testo fornisce informazioni di alto livello, come l'allocazione di memoria di picco richiesta per il programma, la suddivisione tra argomenti e variabili temporanee e così via. Esiste un overhead imposto dal padding, necessario a causa delle limitazioni delle forme dei tensori supportate sugli acceleratori. Se questo spazio aggiuntivo rappresenta una parte significativa dell'allocazione totale, potrebbe indicare un'opportunità di ottimizzazione.
  3. Il grafico a linee "Dimensione allocazione memoria rispetto all'ordine del programma" traccia l'utilizzo della memoria rispetto ai punti di programma (sequenza HLO) come pianificato dal compilatore.
    • Tieni presente che l'asse x non indica il tempo.
    • Il grafico evidenzia in modo specifico il punto del programma con il picco di utilizzo della memoria del modulo scelto. Il profiler e gli strumenti non sono consapevoli della coesistenza di moduli su un determinato chip/memoria. Quando ogni modulo viene compilato, il compilatore annota il profilo con il punto di partenza "di riferimento" della memoria totale allocata (dai moduli che sono stati compilati prima di questo) e conteggia da qui verso l'alto e verso il basso man mano che si verificano altre allocazioni e deallocazioni. Tuttavia, eventuali allocazioni future da parte di altri moduli compilati prima dell'esecuzione non vengono acquisite. Tienilo presente durante il debug di situazioni di OOM.
  4. I grafici di buffer nella parte inferiore della pagina suddividono l'utilizzo della memoria nel punto di picco di utilizzo del programma (indicato dalla linea verticale nel grafico a linee sull'utilizzo della memoria). Sono presenti tre grafici, che mostrano tutti l'intero insieme di buffer allocated dal programma, ma ordinati in tre modi diversi:

    • Per ordine di programma: l'ordine in cui sono stati creati durante l'esecuzione del programma, con i più vecchi a sinistra.
    • Per dimensione: quelle con l'impatto maggiore sul punto di utilizzo massimo della memoria sono a sinistra.
    • In base al sovraccarico di spaziatura che impongono: i più "inefficienti" dal punto di vista hardware vengono visualizzati a sinistra.

      Tieni presente che i colori dei buffer non hanno un significato particolare.

  5. Se passi il mouse sopra un buffer in uno dei tre grafici, vengono visualizzate altre due finestre:

    • Un overlay sul grafico a linee dell'utilizzo della memoria in un colore corrispondente alla scheda del buffer, che indica la durata del buffer; ovvero una barra orizzontale i cui bordi sinistro e destro indicano i punti di allocazione e deallocazione all'interno dell'ordine del programma. L'altezza della barra orizzontale rappresenta le dimensioni relative del buffer selezionato rispetto all'allocazione di picco.
    • Una scheda separata dei dettagli del buffer, in genere sul lato sinistro, con i dettagli dell'operazione specifica, se applicabile. Una scheda tipica include le seguenti informazioni:
      • Nome: il nome dell'operazione XLA, che puoi cercare in Graph Viewer o Trace Viewer.
      • Dimensioni: le dimensioni dell'allocazione del buffer, con e senza spaziatura interna.
      • Forma: descrive il rango, le dimensioni e il tipo di dati dell'array n-dimensionale.
      • Nome op. framework: mostra il nome dell'operazione del framework associata a questa allocazione.
      • Tipo di allocazione: classifica le allocazioni dei buffer nei seguenti tipi: Parametro, Output, Locale per thread e Temporaneo (ad es. allocazione del buffer all'interno di una fusione).