Multislice-Umgebungen profilieren
Cloud TPU-Multislice-Umgebungen bestehen aus mehreren TPU-Slices, die über das Data Center Network (DCN) kommunizieren. Mit dem Tool „Megascale stats“ in XProf können Sie Informationen dazu aufrufen, wie effektiv in Ihrer Multislice-Umgebung das DCN-Netzwerk genutzt wird. Mit dem Tool „Megascale Stats“ können Sie:
- Netzwerkleistung zwischen Slices auf Grundlage der erhobenen Daten ansehen und nachvollziehen
- Leistungsengpässe identifizieren
- Leistung Ihres Modells optimieren
Alle Messwerte im Megascale-Statistiktool werden auf TPU-Basis generiert. Um dieses Tool zu aktivieren, folgen Sie den gleichen Schritten wie beim Erstellen eines Profils in Ihrem Framework und verwenden Sie die XProfiler-Bibliothek, um eine TensorBoard XProf-Instanz zum Ansehen Ihrer Profile einzurichten. Solange Ihre Arbeitslast als Multislice-Arbeitslast ausgeführt wurde, wird in TensorBoard das Tool „Megascale stats“ für jede Multislice-Arbeitslast angezeigt.
Weitere Informationen zum Megascale Stats Tool in XProf finden Sie im Leitfaden zum Megascale Stats Tool.
Terminologie
Das DCN-Tool für kollektive Statistiken zeigt Messwerte an, die die Kommunikation zwischen TPU-Slices in einer Multislice-Umgebung beschreiben. Wenn die TPU-Laufzeit die Kommunikation zwischen Segmenten initiiert, werden eine Reihe von Vorgängen verwendet:
send
: Unterbricht den Host, um den direkten Speicherzugriff (Direct Memory Access, DMA) zu starten, und stellt dem Host einen gefüllten Puffer zur Verfügung, um die Datenübertragung zu starten.send-done
: Signalisiert dem Host, dass die Datenübertragung abgeschlossen ist.recv
: Stellt einen leeren Puffer bereit, in den der Host die übertragenen Daten einfügen kann.recv-done
: Signalisiert dem Host, dass die Daten empfangen wurden.
Ein Kollektiv wird initiiert, wenn ein send
-Vorgang erfolgt, und abgeschlossen, wenn der entsprechende recv-done
-Vorgang erfolgt.
Slack Time
Ein Maß für die Zeit, in der das Kollektiv Daten senden und empfangen kann.
Die Vorgänge send
, send-done
, recv
oder recv-done
sind nicht enthalten.
Angenommen, Sie haben die folgende Zeitachse:
Die Pufferzeit wird in diesem Beispiel so berechnet:
Pufferzeit = t1 + t2 + t3
Wenn Sie die Pufferzeit erhöhen, sinkt die Wahrscheinlichkeit, dass die TPU für ein Collective angehalten wird. Sie können die Pufferzeit verlängern, indem Sie eine andere Sharding-Methode auswählen.
Dauer des Stillstands
Die durchschnittliche Zeit, die für die kollektiven Sende-, Sendeabschluss-, Empfangs- und Empfangsabschlussvorgänge aufgewendet wird. Die Zeit für die Datenübertragung ist nicht enthalten. Angenommen, Sie haben die folgende Zeitachse:
Die Dauer des Stalls wird in diesem Beispiel so berechnet:
Stall duration = tsend + tsend-done + trecv + trecv-done
Beobachtete Dauer
Die Zeit zwischen den Vorgängen send
und recv-done
, einschließlich der Zeit für das Senden und Empfangen von Daten. Angenommen, Sie haben die folgende Zeitachse:
Die beobachtete Dauer wird so berechnet:
Beobachteter Zeitraum = tsend + t1 + tsend-done + t2 + trecv + t3 + trecv-done
Häufigkeit
Die Anzahl der Kollektive, die während der Laufzeit eines Profils initiiert und abgeschlossen werden. Ein Kollektiv wird initiiert, wenn ein send
-Vorgang erfolgt, und abgeschlossen, wenn der entsprechende recv-end
-Vorgang erfolgt. Der send
-Vorgang und der entsprechende recv-done
-Vorgang müssen innerhalb der Profildauer erfolgen, damit sie in diesen Messwert einbezogen werden.
Aggregierte Gesamtzahl der Pufferungen
Die Gesamtzeit, die eine Gruppe eine TPU während der Profildauer blockiert. Die Gesamtzahl der Unterbrechungen bei der Aggregation wird so berechnet:
Aggregierter Gesamtabbruch = Dauer des Abbruchs × Anzahl der Vorkommen
Größe der übertragenen Daten
Die Datenmenge, die für das Kollektiv während des Profilzeitraums über das Netzwerk übertragen wurde.
Erforderliche Bandbreite
Die Bandbreite, die zum Übertragen von Daten innerhalb des angegebenen Spielraums erforderlich ist. Mit diesem Messwert können Sie die Anzahl der Kollektive sehen, die während des Profilzeitraums um die Netzwerkbandbreite konkurrieren. Die erforderliche Bandbreite wird so berechnet:
Erforderliche Bandbreite = Größe der übertragenen Daten / Pufferzeit
Tool-Status
In der folgenden Tabelle sehen Sie die Version von TensorFlow oder der TPU-Laufzeit, die für die einzelnen Messwerte im Tool „DCN Collective Stats“ erforderlich ist.
DCN-Sammelstatistiken | Unterstützte TensorFlow-Version der TPU-Laufzeitversion |
---|---|
Pufferzeit | TensorFlow 2.15.0, TensorBoard 2.15.1 und TensorBoard-Plugin-Profil 2.15.0 |
Dauer des Stillstands | TensorFlow 2.15.0, TensorBoard 2.15.1 und TensorBoard-Plugin-Profil 2.15.0 |
Beobachtete Dauer | TensorFlow 2.15.0, TensorBoard 2.15.1 und TensorBoard-Plugin-Profil 2.15.0 |
Häufigkeit | TensorFlow 2.15.0, TensorBoard 2.15.1 und TensorBoard-Plugin-Profil 2.15.0 |
Aggregierte Gesamtzahl der Pufferungen | tf-nightly, tb-nightly, tbp-nightly |
Größe der übertragenen Daten | tf-nightly, tb-nightly, tbp-nightly |
Erforderliche Bandbreite | tf-nightly, tb-nightly, tbp-nightly |
Tool zum Analysieren von kollektiven Statistiken für DCN
Führen Sie den TensorBoard-Server aus und rufen Sie den Tab Profil auf.
Sortieren Sie die Tabelle im Tool für kollektive DCN-Statistiken absteigend nach Aggregated Total Stall.
Ermitteln Sie den DCN-Sammelnamen mit dem höchsten Aggregated Total Stall (Aggregierter Gesamtabbruch). Wenn die aggregierte Dauer von Stalls in dieser Gruppe im Vergleich zu anderen deutlich hoch ist, kann dies auf einen Engpass in der DCN-Gruppe hinweisen.
Multiplizieren Sie die erforderliche Bandbreite des DCN-Kollektivs mit der Anzahl der Kerne. Jeder v4-TPU-Host hat 8 Kerne. Die erforderliche Bandbreite für ein Collective ist also das Achtfache des angezeigten Werts. Wenn die erforderliche Bandbreite größer als die maximale Netzwerkbandbreite der TPU ist, ist das Netzwerk möglicherweise überlastet. Um die erforderliche Bandbreite zu verringern, können Sie den verwendeten Sharding-Mechanismus ändern. Weitere Informationen zu Sharding-Mechanismen finden Sie unter Cloud TPU Multislice-Übersicht.
Generieren Sie einen HLO-Dump, um festzustellen, ob Compilerprobleme vorliegen. Es ist besser,
send
- undrecv-done
-Vorgänge für ein Kollektiv aufzuteilen, um die Planung von mehr sich überschneidenden HLO-Vorgängen zu ermöglichen. Durch das Überlappen von mehr HLO-Vorgängen wird die TPU-Wartezeit reduziert.Prüfen Sie im Trace Viewer die Dauer von
recv-done
-Vorgängen für das DCN-Kollektiv mit der maximalen aggregierten Gesamtdauer des Stillstands. Wenn die Übertragung lange dauert, kann es zu einem Bandbreitenengpass kommen, darecv-done
-Vorgänge in der Regel im Netzwerk blockiert werden, um die Daten abzurufen.Wenn die Dauer von
recv-done
-Vorgängen im Vergleich zur Pufferzeit nicht zu hoch ist, könnte dies auf ein Hardwareproblem hindeuten.