Freigeben über


Distributed AI Model Training in HPC Pack

Hintergrund

In der heutigen Zeit entwickeln sich KI-Modelle weiter, um wesentlicher zu werden, was eine zunehmende Nachfrage nach erweiterter Hardware und einem Cluster von Computern für eine effiziente Modellschulung erfordert. HPC Pack kann die Modellschulung für Sie effektiv vereinfachen.

PyTorch Distributed Data Parallel (aka DDP)

Um verteilte Modellschulungen zu implementieren, ist es notwendig, ein verteiltes Schulungsframework zu verwenden. Die Wahl des Frameworks hängt von dem Modell ab, das zum Erstellen des Modells verwendet wird. In diesem Artikel leite ich Sie dazu, wie Sie mit PyTorch in HPC Pack fortfahren können.

PyTorch bietet verschiedene Methoden für verteilte Schulungen an. Unter diesen wird Distributed Data Parallel (DDP) aufgrund seiner Einfachheit und minimalen Codeänderungen, die von Ihrem aktuellen Einzelmaschinenschulungsmodell benötigt werden, weit bevorzugt.

Einrichten eines HPC Pack-Clusters für KI-Modellschulungen

Sie können einen HPC Pack-Cluster mit Ihren lokalen Computern oder virtuellen Computern (VMs) in Azure einrichten. Stellen Sie einfach sicher, dass diese Computer mit GPUs ausgestattet sind (in diesem Artikel verwenden wir Nvidia GPUs).

In der Regel kann eine GPU einen Prozess für eine verteilte Schulungsarbeit haben. Wenn Sie also über zwei Computer (auch als Knoten in einem Computercluster bezeichnet) verfügen, können Sie jeweils mit vier GPUs ausgestattet 2 * 4 erreichen, was 8 parallele Prozesse für eine einzelne Modellschulung entspricht. Diese Konfiguration kann die Schulungszeit möglicherweise auf etwa 1/8. im Vergleich zu einzelprozessschulungen reduzieren und dabei einige Mehraufwand für die Synchronisierung von Daten zwischen den Prozessen weglassen.

Erstellen eines HPC Pack-Clusters in der ARM-Vorlage

Der Einfachheit halber können Sie einen neuen HPC Pack-Cluster in Azure starten, in ARM-Vorlagen auf GitHub.

Wählen Sie die Vorlage "Single Head Node Cluster for Linux workloads" aus, und klicken Sie auf "Bereitstellen in Azure".

eine ARM-Vorlage auswählen

Und lesen Sie die Voraussetzungen, um ein Zertifikat für die Verwendung von HPC Pack zu erstellen und hochzuladen.

Bitte beachten Sie:

  1. Sie sollten ein Computeknotenimage auswählen, das mit "HPC" gekennzeichnet ist. Dies gibt an, dass GPU-Treiber im Image vorinstalliert sind. Andernfalls wäre eine manuelle GPU-Treiberinstallation auf einem Computeknoten zu einem späteren Zeitpunkt erforderlich, was sich aufgrund der Komplexität der GPU-Treiberinstallation als schwierig erweisen könnte. Weitere Informationen zu HPC-Bildern finden Sie hier.

    auswählen eines HPC-Knotenimages

  2. Sie sollten eine VM-Größe des Computeknotens mit GPU auswählen. Das ist VM-Größe der N-Serie.

    eine VM-Größe mit GPU- auswählen

Installieren von PyTorch auf Computeknoten

Installieren Sie auf jedem Computeknoten PyTorch mit Befehl.

pip3 install torch torchvision torchaudio

Tipps: Sie können HPC Pack "Run Command" nutzen, um einen Befehl über eine Reihe von Clusterknoten parallel auszuführen.

Einrichten eines freigegebenen Verzeichnisses

Bevor Sie einen Schulungsauftrag ausführen können, benötigen Sie ein freigegebenes Verzeichnis, auf das von allen Computeknoten zugegriffen werden kann. Das Verzeichnis wird für Schulungscode und -daten verwendet (sowohl Eingabedatensatz als auch Ausgabe trainiertes Modell).

Sie können ein SMB-Freigabeverzeichnis auf einem Kopfknoten einrichten und dann auf jedem Computeknoten mit Cifs bereitstellen, wie hier:

  1. Erstellen Sie auf einem Kopfknoten ein Verzeichnis app unter %CCP_DATA%\SpoolDir, das standardmäßig bereits als CcpSpoolDir von HPC Pack freigegeben ist.

  2. Stellen Sie auf einem Computeknoten das app Verzeichnis wie

    sudo mkdir /app
    sudo mount -t cifs //<your head node name>/CcpSpoolDir/app /app -o vers=2.1,domain=<hpc admin domain>,username=<hpc admin>,password=<your password>,dir_mode=0777,file_mode=0777
    

    ANMERKUNG:

    • Die option password kann in einer interaktiven Shell weggelassen werden. In diesem Fall werden Sie dazu aufgefordert.
    • Die dir_mode und file_mode sind auf 0777 festgelegt, sodass jeder Linux-Benutzer sie lesen/schreiben kann. Eine eingeschränkte Berechtigung ist möglich, aber komplizierter, um konfiguriert zu werden.
  3. Optional können Sie die Montage dauerhaft durch Hinzufügen einer Linie in /etc/fstab wie

    //<your head node name>/CcpSpoolDir/app cifs vers=2.1,domain=<hpc admin domain>,username=<hpc admin>,password=<your password>,dir_mode=0777,file_mode=0777 0 2
    

    Hier ist die password erforderlich.

Ausführen eines Schulungsauftrags

Angenommen, wir verfügen jetzt über zwei Linux-Computeknoten mit jeweils vier NVidia v100 GPUs. Und wir haben PyTorch auf jedem Knoten installiert. Außerdem haben wir ein freigegebenes Verzeichnis "app" eingerichtet. Jetzt können wir mit unserer Trainingsarbeit beginnen.

Hier verwende ich ein einfaches Toymodell, das auf PyTorch DDP basiert. Sie können den Code auf GitHubabrufen.

Laden Sie die folgenden Dateien in das freigegebene Verzeichnis %CCP_DATA%\SpoolDir\app auf dem Kopfknoten herunter.

  • neural_network.py
  • operations.py
  • run_ddp.py

Erstellen Sie dann einen Auftrag mit Node als Ressourceneinheit und zwei Knoten für den Auftrag, z. B.

Auftragsdetails

Und geben Sie zwei Knoten mit GPU explizit an, z. B.

Auftragsressourcenauswahl

Fügen Sie dann Auftragsaufgaben hinzu, z. B.

Aufgaben bearbeiten

Die Befehlszeilen der Aufgaben sind alle gleich, z. B.

python3 -m torch.distributed.run --nnodes=<the number of compute nodes> --nproc_per_node=<the processes on each node> --rdzv_id=100 --rdzv_backend=c10d --rdzv_endpoint=<a node name>:29400 /app/run_ddp.py
  • nnodes gibt die Anzahl der Computeknoten für Ihren Schulungsauftrag an.
  • nproc_per_node gibt die Anzahl der Prozesse für jeden Computeknoten an. Die Anzahl der GPUs auf einem Knoten kann nicht überschritten werden. Das heißt, eine GPU kann höchstens einen Prozess haben.
  • rdzv_endpoint gibt einen Namen und einen Port eines Knotens an, der als Rendezvous fungiert. Jeder Knoten im Schulungsauftrag kann funktionieren.
  • "/app/run_ddp.py" ist der Pfad zu Ihrer Schulungscodedatei. Denken Sie daran, dass /app ein freigegebenes Verzeichnis auf dem Kopfknoten ist.

Senden Sie den Auftrag, und warten Sie das Ergebnis. Sie können die ausgeführten Aufgaben anzeigen, z. B.

Anzeigen von Aufgabenaufgaben

Beachten Sie, dass im Ergebnisbereich abgeschnittene Ausgabe angezeigt wird, wenn sie zu lang ist.

Das ist alles dafür. Ich hoffe, Dass Sie die Punkte bekommen und HPC Pack kann Ihre Trainingsarbeit beschleunigen.