Profile erfassen

Um Xprof verwenden zu können, müssen Sie zuerst die Profilerfassung in Ihrem Modell-Workload-Code aktivieren. Es gibt zwei Möglichkeiten, Profile zu erfassen, die unten beschrieben werden.

Programmatische Erfassung

Bei der programmatischen Erfassung versehen Sie Ihren Modellcode mit Anmerkungen und geben damit an, an welcher Stelle im Code Profile erfasst werden sollen. In der Regel erfassen Nutzer Profile für einige Schritte während ihrer Trainingsschleife oder für einen bestimmten Block in ihrem Modell. Die Frameworks JAX, Pytorch XLA und Tensorflow bieten mehrere Möglichkeiten zur Erfassung von Traces – API-basiertes Starten/Beenden von Traces oder kontextmanagerbasiert.

On-Demand-Erfassung (auch manuelle Erfassung)

Die On-Demand-Profilerfassung wird verwendet, wenn Sie Profile ad hoc während des Laufs erfassen möchten, z. B. für Zeiträume, in denen Sie die programmatische Profilerfassung nicht aktiviert haben. Dies wird in der Regel verwendet, wenn Sie während der Ausführung ein Problem mit Ihren Modellmesswerten feststellen und sofort Profile für einen bestimmten Zeitraum erfassen möchten, um das Problem zu diagnostizieren.

Um die On-Demand-Profilerfassung zu aktivieren, müssen Sie den xprof-Server weiterhin in Ihrem Code starten. Wenn Sie in JAX beispielsweise jax.profiler.start_server aktivieren, wird ein xprof-Server für Ihre ML-Arbeitslast gestartet, der auf den Trigger für die On-Demand-Erfassung wartet, um mit der Erfassung von Profilen zu beginnen.

Mehrere Sitzungen pro Lauf

Wenn Sie Profile erfassen, können Sie Profile für einen einzelnen Lauf als mehrere Sitzungen erfassen. Angenommen, Sie erfassen in einem Trainingslauf Profile aus den Schritten 1 bis 3 und später Profile aus den Schritten 8 bis 10. Diese Profile gehören also zum selben Lauf, aber die erste Erfassung aus den Schritten 1 bis 3 ist „session1“ und die zweite Erfassung aus den Schritten 8 bis 10 ist „session2“. Die verschiedenen Sitzungen werden unter jedem Lauf mit unterschiedlichen Datumsstempeln gekennzeichnet. Sie können Profile in verschiedenen Sitzungen entweder programmgesteuert, on demand oder kombiniert erfassen.

XProf und Tensorboard in Google Cloud

In Google Cloud empfehlen wir die Verwendung der cloud-diagnostics-xprof-Bibliothek, um das Hosten von Tensorboard und XProf zu vereinfachen. Einige der wichtigsten Vorteile der Verwendung dieser Bibliothek auf GCP:

  • Einfache Einrichtung und Paketerstellung von XProf- und TensorBoard-Abhängigkeiten
  • Speichern von Profilen in GCS. Das kann für die langfristige Aufbewahrung und die Analyse nach dem Lauf nützlich sein. Lokal erfasste Profile werden nach Beendigung des Laufs gelöscht.
  • Schnelles Laden großer und mehrerer Profile durch Bereitstellung von TensorBoard auf einer GCE-VM oder einem GKE-Pod. Der Maschinentyp kann je nach den Anforderungen des Nutzers hinsichtlich Ladegeschwindigkeit und Kosten geändert werden.
  • Erstellung eines Links zum einfachen Teilen von Profilen und zur Zusammenarbeit mit Teammitgliedern und Google-Entwicklern;
  • Einfachere On-Demand-Profilerstellung von Arbeitslasten auf GKE und GCE: Sie können einen beliebigen Host auswählen, auf dem Ihre Arbeitslast ausgeführt wird, um Profile zu erfassen.

Framework-spezifische Anleitungen

Hier erfahren Sie, wie Sie die programmatische Profilerstellung und die On-Demand-Profilerstellung in verschiedenen Frameworks aktivieren:

Fehlerbehebung

GPU-Profiling

Programme, die auf der GPU ausgeführt werden, sollten Traces für die GPU-Streams oben im Trace Viewer erzeugen. Wenn Sie nur die Host-Traces sehen, prüfen Sie die Programmprotokolle und/oder die Ausgabe auf die folgenden Fehlermeldungen.

Wenn Sie einen Fehler wie den folgenden erhalten: Could not load dynamic library 'libcupti.so.10.1'
Vollständiger Fehler:

W external/org_tensorflow/tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcupti.so.10.1'; dlerror: libcupti.so.10.1: cannot open shared object file: No such file or directory
2020-06-12 13:19:59.822799: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1422] function cupti_interface_->Subscribe( &subscriber_, (CUpti_CallbackFunc)ApiCallback, this)failed with error CUPTI could not be loaded or symbol could not be found.

Fügen Sie den Pfad zu libcupti.so der Umgebungsvariable LD_LIBRARY_PATH hinzu. (Versuchen Sie, den Pfad mit locate libcupti.so zu finden.) Beispiel:

export LD_LIBRARY_PATH=/usr/local/cuda-10.1/extras/CUPTI/lib64/:$LD_LIBRARY_PATH

Wenn Sie die Meldung Could not load dynamic library weiterhin erhalten, prüfen Sie, ob der GPU-Trace trotzdem im Trace Viewer angezeigt wird. Diese Meldung wird manchmal auch dann angezeigt, wenn alles funktioniert, da die libcupti-Bibliothek an mehreren Stellen gesucht wird.

Wenn Sie einen Fehler wie den folgenden erhalten: failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
Vollständiger Fehler:

E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1445] function cupti_interface_->EnableCallback( 0 , subscriber_, CUPTI_CB_DOMAIN_DRIVER_API, cbid)failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
2020-06-12 14:31:54.097791: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1487] function cupti_interface_->ActivityDisable(activity)failed with error CUPTI_ERROR_NOT_INITIALIZED

Führen Sie die folgenden Befehle aus (dazu ist ein Neustart erforderlich):

echo 'options nvidia "NVreg_RestrictProfilingToAdminUsers=0"' | sudo tee -a /etc/modprobe.d/nvidia-kernel-common.conf
sudo update-initramfs -u
sudo reboot now

Weitere Informationen finden Sie in der Dokumentation von NVIDIA zu diesem Fehler.

Profilerstellung auf einem Remotecomputer

Wenn das zu profilierende Programm auf einem Remotecomputer ausgeführt wird, können Sie alle oben genannten Anleitungen auf dem Remotecomputer ausführen (insbesondere den XProf-Server auf dem Remotecomputer starten) und dann die lokale SSH-Portweiterleitung verwenden, um von Ihrem lokalen Computer aus auf die XProf-Web-UI zuzugreifen. Verwenden Sie den folgenden SSH-Befehl, um den Standardport 8791 von XProf vom lokalen zum Remote-Computer weiterzuleiten:

ssh -L 8791:localhost:8791 <remote server address>

oder wenn Sie Google Cloud verwenden:

$ gcloud compute ssh <machine-name> -- -L 8791:localhost:8791

Mehrere TensorBoard-Installationen

Wenn das Starten von TensorBoard mit einem Fehler wie ValueError: Duplicate plugins for name projector fehlschlägt

Das liegt oft daran, dass zwei Versionen von TensorBoard und/oder TensorFlow installiert sind, z.B. enthalten die Pip-Pakete tensorflow, tf-nightly, tensorboard und tb-nightly alle TensorBoard. Wenn Sie ein einzelnes pip-Paket deinstallieren, kann dies dazu führen, dass die ausführbare Datei tensorboard entfernt wird. Diese ist dann schwer zu ersetzen. Möglicherweise müssen Sie also alles deinstallieren und eine einzelne Version neu installieren:

pip uninstall tensorflow tf-nightly tensorboard tb-nightly xprof xprof-nightly tensorboard-plugin-profile tbp-nightly
pip install tensorboard xprof

Probleme mit Berechtigungen beheben

Wenn Sie das Profiling mit dem CUDA® Toolkit in einer Docker-Umgebung oder unter Linux ausführen, können Probleme im Zusammenhang mit unzureichenden CUPTI-Berechtigungen (CUPTI_ERROR_INSUFFICIENT_PRIVILEGES) auftreten. In der NVIDIA-Entwicklerdokumentation finden Sie weitere Informationen dazu, wie Sie diese Probleme unter Linux beheben können.

Um CUPTI-Berechtigungsprobleme in einer Docker-Umgebung zu beheben, führen Sie Folgendes aus:

docker run option '--privileged=true'