Profil für PyTorch-XLA-Arbeitslasten erstellen

Die Profilerstellung ist eine Möglichkeit, die Leistung von Modellen zu analysieren und zu verbessern. Obwohl geht es viel mehr darum. Manchmal hilft es, Profiling als Timing zu betrachten, Vorgänge und Codeteile, die auf beiden Geräten (TPUs) und Hosts ausgeführt werden (CPUs). Dieser Leitfaden bietet einen kurzen Überblick über die Erstellung von Codeprofilen. für Training oder Inferenz. Für Weitere Informationen zur Analyse generierter Profile finden Sie unter zu den folgenden Leitfäden.

Jetzt starten

TPU erstellen

  1. Umgebungsvariablen exportieren:

    $ export TPU_NAME=your_tpu_name
    $ export ZONE=us-central2-b
    $ export PROJECT_ID=project-id
    $ export ACCELERATOR_TYPE=v4-8
    $ export RUNTIME_VERSION=tpu-vm-v4-pt-2.0
    

    Variablenbeschreibungen exportieren

    TPU name
    Der Name, den Sie für Ihre Cloud TPU verwenden möchten.
    zone
    Die Zone, in der Sie die Cloud TPU erstellen möchten.
    project ID
    Die Projekt-ID, die Sie zum Trainieren und Profilieren Ihres Modells verwenden.
    accelerator-type
    Der Beschleunigertyp gibt die Version und Größe der Cloud TPU an, die Sie erstellen möchten. Weitere Informationen zu unterstützten Beschleunigertypen für jede TPU-Version finden Sie unter TPU-Versionen.
    version
    Die Version der Cloud TPU-Laufzeit. In der exportierten Datei wird ein Standardwert Sie können aber auch eine Variable aus der Liste unterstützten Konfigurationen.
  2. TPU-Ressourcen starten

    $ gcloud compute tpus tpu-vm create ${TPU_NAME} \
    --zone us-central2-b \
    --accelerator-type ${ACCELERATOR_TYPE} \
    --version ${RUNTIME_VERSION} \
    --project $PROJECT_ID \
    --subnetwork=tpusubnet
    
  3. Verschieben Sie Ihren Code mithilfe der Methode gcloud scp-Befehl. Beispiel:

    $ gcloud compute tpus tpu-vm scp my-code-file ${TPU_NAME}: --zone ${ZONE}
    

Profilerstellung

Ein Profil kann manuell über capture_profile.py oder im Trainingsskript mithilfe der Methode torch_xla.debug.profiler APIs

Starten des Profilservers

Um ein Profil zu erfassen, muss ein Profilserver im Trainingsskript. Starten Sie einen Server mit einer Portnummer Ihrer Wahl, z. B. mit einer Portnummer Ihrer Wahl. 9012, wie im folgenden Befehl gezeigt.

import torch_xla.debug.profiler as xp
server = xp.start_server(9012)

Der Server kann direkt am Anfang der main-Funktion gestartet werden.

Sie können jetzt Profile wie im folgenden Abschnitt beschrieben erfassen. Das Skript wird ein Profil für alle Vorgänge auf einem TPU-Gerät erstellt.

Traces hinzufügen

Wenn Sie auch um Profile für Vorgänge auf dem Hostcomputer zu erstellen, können Sie xp.StepTrace oder xp.Trace in Ihren Code ein. Diese Funktionen verfolgen den Python-Code auf der Hostcomputer. (Hiermit wird gemessen, wie viel Zeit zur Ausführung des Python-Moduls benötigt wird. auf dem Host (CPU) vor der Übergabe des Graphen auf das TPU-Gerät übertragen. Daher ist es vor allem nützlich, um den Tracing-Overhead zu analysieren. Sie können fügen Sie dies in die Trainingsschleife ein, in der der Code Batches von Daten verarbeitet. zum Beispiel

for step, batch in enumerate(train_dataloader):
    with xp.StepTrace('Training_step', step_num=step): 
       ...

oder einzelne Teile des Codes mit

 with xp.Trace('loss'): 
    loss = ...

Wenn du „Beleuchtung“ verwendest, kannst du das Hinzufügen von Traces überspringen, da dies automatisch erfolgt. Teil des Codes sein. Wenn Sie jedoch weitere Traces hinzufügen möchten, in die Trainingsschleife einzufügen.

Nach der ersten Kompilierung können Sie die Geräteaktivitäten erfassen. warten bis das Modell mit den Trainings- oder Inferenzschritten beginnt.

Manuelle Erfassung

Das Skript capture_profile.py aus dem Pytorch XLA-Repository ermöglicht die schnelle Aufnahme eines Profils. Kopieren Sie dazu die Profildatei aufnehmen direkt zu Ihrer TPU-VM. Mit dem folgenden Befehl wird er in das Basisverzeichnis kopiert.

$ gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
--zone us-central2-b \
--worker=all \
--command="wget https://raw.githubusercontent.com/pytorch/xla/master/scripts/capture_profile.py"

Führen Sie während des Trainings den folgenden Befehl aus, um ein Profil zu erfassen:

$ gcloud compute tpus tpu-vm ssh ${TPU_NAME} \
--zone us-central2-b \
--worker=all \
--command="python3 capture_profile.py --service_addr "localhost:9012" --logdir ~/profiles/ --duration_ms 2000"

Mit diesem Befehl werden .xplane.pb-Dateien im logdir gespeichert. Sie können Logging-Verzeichnis ~/profiles/ zu deinem bevorzugten Standort und Namen. Es ist auch möglich, direkt im Cloud Storage-Bucket speichern. Legen Sie dazu logdir wird zu gs://your_bucket_name/.

Programmatische Erfassung

Anstatt das Profil manuell durch Auslösen eines Skripts zu erfassen, können Sie Trainingsskript so konfigurieren, dass automatisch ein Profil ausgelöst wird mithilfe der Methode torch_xla.debug.profiler.trace_detached API im Trainingsskript.

Wenn Sie z. B. ein Profil in einer bestimmten Epoche und bei einem bestimmten Schritt automatisch erfassen möchten, können Sie Ihr Trainingsskript so konfigurieren, dass PROFILE_STEP, PROFILE_EPOCH- und PROFILE_LOGDIR-Umgebung Variablen:

import os
import torch_xla.debug.profiler as xp

# Within the training script, read the step and epoch to profile from the
# environment.
profile_step = int(os.environ.get('PROFILE_STEP', -1))
profile_epoch = int(os.environ.get('PROFILE_EPOCH', -1))
...

for epoch in range(num_epoch):
   ...
   for step, data in enumerate(epoch_dataloader):
      if epoch == profile_epoch and step == profile_step:
         profile_logdir = os.environ['PROFILE_LOGDIR']
         # Use trace_detached to capture the profile from a background thread
         xp.trace_detached('localhost:9012', profile_logdir)
      ...

Dadurch werden die .xplane.pb-Dateien in dem Verzeichnis gespeichert, das von der PROFILE_LOGDIR.

Analyse in TensorBoard

Mit TensorBoard können Sie Profile weiter analysieren mit dem TPU TensorBoard-Plug-in
entweder auf demselben oder einem anderen Computer (empfohlen).

Wenn Sie TensorBoard auf einem Remote-Computer ausführen möchten, stellen Sie über SSH eine Verbindung zu ihm her und aktivieren Sie Portweiterleitung Beispiel:

$ ssh -L 6006:localhost:6006 remote server address

oder

$ gcloud compute tpus tpu-vm ssh $TPU_NAME --zone=$ZONE --ssh-flag="-4 -L 6006:localhost:6006"

Installieren Sie auf Ihrem Remote-Computer die erforderlichen Pakete und starten Sie TensorBoard. (vorausgesetzt, Sie haben auf diesem Computer Profile unter ~/profiles/). Wenn Sie Profilen in einem anderen Verzeichnis oder Cloud Storage-Bucket müssen Pfade korrekt angegeben werden, z. B. gs://your_bucket_name/profiles.

(vm)$ pip install tensorflow-cpu tensorboard-plugin-profile 
(vm)$ tensorboard --logdir ~/profiles/ --port 6006
(vm)$ pip uninstall tensorflow tf-nightly tensorboard tb-nightly tbp-nightly

TensorBoard ausführen

Rufen Sie in Ihrem lokalen Browser Folgendes auf: http://localhost:6006/ und wählen Sie PROFILE aus dem Drop-down-Menü aus, um Ihre Profile zu laden.

Weitere Informationen finden Sie unter TPU-Tools. TensorBoard-Tools und deren Auswertung

Image

Image