Trace Viewer
Mit dem Trace Viewer können Sie den Zeitplan der Ereignisse visualisieren, die während der Profiling-Sitzung aufgetreten sind. Sie sehen dort die Dauer der Vorgänge, die von Ihrem Modell in verschiedenen Teilen des Systems ausgeführt werden, z. B. auf dem Host (CPU) und auf Beschleunigern (GPUs oder TPUs). So können Sie nachvollziehen, wie Ihr Modell Hardwareressourcen nutzt, Leistungsengpässe erkennen und Ihr Modell für eine schnellere Ausführung optimieren. Die Benutzeroberfläche des Trace Viewers basiert auf der in chrome://tracing
verwendeten Benutzeroberfläche und erfordert daher die Verwendung des Chrome-Browsers.
Unterstützte Plattformen
TPU: unterstützt
GPU: unterstützt
Der Trace Viewer für GPUs gruppiert Ereignisse in Zeitachsen pro GPU-Chip und den zugehörigen Streams. Bei TPUs werden Ereignisse in Zeitachsen pro TPU-Chip und ‑Kern organisiert. In beiden Fällen werden in der Trace Viewer auch Ereignisse in Zeitleisten pro Thread für die Host-CPU angezeigt, mit der die Beschleuniger verbunden sind.
Mit der Zeitachse interagieren
Der Trace Viewer bietet mehrere Tools und Methoden zum Navigieren und Prüfen der Zeitachse:
- Navigation: Sie können die folgenden Tastenkombinationen verwenden:
- W:Heranzoomen.
- S:Herauszoomen
- A:Nach links schwenken
- D:Nach rechts schwenken
- Toolauswahl: Sie können in der Toolauswahl auf ein Tool klicken oder die entsprechende Tastenkombination verwenden:
- Auswahltool (1 oder !): Klicken Sie auf ein Ereignis, um es auszuwählen und die Details im Bereich „Details“ aufzurufen. Wählen Sie mehrere Ereignisse aus, indem Sie Strg + Klicken verwenden, um eine Zusammenfassung aufzurufen.
- Verschieben-Tool (2 oder @): Ziehen Sie, um die Zeitachse horizontal oder vertikal zu verschieben.
- Zoom-Tool (3 oder #): Ziehen Sie, um einen bestimmten Bereich der Zeitachse heranzuzoomen.
- Zeitintervall-Tool (4 oder $): Ziehen Sie, um ein Zeitintervall zu markieren. Die Dauer des markierten Intervalls wird angezeigt. Mit der Taste „m“ kannst du auch eine Auswahl markieren und die Gesamtdauer ermitteln.
- Auf ausgewählte Ereignisse zoomen (f): Wählen Sie ein oder mehrere Ereignisse aus und drücken Sie die Taste „f“, um schnell auf diesen Teil der Zeitachse zu zoomen. Das ist hilfreich, wenn Sie sich auf einen bestimmten Trainingsschritt konzentrieren möchten.
Wenn eine große Anzahl von Trace-Ereignissen verarbeitet wird, arbeitet der Trace Viewer im Streaming-Modus. Das bedeutet, dass Daten bei Bedarf geladen werden, während Sie den Zeitstrahl schwenken und heranzoomen, ähnlich wie bei Kartenanwendungen. Wenn Sie schneller heranzoomen, als die Daten geladen werden können, wird möglicherweise eine Darstellung mit niedriger Auflösung angezeigt, bis der Ladevorgang abgeschlossen ist.
Komponenten der Trace Viewer-Oberfläche
Die wichtigsten UI-Komponenten im Trace Viewer:
- Die Zeitachse verläuft horizontal oben und zeigt die Zeit in Bezug auf den Beginn des Traces an.
- Zeitleisten sind nach Abschnitten und Tracks organisiert. Die Labels befinden sich auf der linken vertikalen Achse. Jeder Abschnitt steht für ein Verarbeitungselement (z.B. einen Geräteknoten oder Host-Threads) und kann maximiert oder minimiert werden. Innerhalb jedes Abschnitts befinden sich Tracks, also Zeitleisten für bestimmte Aktivitäten.
- Ereignisse sind die farbigen rechteckigen Blöcke auf den Zeitachsen-Tracks, die die Dauer eines Vorgangs oder eines Metaereignisses wie eines Trainingsschritts darstellen. Die Farbe der Ereignisse hat keine bestimmte Bedeutung.
- Im Detailbereich werden zusätzliche Informationen zu den im Zeitachsenbereich ausgewählten Ereignissen angezeigt, z. B. Name, Startzeit und Dauer.
Typische Abschnitte und Tracks
Trace Viewer bietet die folgenden Abschnitte und Tracks.
- Ein Abschnitt für jeden TPU-Knoten mit den folgenden Tracks:
- XLA-Modul: Das ausgeführte XLA-Programm.
- XLA-Vorgänge: Zeigt die XLA-HLO-Vorgänge an, die auf dem TPU-Kern ausgeführt wurden. Jeder Framework-Vorgang höherer Ebene (z. B. JAX, TensorFlow oder PyTorch) wird in einen oder mehrere XLA-Vorgänge übersetzt, die dann für die Ausführung auf der TPU kompiliert werden. Wenn Sie auf einen XLA-Vorgang klicken, werden im Grafikbetrachter Links zum Vorgang sowie zusätzliche Informationen zum Vorgang angezeigt, z. B. Start-/Stoppzeiten, Dauer und der Stack-Trace der Quelle (sofern vom Framework und Compiler bereitgestellt).
- XLA TraceMe: Vom Nutzer angegebene Anmerkungen in seinem Code, die logische Arbeitseinheiten beschreiben, die er erfassen möchte. Möglicherweise sehen Sie hier auch Daten, wenn Sie keine Anmerkungen hinzugefügt haben. Diese werden in der Regel von XLA (z. B. Barrierekerne) oder XProf selbst (z. B. gelöschte Trace-Einträge) hinzugefügt.
- Schritt: Zeigt die Dauer der Trainingsschritte an, die auf diesem TPU-Kern ausgeführt werden, sofern sie im Nutzerprogramm oder -framework entsprechend kommentiert wurden.
- Framework-Vorgänge: Zeigt Framework-Vorgänge (z. B. JAX, TensorFlow oder PyTorch) an, die auf dem TPU-Kern ausgeführt werden, sofern sie im Nutzerprogramm oder Framework entsprechend kommentiert sind.
- Framework Name Scope: Für jede Framework-Operation eine Visualisierung des Stack-Traces. Der Übersichtlichkeit halber wird dieser Track nur für ein einzelnes Gerät angezeigt.
- Quellcode: Pfad zum ausgeführten Quellcode, sofern im Profil verfügbar.
- Skalareinheit: Für TPUs werden Ereignisse dargestellt, die auf der Skalareinheit ausgeführt werden, sofern sie im Profil vorhanden sind.
- TensorCore-Synchronisierungs-Flags: Synchronisierungsmechanismus auf TPUs, dargestellt, wenn im Profil vorhanden.
- Host Offload: Vorgänge, die Daten asynchron zwischen Hostspeicher und Beschleunigerspeicher verschieben. In der Zeile „XLA-Vorgänge“ werden in der Regel entsprechende Start- und Stoppvorgänge angezeigt, die darauf hinweisen, dass der Accelerator für die Datenübertragung vorbereitet wird (z.B. werden Quell-/Zielnetzwerkbereiche für die Dauer der Übertragung als „in Verwendung“ markiert). Es können mehrere Host-Offload-Zeilen vorhanden sein, wenn mehrere Offload-Vorgänge parallel ausgeführt werden. In diesem Fall müssen im Trace Viewer mehrere Ereignisse gleichzeitig angezeigt werden.
- Ein Abschnitt für jeden Sparsecore-Knoten: Bei einigen TPU-Generationen (z.B. TPU v5p und TPU v6e sind zusätzlich zu den MXU-Einheiten für die dichte Berechnung mit einer oder mehreren SparseCore-Einheiten ausgestattet. Die zu diesen Kernen gehörenden Module, Vorgänge und TraceMes werden in diesem Abschnitt angezeigt.
- Einen Abschnitt für jeden GPU-Knoten mit den folgenden Tracks:
- XLA-Module, Framework-Vorgänge, Framework-Namensraum, Schritte, Quellcode. Sie ähneln TPU-Abschnitten.
- Ein Track pro Stream. Der Streamname enthält auch Informationen zu den Arten von Vorgängen, die auf dem Stream ausgeführt werden (z. B. Memcpy oder Compute).
- XLA TraceMe wird für GPUs nicht unterstützt.
- XLA-Vorgänge werden zwar in GPU-Abschnitten angezeigt, sind aber derzeit nicht immer korrekt, da sie aus den Streamdaten abgeleitet werden. Daher können sie das Ausführungsmodell der GPU nicht vollständig berücksichtigen, bei dem es eine N:M-Zuordnung von XLA-Ops zu den tatsächlichen Kernen geben kann, die in den verschiedenen Streams ausgeführt werden, und die dynamische Planung mehrerer Streams auf verschiedene SMs in der Hardware.
- Ein Abschnitt für jede Komponente (z.B. einen Threadpool), die auf der CPU des Hostcomputers ausgeführt wird, mit einem Track pro Thread (bei Threadpools). Hier sehen Sie auch Python-Traces, sofern diese während der Profilerhebung aktiviert waren.
Hinweis: Nur die XLA-Vorgänge für TPUs und Streamdaten für GPUs sind direkt auf dem erfassten Profil basierend. Alle anderen Zeilen sind „abgeleitete Zeilen“, die optionale „Sideband“-Informationen des Compilers, optionale Nutzeranmerkungen und/oder von XProf angewendete Heuristiken enthalten. Daher werden diese abgeleiteten Linien in bestimmten Profilen möglicherweise nicht angezeigt.
Weitere Funktionen
- Über die Suchleiste „Ereignisse suchen…“ können Sie nach bestimmten Ereignisnamen suchen. Derzeit wird nur im sichtbaren Zeitfenster auf dem Bildschirm gesucht, nicht im gesamten Verlauf.
- Ablauf-Ereignisse: Wenn Sie diese Option aktivieren, indem Sie in der oberen Leiste auf die Schaltfläche „Ablauf-Ereignisse“ klicken, werden Visualisierungen hinzugefügt, die Ereignisse in einem Thread oder einer Zeile mit Ereignissen in einer anderen Threadlinie verknüpfen. Beispielsweise kann ein Pfeil von der Operation auf dem Host, die Aufgaben für einen Beschleuniger in die Warteschlange stellt oder startet, zur Operation auf dem Beschleuniger, die diese Aufgaben ausführt, gezeichnet werden. XProf ermittelt diese Verknüpfungen anhand einer Kombination aus Nutzeranmerkungen, integrierten Heuristiken und der Nachverarbeitung von Informationen, die von verschiedenen Komponenten empfangen werden (z.B. CUPTI-Treiber, Kernel-Start-IDs, TPU-Laufzeitinformationen usw.).
- Wenn Sie auf eine XLA-Operation klicken, werden im Detailbereich zusätzliche Informationen angezeigt. Beispielsweise wird ein Link zum Operator im Graph Viewer-Tool erstellt. Außerdem können Verweise auf den Quellcode und/oder den Python-Stack-Trace, die Framework-Operation, die zur Generierung dieser XLA-Operation geführt hat, usw. enthalten sein (falls im Profil vorhanden). Außerdem werden möglicherweise FLOPS (Anzahl der von der Operation ausgeführten Gleitkommaoperationen) und Bytes angezeigt, auf die die Operation zugreift. Diese Informationen werden während der Kompilierung statisch aus XLA abgerufen, nicht aus Laufzeitinformationen aus dem Profil.