Cloud TPU-Tools verwenden

Nachdem Sie ein Trainingsskript auf Cloud TPU zum Laufen gebracht haben, können Sie die Leistung Ihres Modells in Cloud TPU mit TensorBoard analysieren.

TensorBoard stellt eine Gruppe an Tools für die visuelle Darstellung von TensorFlow-Messwerten bereit. Mit dem TensorBoard-Plug-in Cloud TPU Profile können Sie in TensorBoard auf Cloud TPU-Profiling-Daten zugreifen. Das Cloud TPU Profiler-Plug-in unterstützt Leistungsvisualisierungen für Cloud TPU-Knoten aller Größen.

Wenn Sie das Cloud TPU Profiler-Plug-in installieren, wird auch das Skript capture_tpu_profile installiert. Mit dem Skript capture_tpu_profile können Sie Profile erfassen oder Cloud TPU-Jobs kontinuierlich überwachen (siehe Job überwachen).

Wenn Sie mit dem Skript capture_tpu_profile ein Profil erfassen, werden zwei Dateien (".trace" und ".traceable") in dem von Ihnen angegebenen Google Cloud Storage-Bucket gespeichert. Die Datei .trace enthält bis zu eine Million Trace-Ereignisse, die im Trace Viewer angezeigt werden können. Die Datei .tracetable enthält bis zu 2 GB Trace-Ereignisse, die im Streaming Trace Viewer angezeigt werden können.

Vorbereitung

Bevor Sie die in dieser Anleitung beschriebenen Cloud TPU-Tools zur Profilerstellung verwenden können, müssen Sie die folgenden Schritte ausführen:

Cloud TPU-Ressourcen erstellen

Sie benötigen eine VM und eine TPU, um diese Anleitung zu nutzen. Folgen Sie den Instruktionen in der Cloud TPU EfficientNet-Anleitung bis zum Abschnitt Trainieren und bewerten eines EfficientNet-Modells mit fake_imagenet. Führen Sie das Trainingsskript noch nicht aus. Die EfficientNet-Anleitung erläutert, wie Sie eine VM und TPU erstellen, Bibliotheken installieren und das Trainingsskript ausführen.

Cloud TPU Profiler TensorBoard-Plug-in installieren

Öffnen Sie eine neue Eingabeaufforderung und stellen Sie mit diesem Befehl eine Verbindung zu der VM her, die Sie im vorherigen Abschnitt erstellt haben:

    (vm)$ gcloud compute ssh efficientnet-tutorial --zone=us-central1-b

Verwenden Sie folgende Befehle, um das TensorBoard-Plug-in für Cloud TPU Profiler zu installieren oder zu aktualisieren:

  (vm)$ pip3 install --upgrade "cloud-tpu-profiler>=2.3.0"
  (vm)$ sudo pip3 install --upgrade -U "tensorboard>=2.3"
  (vm)$ sudo pip3 install --upgrade -U "tensorflow>=2.3"

Erstellen Sie die folgenden Umgebungsvariablen:

  (vm)$ export STORAGE_BUCKET=gs://bucket-name
  (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/efficientnet-2x
  (vm)$ export PATH="$PATH:`python -m site --user-base`/bin"
  (vm)$ export TPU_NAME=efficientnet-tutorial"

Profil erfassen

Führen Sie mit Ihrer ersten Eingabeaufforderung das Trainingsskript aus. Warten Sie, bis die Ausgabe anzeigt, dass das Modell trainiert. Wie dies aussieht, hängt von Ihrem Code oder Modell ab. Suchen Sie nach einer Ausgabe wie Epoch 1/100. Alternativ können Sie die Cloud TPU-Seite aufrufen, Ihre TPU wählen und die CPU-Auslastungsgrafik ansehen. Obwohl dabei keine TPU-Auslastung angezeigt wird, ist das ein Hinweis darauf, dass die TPU Ihr Modell trainiert. Führen Sie zum Erfassen eines Profils folgenden Befehl mit der zweiten Eingabeaufforderung aus:

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

Während das Modell ausgeführt wird, erstellt das Skript capture_tpu_profile ein Verzeichnis (Objekt) und schreibt Profildaten in den mit dem Parameter --logdir angegebenen Compute Engine-Bucket. Standardmäßig wird mit capture_tpu_profile ein 2-Sekunden-Trace erfasst. Sie können die Trace-Dauer mit der Befehlszeilenoption --duration_ms bestimmen.

Öffnen Sie eine neue Eingabeaufforderung und stellen Sie mit folgendem Befehl eine Verbindung zu Ihrer VM her:

  (vm)$ gcloud compute ssh efficientnet-tutorial \
  --zone=us-central1-b \
  --ssh-flag=-L6006:localhost:6006

Erstellen Sie die folgenden Umgebungsvariablen.

  (vm)$ export STORAGE_BUCKET=gs://bucket-name
  (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/efficientnet-2x

Führen Sie TensorBoard aus und verweisen Sie auf das die Profildaten enthaltende Verzeichnis:

  (vm)$ tensorboard --logdir=${MODEL_DIR}

TensorBoard startet einen Webserver und zeigt dessen URL an:

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)

Profildaten in TensorBoard aufrufen

Öffnen Sie einen Webbrowser und rufen Sie die in der TensorBoard-Ausgabe angezeigte URL auf. Achten Sie darauf, dass TensorBoard die Profildaten vollständig geladen hat. Klicken Sie dazu auf der TensorBoard-Seite rechts oben auf die Schaltfläche zur Aktualisierung. Standardmäßig ist auf der TensorBoard-Seite der Tab "Scalars" ausgewählt.

Bild

Grafiken

TensorBoard bietet eine Reihe von Visualisierungen oder Diagrammen Ihres Modells und seiner Leistung. Verwenden Sie die Diagramme zusammen mit dem Trace Viewer oder dem Streaming Trace Viewer, um Modelle zu optimieren und die Leistung in Cloud TPU zu verbessern.

TensorFlow-Diagramm

Während der Modellkompilierung generiert TensorFlow vor dem Ausführen des Modells ein Diagramm, das auf der Cloud TPU ausgeführt wird. Die Daten für das Diagramm werden im Verzeichnis MODEL_DIR in dem von Ihnen angegebenen Storage-Bucket mit dem Parameter --logdir gespeichert. Sie können sich dieses Diagramm anzeigen lassen, ohne capture_tpu_profile auszuführen.

Wählen Sie den Tab Diagramme in TensorBoard aus, um die TensorFlow-Grafik eines Modells anzuzeigen. Die Standardauswahl für Color (Farbe) ist Structure (Struktur).

Bild

Ein einzelner Knoten im Strukturdiagramm repräsentiert einen TensorFlow-Vorgang.

TPU-Kompatibilitätsdiagramm

Der Tab Graphs (Diagramme) enthält ein Modul zur Kompatibilitätsprüfung, das nach TensorFlow-Vorgängen sucht, die Probleme verursachen können, wenn ein Modell ausgeführt wird, und diese anzeigt.

Wählen Sie den Tab Graphs (Diagramme) in TensorBoard und dann die Option TPU Compatibility (TPU-Kompatibilität), um ein Modell des TPU-Kompatibilitätsdiagramms anzuzeigen. Das Diagramm zeigt die kompatiblen (gültigen) Vorgänge in grün und die inkompatiblen (ungültigen) Vorgänge in rot an.

Bild

Ein bestimmter Knoten kann beide Farben anzeigen, jeweils als Prozentsatz der Cloud TPU-Kompatibilitätsvorgänge für diesen Knoten. Ein Beispiel finden Sie unter Kompatibilitätsergebnisse interpretieren.

Das Feld für die Kompatibilitätszusammenfassung rechts neben dem Diagramm zeigt den Prozentsatz aller Cloud TPU-kompatiblen Vorgängen, ihre Attribute und eine Liste nicht kompatibler Vorgänge für einen ausgewählten Knoten.

Wenn Sie auf einen Vorgang im Diagramm klicken, werden die zugehörigen Attribute im Zusammenfassungsfenster angezeigt.

Bild

Beachten Sie, dass die Kompatibilitätsprüfung keine Vorgänge bewertet, die mithilfe der manuellen Gerätezuordnung explizit einem Nicht-TPU-Gerät zugewiesen wurden. Darüber hinaus kompiliert die Überprüfung das Modell nicht für die Ausführung, daher sind die Ergebnisse nur eine Schätzung der Kompatibilität.

Kompatibilitätsergebnisse interpretieren

Das folgende Diagramm aus dem Abalone-Modell zeigt ein Beispiel für eine Kompatibilitätszusammenfassung mit mehreren nicht verfügbaren Vorgängen:

Bild

Für dieses Modell wurde keine manuelle Geräteplatzierung angegeben. Daher wurden alle Vorgänge überprüft, auch die, die immer auf der CPU ausgeführt werden sollten, wie die angezeigten Vorgänge "save" und "report_uninitialized_variables".

Zwei AssignAdd-Vorgänge unter root_mean_squared_error sind potenzielle Probleme.

Sie können aus dem Quellcode erkennen, dass root_mean_squared_error nur als zusätzlicher Bewertungsmesswert verwendet wird:

    # Calculate root mean squared error as additional eval metric
    eval_metric_ops = {
        "rmse": tf.metrics.root_mean_squared_error(
            tf.cast(labels, tf.float64), predictions)
    }

Sofern dies nicht innerhalb einer Trainingsschleife geschieht, wird dieser Vorgang normalerweise auf der CPU ausgeführt, sodass der Fehlerbericht ignoriert werden kann. Zusammenfassend lässt sich sagen, dass das Modell auf einer Cloud TPU ausgeführt werden kann.

Profil

Der Tab Profil wird angezeigt, nachdem Sie Modelldaten erfasst haben. Möglicherweise müssen Sie oben rechts auf der TensorBoard-Seite auf die Schaltfläche zum Aktualisieren klicken. Sobald die Daten verfügbar sind, wird durch einen Klicken auf den Tab Profil eine Auswahl von Tools zur Unterstützung der Leistungsanalyse angezeigt:

Profilübersicht

Die unter Profile (Profil) verfügbare Übersichtsseite (overview_page) bietet eine Zusammenfassung über die Leistung Ihres Modells während einer Erfassungsausführung. Die Seite bietet eine aggregierte Übersicht aller TPUs sowie eine allgemeine Analyse der Eingabepipeline. In der Drop-down-Liste "Host" können Sie einzelne TPUs auswählen.

Auf der Seite werden Daten in den folgenden Bereichen angezeigt:

Bild

  • Performance Summary (Leistungsübersicht)

    • Durchschnittliche Schrittzeit – Die Schrittzeit im Durchschnitt über alle Stichproben hinweg
    • Inaktivitätszeit des Hosts – Prozentsatz der Zeit, die der Host inaktiv war
    • TPU-Leerlaufzeit – Prozentsatz der Inaktivität der TPU
    • FLOPS-Auslastung – Die prozentuale Auslastung der TPU-Matrixeinheiten
    • Auslastung der Speicherbandbreite – Der Prozentsatz der verwendeten Speicherbandbreite
  • Step-time graph (Schrittzeitdiagramm). Zeigt ein Diagramm der Geräteschrittzeit in Millisekunden über alle Stichproben hinweg an. Der blaue Bereich entspricht dem Teil der Schrittzeit, in der die TPUs inaktiv waren und auf Eingabedaten vom Host gewartet haben. Der rote Bereich zeigt an, wie lange die Cloud TPU tatsächlich aktiv war.

  • Top 10 TensorFlow operations on TPU (Top 10 der TensorFlow-Vorgänge auf der TPU). Zeigt die TensorFlow-Vorgänge an, die am meisten Zeit in Anspruch genommen haben:

    Jede Zeile zeigt die Eigenzeit eines Vorgangs (als Prozentsatz der Zeit, die alle Vorgänge beansprucht haben), die kumulative Dauer, die Kategorie, den Namen und die erreichte FLOPS-Rate an.

  • Run environment (Umgebung ausführen)

    • Anzahl der verwendeten Hosts
    • Typ der verwendeten TPU
    • Anzahl der TPU-Kerne
    • Trainingsbatchgröße
  • Recommendation for next steps (Empfehlung für die nächsten Schritte). Gibt an, wann ein Modell eingabegebunden ist und wann Probleme mit Cloud TPU auftreten. Schlägt Tools vor, mit denen Leistungsengpässe lokalisiert werden können.

Input Pipeline Analyzer

Der Input Pipeline Analyzer bietet Einblicke in Ihre Leistungsergebnisse. Das Tool zeigt Leistungsergebnisse aus der Datei input_pipeline.json an, die vom Tool capture_tpu_profile erfasst wurden.

Das Tool teilt Ihnen sofort mit, ob Ihr Programm eingabegebunden ist, und führt Sie durch geräteseitige und hostseitige Analysen, um Engpässe in allen Phasen der Pipeline zu beheben.

Weitere Informationen zur Optimierung der Pipeline-Leistung finden Sie in den Anleitungen zur Eingabepipeline-Leistung.

Eingabepipeline

Wenn ein TensorFlow-Programm Daten aus einer Datei liest, beginnt es in einer Pipeline am oberen Rand des TensorFlow-Diagramms. Der Lesevorgang ist in mehrere in Reihe geschaltete Datenverarbeitungsphasen unterteilt, wobei die Ausgabe einer Phase die Eingabe der nächsten Phase ergibt. Dieses Lesesystem wird als Eingabepipeline bezeichnet.

Eine typische Pipeline zum Lesen von Datensätzen aus Dateien gliedert sich in folgende Phasen:

  1. Datei lesen
  2. Datei vorverarbeiten (optional)
  3. Dateiübertragung vom Hostcomputer zum Gerät

Eine ineffiziente Eingabe-Pipeline kann Ihre Anwendung stark verlangsamen. Eine Anwendung, die einen erheblichen Teil der Zeit in der Eingabe-Pipeline verbringt, wird als eingabegebunden bezeichnet. Verwenden Sie den Input Pipeline Analyzer, um herauszufinden, wo die Eingabe-Pipeline ineffizient ist.

Eingabepipeline-Dashboard

Sie wählen Profile (Profil) aus und wählen dann im Drop-down-Menü Tools input_pipeline_analyzer aus, um den Input Pipeline Analyzer zu öffnen.

Das Dashboard enthält drei Abschnitte:

Bild

  1. Summary (Zusammenfassung). Fasst die gesamte Eingabepipeline mit Informationen darüber zusammen, ob und in welcher Höhe Ihre Anwendung eingabegebunden ist.
  2. Device-side analysis (Geräteseitige Analyse). Zeigt detaillierte Ergebnisse der geräteseitigen Analyse an, einschließlich der Geräteschrittzeit und des Zeitraums, in dem das Gerät bei jedem Schritt kernübergreifend auf Eingabedaten wartet.
  3. Host-side analysis (Hostseitige Analyse). Zeigt eine detaillierte Analyse auf der Hostseite an, einschließlich einer Aufschlüsselung der Eingabeverarbeitungszeit auf dem Host.
Zusammenfassung der Eingabepipeline

Im ersten Abschnitt wird angegeben, ob Ihr Programm eingabegebunden ist. Dazu wird der Prozentsatz der Gerätezeit angezeigt, die mit Warten auf Eingaben vom Host verbracht wurde. Wenn Sie eine instrumentierte standardmäßige Eingabepipeline verwenden, gibt das Tool an, wo der größte Teil der Verarbeitungszeit für die Eingabe aufgewendet wird. Beispiel:

Bild

Geräteseitige Analyse

Der zweite Abschnitt zeigt die Details der geräteseitigen Analyse. Sie können daran erkennen, wie viel Zeit auf dem Gerät im Vergleich zum Host aufgewendet wurde und wie viel Gerätezeit mit Warten auf Eingabedaten vom Host verbracht wurde.

Bild

  1. Statistiken zu Geräteschritten. Gibt den Mittelwert, die Standardabweichung und den Bereich (Minimum, Maximum) der Geräteschrittzeit an.
  2. Schrittzeit. Zeigt ein Diagramm der Geräteschrittzeit in Millisekunden über alle Stichproben hinweg an. Der blaue Bereich entspricht dem Teil der Schrittzeit, in der Cloud TPUs im Leerlauf auf Eingabedaten vom Host gewartet haben. Der rote Bereich zeigt an, wie lange die Cloud TPU tatsächlich aktiv war.
  3. Prozentsatz der Zeit, die auf Eingabedaten gewartet wurde. Gibt den Mittelwert, die Standardabweichung und den Bereich (Minimum, Maximum) des Anteils der Zeit an, der auf dem Gerät mit Warten auf Eingabedaten verbracht wurde, normalisiert anhand der gesamten Geräteschrittzeit.
  4. Bereich der Gerätezeit über alle Kerne, die für das Warten auf Eingabedaten nach Schrittzahl aufgewendet wurde. Zeigt ein Liniendiagramm mit der Gerätezeit (ausgedrückt als Prozentsatz der gesamten Geräteschrittzeit) an, die auf die Eingabedatenverarbeitung gewartet wurde. Da der Zeitanteil von Kern zu Kern variiert, wird auch der Fraktionsbereich für jeden Kern für jeden Schritt dargestellt. Da die Zeit, die ein Schritt benötigt, vom langsamsten Kern abhängt, sollte der Bereich so klein wie möglich sein.
Hostseitige Analyse

Abschnitt 3 zeigt Details der hostseitigen Analyse, wobei die Eingabeverarbeitungszeit auf dem Host, also die für die Dataset API-Vorgänge benötigte Zeit, in mehrere Kategorien aufgeschlüsselt wird:

  • An Gerät zu übertragende Daten in Warteschlange stellen. Zeit, die aufgewendet wird, um die Daten in eine Einspeisewarteschlange zu stellen, bevor sie an das Gerät übertragen werden.
  • Datenvorverarbeitung. Zeitaufwand für Vorverarbeitungsvorgänge, z. B. für die Bild-Dekomprimierung.
  • Daten vorab aus Dateien lesen. Zeit, die für das Lesen von Dateien aufgewendet wird, einschließlich Caching, Prefetching und Verschränkung.
  • Daten bei Bedarf aus Dateien lesen. Zeit, die für das Lesen von Daten aus Dateien aufgewendet wird, ohne Caching, Prefetching und Verschränkung.
  • Sonstige Daten lesen oder verarbeiten. Zeit für andere eingabebezogene Vorgänge, die tf.data nicht verwenden.

Bild

Wenn Sie die Statistik von einzelnen Eingabevorgängen und ihrer Kategorien nach Ausführungszeit aufgeschlüsselt sehen möchten, erweitern Sie den Bereich "Statistik für Eingabevorgang anzeigen".

Es wird eine Quelldatentabelle wie die folgende angezeigt:

Bild

Jeder Tabelleneintrag enthält folgende Informationen:

  1. Input Op (Eingabevorgang). Zeigt den TensorFlow-Vorgangsnamen des Eingabevorgangs an.
  2. Anzahl. Zeigt die Gesamtzahl der Vorgangsinstanzen an, die während des Profilerstellungszeitraums ausgeführt wurden.
  3. Gesamtzeit (in ms). Zeigt die gesamte Zeit an, die für jede dieser Vorgangsinstanzen aufgewendet wurde.
  4. Gesamtzeit %: Gibt die für einen Vorgang aufgewendete Zeit als Anteil der Gesamtzeit an, die für die Eingabeverarbeitung aufgewendet wurde.
  5. Gesamtzeit (in ms). Gibt die gesamte Eigenzeit an, die für jede dieser Instanzen aufgewendet wurde. Die Eigenzeit misst hier die Zeit, die im Funktionsblock aufgewendet wurde, abzüglich der Zeit, die für eine aufgerufene Funktion benötigt wurde. Beispiel: Die Funktion Iterator::PaddedBatch::Filter::ForeverRepeat::Map wird von Iterator::PaddedBatch::Filter aufgerufen, daher wird ihre gesamte Eigenzeit von der gesamten Eigenzeit der letzteren Funktion abgezogen.
  6. Gesamte Eigenzeit %: Gibt die gesamte Eigenzeit als Anteil der Gesamtzeit an, die für die Eingabeverarbeitung aufgewendet wurde.
  7. Kategorie: Zeigt die Verarbeitungskategorie des Eingabevorgangs an.

Op Profile

Das Vorgangsprofil ist ein Cloud TPU-Tool zur Anzeige der Leistungsstatistiken von XLA-Vorgängen, die während der Dauer der Profilerstellung ausgeführt wurden. Im Vorgangsprofil wird Folgendes angezeigt:

  • Wie gut Ihre Anwendung die Cloud TPU verwendet als Prozentsatz der Zeit, die für Vorgänge nach Kategorie und TPU-FLOPS-Auslastung aufgewendet wird
  • Vorgänge, die am zeitaufwendigsten waren. Diese Vorgänge sind potenzielle Ziele für die Optimierung.
  • Details zu einzelnen Vorgängen, einschließlich Form, Auffüllung und Ausdrücken, die den Vorgang verwenden.

Sie können Op Profile verwenden, um gute Ziele für die Optimierung zu finden. Wenn Ihr Modell beispielsweise nur 5 % des FLOPS-Höchstwertes der TPU erreicht, können Sie mit dem Tool ermitteln, welche XLA-Vorgänge die längste Ausführungszeit benötigen und wie viele TPU-FLOPS sie verbrauchen.

Op Profile verwenden

Bei der Profilerstellung erstellt capture_tpu_profile auch eine Datei namens op_profile.json, die Leistungsstatistiken von XLA-Vorgängen enthält.

Sie können die Daten von op_profile in TensorBoard anzeigen. Dazu klicken Sie oben auf dem Bildschirm auf den Tab Profile (Profil) und wählen dann aus dem Drop-down-Menü op_profile Tools aus. Sie sehen eine Anzeige wie diese:

Bild

  1. Übersichtsabschnitt. Zeigt die Cloud TPU-Auslastung an und stellt Optimierungsvorschläge bereit.
  2. Systemsteuerung. Enthält Steuerelemente, mit denen Sie Anzahl und Art der in der Tabelle angezeigten Vorgänge festlegen können und wie sie sortiert werden.
  3. OP table (Vorgangstabelle). Eine Tabelle mit den wichtigsten TensorFlow-Vorgangskategorien, jeweils den XLA-Vorgängen zugeordnet. Diese Vorgänge werden nach Prozentsatz der Cloud TPU-Nutzung sortiert.
  4. Op details cards (Karte mit Vorgangsdetails). Zeigen Details zum Vorgang an, wenn Sie den Mauszeiger über einen Vorgang in der Tabelle bewegen. Diese enthalten die FLOPS-Auslastung, den Ausdruck, in dem der Vorgang verwendet wird, und das Vorgangslayout (Passform).
XLA-Vorgangstabelle

In der Vorgangstabelle werden XLA-Vorgangskategorien in der Reihenfolge vom höchsten zum niedrigsten Prozentsatz der Cloud TPU-Nutzung aufgelistet. Als Erstes werden in der Tabelle der Prozentsatz der benötigten Zeit, der Name der Vorgangskategorie, der zugehörige TensorFlow-Vorgangsname und der Prozentsatz der FLOPS-Auslastung für die Kategorie angezeigt. Wenn Sie in der Tabelle auf das Dreieck neben dem Kategorienamen klicken, können Sie die 10 zeitaufwendigsten XLA-Vorgänge für eine Kategorie aufrufen oder ausblenden.

Bild

  1. Zeit: Gibt die Gesamtzeit in Prozent an, die von allen Vorgängen in dieser Kategorie beansprucht wurde. Sie können auf einen Eintrag klicken, um ihn zu maximieren und die Aufschlüsselung der beanspruchten Zeit nach den einzelnen Vorgängen anzuzeigen.
  2. Top 10 der Vorgänge: Der Schieberegler neben dem Namen einer Kategorie blendet die zehn wichtigsten zeitaufwendigen Vorgänge in der Kategorie ein bzw. aus. Wenn ein Fusionvorgangseintrag in der Vorgangsliste angezeigt wird, können Sie ihn erweitern, um die darin enthaltenen nicht fusionierten, elementweisen Vorgänge anzuzeigen.
  3. TensorFlow Op (TensorFlow-Vorgang): Enthält den Namen des TensorFlow-Vorgangs, der zum XLA-Vorgang gehört.
  4. FLOPS. Zeigt die FLOPS-Auslastung an. Dabei handelt es sich um die gemessene Anzahl von FLOPS, ausgedrückt als Prozentsatz der höchsten Cloud TPU-FLOPS. Je höher der Prozentsatz der FLOPS-Auslastung ist, desto schneller werden die Vorgänge ausgeführt. Die Tabellenzelle ist farbcodiert: grün steht für hohe FLOPS-Auslastung (gut) und rot für niedrige FLOPS-Auslastung (schlecht).
Karten mit Vorgangsdetails

Wenn Sie einen Tabelleneintrag auswählen, wird eine Karte mit Details zum XLA-Vorgang oder zur Vorgangskategorie angezeigt. Eine typische Karte sieht so aus:

Bild

  • Name und Kategorie. Zeigt den hervorgehobenen XLA-Vorgangsnamen und die hervorgehobene Kategorie.
  • FLOPS utilization (FLOPS-Auslastung). Zeigt die FLOPS-Auslastung als Prozentsatz der insgesamt möglichen FLOPS an.
  • Expression (Ausdruck): Zeigt den XLA-Ausdruck an, der den Vorgang enthält.
  • Memory Utilization (Speicherauslastung): Zeigt den Prozentsatz der maximalen Speicherauslastung durch Ihr Programm an.
  • Layout (nur Faltungsvorgänge): Gibt Form und Layout eines Tensors an, einschließlich der Frage, ob die Form des Tensors genau zu den Matrixeinheiten passt und welche Abstände die Matrix verwendet.
Ergebnisse interpretieren

Für Faltungsvorgänge kann die TPU-FLOPS-Auslastung aus einem oder beiden der folgenden Gründe niedrig sein:

  • Auffüllung (Matrixeinheiten werden teilweise verwendet)
  • Faltungsvorgang ist speichergebunden

In diesem Abschnitt gibt es eine Interpretation einiger Zahlen aus einem anderen Modell, in dem die FLOPS niedrig waren. In diesem Beispiel dominierten die Ausgabefusion und die Faltung die Ausführungszeit und es gab einen langen Abschnitt von Vektor- oder Skalarvorgängen mit sehr niedrigen FLOPS-Werten.

Eine Optimierungsstrategie für diesen Profiltyp besteht darin, die Vektor- oder Skalarvorgänge in Faltungsvorgänge umzuwandeln.

Im folgenden Beispiel zeigt %convolution.399 eine niedrigere FLOPS- und Speicherauslastung als %convolution.340 im vorherigen Beispiel.

Bild

Bei genauerer Betrachtung des Layouts sehen Sie, dass die Batchgröße von 16 auf 128 und die Funktionsgröße von 3 auf 8 aufgefüllt wird. Dies bedeutet, dass nur 5 % der Matrixeinheiten effektiv genutzt werden. Die Berechnung für diese Instanz der prozentualen Auslastung lautet: ((batch_time * num_of_features)/padding_size)/num_of_cores. Die FLOPS in diesem Beispiel können Sie mit der %convolution.340 im vorherigen Beispiel vergleichen, die genau in die Matrix passt.

Pod Viewer

Das Tool Pod Viewer stellt Leistungsvisualisierungen für jeden Kern in einem Pod bereit und zeigt den Status der Kommunikationskanäle in den Kernen eines Pods an. Pod Viewer kann potenzielle Engpässe und Bereiche, die optimiert werden müssen, identifizieren und hervorheben. Das Tool funktioniert für vollständige Pods und alle v2- und v3-Pod-Slices.

So zeigen Sie das Tool Pod Viewer an:

  1. Wählen Sie oben rechts im Tensorboard-Fenster in der Schaltfläche des Menüs Profile (Profil) aus.
  2. Klicken Sie auf der linken Seite des Fensters auf das Menü Tools und wählen Sie pod_viewer aus.

Die Benutzeroberfläche des Pod Viewers enthält:

  1. Einen Schrittregler, mit dem Sie auswählen können, welcher Schritt untersucht werden soll.
  2. Ein Topologiediagramm, das Ihre TPU-Kerne im gesamten TPU-System interaktiv visualisiert.
  3. Ein Kommunikationsverbindungsdiagramm, das die Sende- und Empfangskanäle (Recv-Kanäle) im Topologiediagramm darstellt.
  4. Eine Latenz des Balkendiagramms für Sende- und Recv-Kanäle. Wenn Sie den Mauszeiger über einen Balken in diesem Diagramm bewegen, werden die Kommunikationsverbindungen im Kommunikationsverbindungsdiagramm aktiviert. In der Leiste auf der linken Seite wird eine Karte mit detaillierten Informationen zum Kanal angezeigt, z. B. zur Größe der übertragenen Daten, zur Latenz und zur Bandbreite.
  5. Ein Schrittaufschlüsselungsdiagramm, das eine Aufschlüsselung eines Schritts für alle Kerne darstellt. Dies kann verwendet werden, um Systemengpässe zu verfolgen und festzustellen, ob ein bestimmter Kern das System verlangsamt.

Bild

Schrittregler

Mit dem Schrittregler wählen Sie einen Schritt aus. Der Rest des Tools zeigt Statistiken wie Schrittaufschlüsselung und Kommunikationslinks für diesen Schritt an.

Topologiediagramm

Das Topologiediagramm wird nach Host, Chip und Kern hierarchisch angeordnet. Die kleinsten Rechtecke sind TPU-Kerne. Zwei Kerne zusammen kennzeichnen einen TPU-Chip und vier Chips zusammen kennzeichnen einen Host.

Bild

Das Topologiediagramm ist auch eine Heatmap, die farblich durch den Prozentsatz der Zeit gekennzeichnet ist, die eine bestimmte Aufteilung, z. B. Berechnen hoher Flops, Einspeisung, Senden usw., im ausgewählten Schritt in Anspruch nimmt. Der Balken direkt unter dem Topologiediagramm (in der folgenden Grafik dargestellt) zeigt eine Farbcodierung für die Verwendung von Kern und Chip. Die Farbe der Kerne zeigt die Auslastung von gelb bis blau. Bei Berechnungen hoher Flops bedeuten größere Zahlen und eine dunklere Farbe mehr Rechenzeit. Bei allen anderen Aufschlüsselungen weisen kleinere Zahlen und hellere Farben auf kürzere Wartezeiten hin. Wenn ein Kern dunkler als die anderen ist, könnte das ein möglicher Problembereich oder Hotspot sein.

Klicken Sie auf die Drop-down-Menüauswahl neben dem Systemnamen, der im Diagramm eingekreist ist, um die Aufschlüsselung auszuwählen, die Sie untersuchen möchten.

Bewegen Sie den Mauszeiger über eines der kleinen Rechtecke (einzelne Kerne), um einen Techtip mit der Position des Kerns im System, seiner globalen Chip-ID und dem Hostnamen anzuzeigen. Der Techtip enthält auch die Dauer der ausgewählten Aufschlüsselungskategorie, z. B. hohe Flops, und den Auslastungsgrad außerhalb eines Schritts.

Bild

Kommunikationskanäle

Mit diesem Tool können Sie Sende- und Empfangsverknüpfungen visualisieren, wenn Ihr Modell diese für die Kommunikation zwischen Kernen verwendet. Wenn Ihr Modell Sende- und Empfangsvorgänge enthält, können Sie mithilfe eines Kanal-ID-Selektors eine Kanal-ID auswählen. Eine Verbindung vom Quellkern (src) zum Zielkern (dst) repräsentiert den Kommunikationskanal. Er wird im Topologiediagramm dargestellt, wenn Sie den Mauszeiger über die Balken im Diagramm bewegen, die die Latenz von Sende- und Empfangskanälen zeigen.

Bild

In der linken Leiste wird eine Karte mit weiteren Details zum Kommunikationskanal angezeigt. Eine typische Karte sieht so aus:

Bild

  1. Data Transferred (Übertragene Daten): Zeigt die vom Sende- und Empfangskanal übertragenen Daten in Mebibyte (MiB) an.
  2. Latency (Latenz): Zeigt die Dauer in Mikrosekunden vom Beginn des Sendeereignisses bis zum Ende des Empfangsereignisses an.
  3. BW (Bandbreite): Zeigt die übertragene Datenmenge vom Quellkern zum Zielkern während der Ausführungsdauer in Gibibyte (GiB) an.
  4. Send Delay (Sendeverzögerung): Zeigt die Zeit zwischen dem Empfangsabschluss und dem Sendebeginn in Mikrosekunden an. Wenn der Empfangsabschlussvorgang nach dem Beginn des Sendevorgangs startet, ist die Verzögerung gleich null.
  5. Hlo Names (Hlo-Namen): Zeigt die mit diesem Kanal verknüpften XLA-Hlo-Vorgangsnamen an. Diese Hlo-Namen werden mit den Statistiken verknüpft, die in anderen TensorBoard-Tools wie op_profile und memory_viewer angezeigt werden.

Schrittaufschlüsselungsdiagramm

Diese Tabelle enthält Details zu den Trainings- oder Bewertungsschritten.

Die x-Achse ist die globale Chip-ID und die y-Achse ist die Zeit in Mikrosekunden. In diesem Diagramm können Sie sehen, wo die Zeit in einem bestimmten Trainingsschritt aufgewendet wird, wo sich Engpässe befinden und ob ein Ungleichgewicht der Last über alle Chips hinweg besteht.

Bild

In der linken Leiste wird eine Karte angezeigt, die weitere Details zur Schrittaufschlüsselung enthält. Eine typische Karte sieht so aus:

Bild

Die Felder in der Karte geben Folgendes an:

  1. High flops compute (Berechnungen hoher Flops): Die Zeit, die für Faltungs- oder Ausgabefusionsvorgänge aufgewendet wird.
  2. Low flops compute (Berechnung niedriger Flops): Für diese Berechnung werden alle anderen Aufschlüsselungen von der Gesamtdauer abgezogen.
  3. Infeed (Einspeisung): Die Zeit, die die TPU auf dem Host wartet.
  4. Outfeed (Ausspeisung): Die Zeit, die der Host auf die Ausgabe von der TPU wartet.
  5. AllReduce sync (AllReduce-Synchronisierung): Der Zeitabschnitt, der für CrossReplicaSum-Vorgänge aufgewendet wird, die auf die Synchronisierung mit anderen Kernen warten. CrossReplicaSum-Vorgänge berechnet die Summe über alle Replikate hinweg.
  6. AllReduce compute (Berechnung von AllReduce): Die tatsächliche Rechenzeit, die für CrossReplicaSum-Vorgänge aufgewendet wird.
  7. Chip to chip send ops (Chip-zu-Chip-Sendevorgänge): Die Zeit, die für Sendevorgänge aufgewendet wird.
  8. Chip to chip recv-done ops (Chip-zu-Chip-Empfangsabschlussvorgänge): Die Zeit, die für Empfangsvorgänge aufgewendet wird.

Trace Viewer

Trace Viewer ist ein Cloud TPU-Tool zur Leistungsanalyse, das unter Profile (Profil) verfügbar ist. Das Tool verwendet den Chrome Trace Event Profiling Viewer, weshalb es nur im Chrome-Browser funktioniert.

Trace Viewer enthält eine Zeitachse mit folgenden Informationen:

  • Dauer für die Vorgänge, die von Ihrem TensorFlow-Modell ausgeführt wurden.
  • Teil des Systems (TPU oder Hostcomputer), in dem ein Vorgang ausgeführt wurde. Normalerweise führt der Hostcomputer Einspeisevorgänge zur Vorverarbeitung der Trainingsdaten und deren Übertragung an die TPU aus, während die TPU das eigentliche Modelltraining übernimmt.

Trace Viewer ermöglicht es Ihnen, Leistungsprobleme in Ihrem Modell zu identifizieren und Maßnahmen zu deren Lösung zu ergreifen. Beispielsweise können Sie der Übersicht entnehmen, ob die Einspeisung oder das Modelltraining die meiste Zeit beansprucht. Eine Aufschlüsselung lässt dann erkennen, welche TensorFlow-Vorgänge die längste Ausführungszeit haben.

Trace Viewer ist auf eine Million Ereignisse pro Cloud TPU beschränkt. Wenn Sie weitere Ereignisse bewerten möchten, verwenden Sie stattdessen den Streaming Trace Viewer.

Trace Viewer-Oberfläche

Gehen Sie zum Öffnen von Trace Viewer zu TensorBoard, klicken Sie oben auf dem Bildschirm auf den Tab Profil und wählen Sie trace_viewer aus der Drop-down-Liste Tools aus. Der Viewer zeigt Ihren letzten Durchlauf an:

Bild

Dieser Bildschirm enthält hauptsächlich folgende Elemente (oben mit Nummern gekennzeichnet):

  1. Drop-down "Runs" (Durchläufe): Enthält alle Durchläufe, für die Trace-Informationen erfasst wurden. Die Standardansicht ist Ihr letzter Durchlauf. Sie können die Drop-down-Liste jedoch öffnen, um einen anderen Durchlauf auszuwählen.
  2. Drop-down "Tools": Wählt verschiedene Tools zur Profilerstellung aus.
  3. Drop-down "Host": Wählt einen Host aus, der einen Cloud TPU-Satz enthält.
  4. Bereich "Timeline" (Zeitachse): Zeigt Vorgänge an, die Cloud TPU und der Hostcomputer im Laufe der Zeit ausgeführt haben.
  5. Bereich "Details": Zeigt zusätzliche Informationen zu Vorgängen an, die im Zeitachsenbereich ausgewählt wurden.

Eine genauere Ansicht des Zeitachsenbereichs:

Bild

Der Zeitachsenbereich setzt sich aus folgenden Elementen zusammen:

  1. Leiste am oberen Rand: Enthält verschiedene zusätzliche Steuerelemente.
  2. Zeitachse: Zeigt die Zeit in Relation zum Trace-Anfang an.
  3. Abschnitts- und Tracklabels: Jeder Abschnitt enthält mehrere Tracks und ein Dreieck auf der linken Seite, auf das Sie klicken können, um den Abschnitt zu maximieren bzw. zu minimieren. Jedes Verarbeitungselement im System ist durch einen Abschnitt vertreten.
  4. Toolauswahl: Enthält verschiedene Tools für die Interaktion mit dem Trace Viewer.
  5. Ereignisse: Zeigen die Ausführungszeiten von Vorgängen oder die Dauer von Metaereignissen wie Trainingsschritten an.
  6. Vertical tab bar (Vertikale Tableiste): Diese hat für die Cloud TPU keinen Verwendungszweck. Die Leiste ist Teil des von Chrome bereitgestellten universellen Trace Viewer-Tools, das für eine Vielzahl von Aufgaben zur Leistungsanalyse verwendet wird.
Abschnitte und Tracks

Trace Viewer enthält folgende Abschnitte:

  • Ein Abschnitt für jeden TPU-Knoten, der mit der Nummer des TPU-Chips und des TPU-Knotens innerhalb des Chips beschriftet ist (zum Beispiel "Chip 2: TPU Core 1"). Jeder TPU-Knotenabschnitt enthält folgende Tracks:
    • Schritt. Zeigt die Dauer der Trainingsschritte an, die auf der TPU ausgeführt wurden.
    • TensorFlow Ops (TensorFlow-Vorgänge): Zeigt die auf der TPU ausgeführten TensorFlow-Vorgänge an.
    • XLA Ops (XLA-Vorgänge): Zeigt XLA-Vorgänge an, die auf der TPU ausgeführt wurden. Jeder TensorFlow-Vorgang wird in einen oder mehrere XLA-Vorgänge übersetzt. Der XLA-Compiler übersetzt die XLA-Vorgänge in Code, der auf der TPU ausgeführt wird.
  • Ein Abschnitt für Threads, die auf der CPU des Hostcomputers ausgeführt werden, mit der Bezeichnung "Host Threads": Dieser Abschnitt enthält einen Track für jeden CPU-Thread. Hinweis: Sie können die neben den Abschnittslabels angezeigten Informationen ignorieren.
Toolauswahl für die Zeitachse

Sie können über die Toolauswahl für die Zeitachse in TensorBoard mit der Zeitachsenansicht interagieren. Sie können auf ein Zeitachsentool klicken oder die folgenden Tastaturkürzel verwenden, um ein Tool zu aktivieren und hervorzuheben. Sie können die Toolauswahl für die Zeitachse verschieben, wenn Sie oben in den gepunkteten Bereich klicken und die Auswahl an die gewünschte Stelle ziehen.

So verwenden Sie die Zeitachsentools:

Auswahltool
Klicken Sie auf ein Ereignis, um es auszuwählen, oder klicken und ziehen Sie, um mehrere Ereignisse auszuwählen. Im Detailbereich werden daraufhin zusätzliche Informationen (Name, Startzeit und Dauer) zu den ausgewählten Ereignissen angezeigt.

Verschieben-Tool
Klicken und ziehen Sie, um die Zeitachsenansicht horizontal und vertikal zu verschieben.

Zoom-Tool
Klicken und ziehen Sie nach oben, um die horizontale Zeitachse heranzuzoomen, oder klicken und ziehen Sie nach unten, um herauszuzoomen. Die horizontale Position des Mauszeigers bestimmt den Mittelpunkt, um den herum gezoomt wird.

Hinweis: Im Zoom-Tool tritt ein bekannter Fehler auf: Wenn sich der Mauszeiger beim Loslassen der Maustaste außerhalb der Zeitachsenansicht befindet, bleibt der Zoom aktiv. Falls Ihnen das passiert, klicken Sie einfach kurz auf die Zeitachsenansicht, um das Zoomen zu stoppen.

Zeitintervall-Tool
Klicken und ziehen Sie horizontal, um ein Zeitintervall zu markieren. Die Länge des Intervalls wird auf der Zeitachse angezeigt. Wenn Sie das Intervall anpassen möchten, ziehen Sie seine Enden. Zum Löschen des Intervalls klicken Sie auf eine beliebige Stelle in der Zeitachsenansicht.

Das Intervall bleibt markiert, wenn Sie eines der anderen Tools auswählen.
Events

Ereignisse innerhalb der Zeitachse werden in verschiedenen Farben angezeigt. die Farben selbst haben keine bestimmte Bedeutung.

Zeitachsenleiste am oberen Rand

Die Leiste am oberen Rand des Zeitachsenbereichs enthält verschiedene zusätzliche Steuerelemente:

Bild

  1. Metadata display (Metadatenanzeige): Wird für TPUs nicht verwendet.
  2. View Options (Ansichtsoptionen): Wird für TPUs nicht verwendet.
  3. Suchfeld: Hier geben Sie Text ein, um nach allen Ereignissen zu suchen, die diesen Text im Namen enthalten. Wenn Sie auf die Pfeilschaltflächen rechts neben dem Suchfeld klicken, können Sie sich durch die übereinstimmenden Ereignisse vor- und zurückbewegen und die einzelnen Ereignisse der Reihe nach auswählen.
  4. Schaltfläche "Konsole": Wird für TPUs nicht verwendet.
  5. Schaltfläche "Hilfe": Wenn Sie auf diese Schaltfläche klicken, erhalten Sie Hilfe in zusammengefasster Form.
Tastenkombinationen

Hier finden Sie die Tastenkombinationen, die Sie im Trace Viewer verwenden können. Klicken Sie auf die Hilfe-Schaltfläche (?) in der Leiste am oberen Rand, um sich weitere Tastenkürzel anzeigen zu lassen.

    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

Das Tastenkürzel f kann sehr nützlich sein. Wenn Sie einen Schritt auswählen und f drücken, können Sie den Schritt schnell heranzoomen.

Charakteristische Ereignisse

Hier sind einige der Ereignistypen aufgeführt, die bei der Analyse der TPU-Leistung sehr hilfreich sein können.

Bild

  • InfeedDequeueTuple. Dieser TensorFlow-Vorgang wird auf einer TPU ausgeführt und empfängt Eingabedaten vom Host. Wenn die Einspeisung lange dauert, können die TensorFlow-Vorgänge zur Vorverarbeitung von Daten auf dem Hostcomputer möglicherweise nicht mit der TPU-Datenverbrauchsrate Schritt halten. In den Host-Traces sind entsprechende Ereignisse namens InfeedEnqueueTuple zu sehen. Mit dem Tool Input Pipeline Analyzer können Sie eine detailliertere Analyse der Eingabepipeline aufrufen.

  • CrossReplicaSum. Dieser TensorFlow-Vorgang wird auf einer TPU ausgeführt und berechnet eine Summe über Replikate hinweg. Da jedes Replikat einem anderen TPU-Knoten entspricht, muss der Vorgang warten, bis alle TPU-Knoten mit einem Schritt fertig sind. Wenn dieser Vorgang lange dauert, bedeutet dies möglicherweise nicht, dass der Summierungsvorgang selbst langsam ist, sondern dass ein TPU-Knoten auf einen anderen TPU-Knoten mit langsamer Dateneinspeisung wartet.

Bild

  • Datensatzvorgänge. Der Trace Viewer visualisiert Dataset-Vorgänge, die beim Laden von Daten mithilfe der Dataset API ausgeführt werden. Der Iterator::Filter::Batch::ForeverRepeat::Memory im Beispiel wird kompiliert und entspricht dem Vorgang dataset.map() . Mit dem Trace Viewer untersuchen Sie die Ladevorgänge, während Sie die Fehlerbehebung machen und Engpässe in der Eingabepipeline minimieren.

Bild

  • Prefetch Threads. Wenn Sie dataset.prefetch() zum Zwischenspeichern von Eingabedaten verwenden, können Sie gelegentliche Verlangsamungen beim Dateizugriff verhindern, die zu Engpässen in der Eingabepipeline führen.
Problempunkte

Im Folgenden sind einige potenzielle Probleme aufgeführt, die bei der Verwendung von Trace Viewer zu beachten sind:

  • Begrenzung der Ereignisanzeige. Der Trace Viewer zeigt maximal eine Million Ereignisse an. Wenn Sie mehr Ereignisse erfasst haben, werden nur die ersten 1 Million Ereignisse angezeigt. Spätere Ereignisse werden verworfen. Sie können weitere TPU-Ereignisse mit dem Flag --include_dataset_ops=False erfassen, damit capture_tpu_profile die Dataset-Vorgänge explizit ausschließt.
  • Sehr lange Ereignisse. Ereignisse, die vor dem Beginn einer Erfassung beginnen oder nach dem Abschluss einer Erfassung enden, werden im Trace Viewer nicht angezeigt. Folglich können sehr lange Ereignisse übersehen werden.
  • Start der Trace-Erfassung. Starten Sie die Trace-Erfassung erst, wenn Sie wissen, dass die Cloud TPU ausgeführt wird. Wenn Sie davor beginnen, werden im Trace Viewer möglicherweise nur wenige oder gar keine Ereignisse angezeigt. Sie können die Profilzeit mit dem Flag --duration_ms erhöhen und mit dem Flag --num_tracing_attempts automatische Wiederholungsversuche einstellen. Beispiel:

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

Memory Viewer

Mit dem Memory Viewer können Sie die maximale Speicherauslastung für Ihr Programm und die Speicherauslastungstrends über die Laufzeit des Programms hinweg visualisieren.

Die Memory Viewer-UI sieht so aus:

Bild

  1. Drop-down "Host": Wählt aus, ob ein TPU-Host und XLA-HLO-Module (High Level Optimizer) angezeigt werden sollen.
  2. Speicherübersicht: Zeigt die maximale Speicherzuweisung und -größe ohne Auffüllung an.
  3. Arbeitsspeicherdiagramm: Zeigt die maximale Speichernutzung und ein Diagramm der Speichernutzungstrends über die Programmlebensdauer hinweg an. Wenn Sie den Mauszeiger über einen Zwischenspeicher in einem der Zwischenspeicherdiagramme bewegen, werden eine Anmerkung für die Zwischenspeicherlebensdauer und die Karte mit Zwischenspeicherdetails hinzugefügt.
  4. Zwischenspeicherdiagramme: Zwei Diagramme, die die Zwischenspeicherzuordnung während der maximalen Speicherauslastung anzeigen, wie durch die vertikale Linie im Arbeitsspeicherdiagramm angegeben. Wenn Sie den Mauszeiger über einen Zwischenspeicher in einem der Zwischenspeicherdiagramme bewegen, werden die Lebensdaueranzeige des Zwischenspeichers im Arbeitsspeicherdiagramm und eine Detailkarte auf der linken Seite angezeigt.
  5. Detailkarte zur Zwischenspeicherzuordnung: Zeigt Zuordnungsdetails für einen Zwischenspeicher an.
Speicherübersichtsbereich

Im Speicherübersichtsbereich werden der Modulname und die maximale Speicherzuordnung angezeigt, wenn die Gesamtgröße der Zwischenspeicherzuweisung das Maximum erreicht. Die nicht aufgefüllte Spitzenzuweisungsgröße wird ebenfalls zum Vergleich angezeigt.

Bild

Arbeitsspeicherdiagramm

In diesem Diagramm werden die maximale Speicherauslastung und ein Diagramm der Trends zur Speichernutzung über die Programmlebensdauer hinweg angezeigt. Die von oben nach unten gezogene Linie zeigt die maximale Speicherauslastung des Programms an. Dieser Punkt bestimmt, ob ein Programm in den verfügbaren globalen Speicherbereich passt.

Bild

Jeder Punkt im darüberliegenden Liniendiagramm repräsentiert einen vom Compiler geplanten "Programmpunkt" im HLO-Programm von XLA. Die Linie vermittelt einen Eindruck davon, wie steil die Kurve zu und von der Spitzenauslastung verläuft.

Interaktion mit Zwischenspeicherdiagrammelementen

Wenn Sie den Mauszeiger über einen Zwischenspeicher bewegen, der in einem der Zwischenspeicherdiagramme unterhalb des Arbeitsspeicherdiagramms angezeigt wird, wird im Arbeitsspeicherdiagramm eine horizontale Lebensdauerlinie für diesen Zwischenspeicher angezeigt. Die horizontale Linie hat dieselbe Farbe wie der markierte Zwischenspeicher.

Bild

Die Dicke der horizontalen Linie gibt die relative Größe des Zwischenspeichers zur maximalen Speicherzuordnung an. Die Zeilenlänge entspricht der Lebensdauer des Zwischenspeichers. Sie beginnt an der Stelle im Programm, an der der Zwischenspeicherplatz zugewiesen wurde, und endet an der Stelle, an der der Speicherplatz freigegeben wurde.

Zwischenspeicherdiagramme

Zwei Diagramme zeigen die Aufteilung der Speichernutzung am Spitzenlastpunkt, angezeigt durch die vertikale Linie im Graphen über den Diagrammen.

Bild

  • By Program Order (Nach Programmreihenfolge). Zeigt die Zwischenspeicher von links nach rechts in der Reihenfolge an, in der sie während der Programmausführung aktiv waren. Am längsten aktive Zwischenspeicher befinden sich auf der linken Seite des Diagramms.

  • By Size (Nach Größe). Zeigt die Zwischenspeicher absteigend nach Größe sortiert an, die während der Programmausführung aktiv waren. Zwischenspeicher, die während der maximalen Speichernutzung die größte Auswirkung hatten, befinden sich auf der linken Seite.

Detailkarte zur Zwischenspeicherzuordnung

Wenn Sie den Mauszeiger auf einen in einem der Diagramme angezeigten Zwischenspeicher bewegen, wird zusätzlich zu der im Arbeitsspeicherdiagramm angezeigten Linie eine Detailansicht der Zwischenspeicherzuweisung angezeigt. Eine typische Karte sieht so aus:

Bild

  1. Name: Name des XLA-Vorgangs.
  2. Kategorie: Vorgangskategorie.
  3. Size (Größe): Größe der Zwischenspeicherzuordnung (einschließlich Auffüllung).
  4. Unpadded size (Größe ohne Auffüllung): Größe der Zwischenspeicherzuordnung ohne Auffüllung.
  5. Expansion (Erweiterung): Zwischenspeichergröße mit Auffüllung im Verhältnis zur Größe ohne Auffüllung.
  6. Extra memory (Zusätzlicher Arbeitsspeicher): Gibt an, wie viel zusätzlicher Arbeitsspeicher für die Auffüllung verwendet wird
  7. Shape (Form): Beschreibt Rang, Größe und Datentyp des n-dimensionalen Arrays.
  8. TensorFlow op name (Namen des TensorFlow-Vorgangs): Zeigt den Namen des TensorFlow-Vorgangs an, der mit der Zwischenspeicherzuordnung verknüpft ist.
  9. Allocation type (Zuordnungstyp). Gibt die Zwischenspeicherzuordnungskategorie an. Es gibt folgende Typen: Parameter, Ausgabe, Thread-lokal und Temporär (z. B. Zwischenspeicherzuordnung, die mit Fusion verknüpft ist).
"Out of memory"-Fehler

Wenn Sie ein Modell ausführen und der Fehler "out of memory" (Nicht genug Arbeitsspeicher) angezeigt wird, verwenden Sie den folgenden Befehl, um ein Speicherprofil zu erfassen und im Memory Viewer anzuzeigen. Achten Sie darauf, dass Sie die entsprechende duration_ms so festlegen, dass sich der Profilingszeitraum mit Ihrer Programmkompilierungszeit überschneidet. Die Ausgabe kann Ihnen dabei helfen, die Fehlerursache zu verstehen:

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

Streaming Trace Viewer

Der Streaming Trace Viewer (trace_viewer) ist ein Cloud TPU-Tool zur Leistungsanalyse, das für TensorFlow ab Version 2.1 verfügbar ist und dynamische Trace Renderings bietet. Das Tool verwendet den Chrome Trace Event Profiling Viewer, weshalb es nur im Chrome-Browser funktioniert.

Wenn Sie mit capture_tpu_profile 2.3.0 ein Profil erfassen, wird eine Datei vom Typ .tracetable in Ihrem Google Cloud Storage-Bucket gespeichert. Die Datei enthält eine große Anzahl von Trace-Ereignissen, die sowohl im Trace Viewer als auch im Streaming Trace Viewer angezeigt werden können.

Streaming Trace Viewer verwenden

Sie müssen Ihre bestehende TensorBoard-Sitzung beenden und TensorBoard anschließend mit der IP-Adresse der zu untersuchenden TPU neu starten, um den Streaming Trace Viewer (trace_viewer) verwenden zu können. Streaming Trace Viewer erfordert, dass TensorBoard einen Google Remote-Prozeduraufruf (GRPC) an eine IP-Adresse für die Cloud TPU ausführt. Der GRPC-Kanal ist nicht verschlüsselt.

Sie finden die IP-Adressen von Cloud TPU-Hosts auf der Cloud TPU-Seite. Finden Sie Ihre Cloud TPU und suchen Sie in der Spalte Interne IP-Adresse nach der IP-Adresse.

Führen Sie TensorBoard in Ihrer VM wie im Folgenden beschrieben aus und ersetzen Sie dabei tpu-ip durch die IP-Adresse Ihrer TPU:

  (vm)$ tensorboard --logdir=${MODEL_DIR} \
    --master_tpu_unsecure_channel=tpu-ip

Das TensorBoard-Tool wird in der Drop-down-Liste Tools angezeigt.

Bild

In der Zeitachse können Sie heranzoomen, um Trace-Ereignisse dynamisch in Ihren Browser laden zu lassen.

Bild

Cloud TPU-Job überwachen

In diesem Abschnitt wird beschrieben, wie Sie mit capture_tpu_profile ein einzelnes Profil erfassen oder Ihren Cloud TPU-Job kontinuierlich in Echtzeit über die Befehlszeilenschnittstelle überwachen. Wenn Sie die Option --monitoring_level auf 0 (Standardeinstellung), 1 oder 2 einstellen, erhalten Sie ein einzelnes Profil, eine einfache Überwachung bzw. eine detaillierte Überwachung.

Öffnen Sie eine neue Cloud Shell und SSH für Ihre VM. Ersetzen Sie im Befehl vm-name durch Ihren VM-Namen:

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

Führen Sie in der neuen Cloud Shell capture_tpu_profile mit dem Flag --monitoring_level auf 1 oder 2 aus, z. B.:

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

Mit der Einstellung monitoring_level=1 ergibt sich eine Ausgabe, die etwa so aussieht:

    TPU type: TPU v2
    Utilization of TPU Matrix Units is (higher is better): 10.7%

Mit monitoring_level=2 werden ausführlichere Informationen angezeigt:

    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)

Flags überwachen

  • --tpu (erforderlich): Gibt den Namen der Cloud TPU an, die Sie überwachen möchten.
  • --monitoring_level: Ändert das Verhalten von capture_tpu_profile von der Erstellung eines einzelnen Profils zur einfachen oder detaillierten kontinuierlichen Überwachung. Es gibt drei verfügbare Ebenen. Ebene 0 (Standardeinstellung): Erzeugt ein einzelnes Profil und wird dann beendet. Ebene 1: zeigt die TPU-Version und die TPU-Auslastung an. Ebene 2: zeigt die TPU-Auslastung, die TPU-Leerlaufzeit und die Anzahl der verwendeten TPU-Kerne an. Gibt außerdem die minimalen, durchschnittlichen und maximalen Schrittzeiten zusammen mit dem prozentualen Beitrag zur Einspeisung an.
  • --duration_ms (optional, Standardwert ist 1000 ms): Gibt an, wie lange die Profilerstellung des TPU-Hosts in jedem Zyklus dauern soll. Im Allgemeinen sollte diese lang genug sein, um mindestens einen Trainingsschritt mit Daten zu erfassen. In einer Sekunde wird in den meisten Modellen ein Trainingsschritt erfasst. Wenn Ihre Modellschrittzeit jedoch sehr groß ist, können Sie den Wert auf 2 x step_time (in ms) einstellen.
  • --num_queries: Gibt an, wie viele Zyklen lang capture_tpu_profile ausgeführt wird. Sie stellen den Wert auf einen hohen Wert ein, um Ihren TPU-Job kontinuierlich zu überwachen. Sie setzen den Wert auf einen niedrigen Wert, um die Schrittzeit Ihres Modells schnell zu prüfen.