Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Registrieren eines kostenlosen Accounts finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch spezifische Werte für Ihre Cloud-Umgebung.
Benchmark NVIDIA GPUDirect RDMA mit InfiniBand Schreibbandbreite
Einführung
Performance Benchmarking ist das Markenzeichen von HPC. Die modernsten Supercomputer sind Cluster von Computing-Knoten mit einer heterogenen Architektur. In einem solchen Knoten können wir sowohl klassische CPUs als auch spezialisierte Computer-Co-Prozessoren (GPUs) sehen. Dieses Tutorial beschreibt einen Ansatz zum Benchmarking von NVIDIA GPUDirect Remote Direct Memory Access (GPUDirect RDMA) mit einem benutzerdefinierten Skript, das auf der Schreibbandbreite InfiniBand basiert (ib_write_bw
).
Das Benchmarking von GPUDirect RDMA mit dem Skript ib_write_bw.sh
bietet einen einfachen und effektiven Mechanismus zum Ausführen von Benchmarking von GPUDirect RDMA in einem HPC-Cluster, ohne sich Gedanken über Softwareinstallation, Abhängigkeiten oder Konfiguration machen zu müssen. Dieses Skript ist im OCI HPC-Stack 2.10.2 und höher enthalten. Ein konsolidierter Testbericht mit Details zu allen Schnittstellen wird auf der OCI Bastion-Konsole angezeigt und unter /tmp
zur späteren Referenz gespeichert.
Remote Direct Memory Access (RDMA) ermöglicht Peripheral Component Interconnect Express-(PCIe-)Geräten direkten Zugriff auf den GPU-Speicher. NVIDIA GPUDirect RDMA wurde speziell für die Anforderungen der GPU-Beschleunigung entwickelt und bietet direkte Kommunikation zwischen NVIDIA-GPUs in Remote-Systemen. Es ist eine Technologie, die einen direkten Pfad für den Datenaustausch zwischen der GPU und Peer-Geräten von Drittanbietern mit Standardfunktionen von PCI Express ermöglicht. Es ist auf Tesla- und Quadro-GPUs aktiviert. GPUDirect RDMA setzt auf die Fähigkeit von NVIDIA-GPUs, Teile des Gerätespeichers in einer Region des PCI Express Base Address Registers verfügbar zu machen.
GPU-RDMA
Perftest-Package ist eine Sammlung von Tests, die über Uverbs geschrieben wurden und als Performance-Microbenchmark verwendet werden sollen. Es enthält eine Gruppe von Bandbreiten- und Latenzbenchmarks wie:
-
Senden:
ib_send_bw
undib_send_lat
-
RDMA Lesen:
ib_read_bw
undib_read_lat
-
RDMA-Schreiben:
ib_write_bw
undib_write_lat
-
RDMA Atomic:
ib_atomic_bw
undib_atomic_lat
-
Native Ethernet (bei Verwendung mit MOFED2) -
raw_ethernet_bw
undraw_ethernet_la
Hinweis: Das Package
perftest
muss mit Compute Unified Device Architecture (CUDA) kompiliert werden, damit das Feature GPUDirect verwendet werden kann.
In diesem Tutorial konzentrieren wir uns auf einen GPUDirect RDMA-Bandbreitentest mit Sendetransaktionen mit InfiniBand-Schreibbandbreite (ib_write_bw
), mit dem Bandbreite und Latenz mit RDMA-Schreibtransaktionen getestet werden können. Wir automatisieren den Installations- und Testprozess mit einem benutzerdefinierten Wrapper-Skript für native ib_write_bw
. Mit diesem Skript können Sie ib_write_bw
zwischen zwei GPU-Knoten im Cluster prüfen. Wenn CUDA auf dem Knoten installiert ist, kompiliert die Ausführung ein perftest
-Package mit CUDA neu.
Ziele
- Benchmark für NVIDIA GPUDirect RDMA mit einem benutzerdefinierten Skript, das auf
ib_write_bw
basiert.
Voraussetzungen
-
CUDA Toolkit 11.7 oder höher.
-
Installieren Sie Open-Source-GPU-Kernelmodule von NVIDIA Version 515 oder höher.
Manuelle Installation von perftest
mit CUDA DMA-BUF
Bevor Sie mit der manuellen Installation fortfahren, stellen Sie sicher, dass alle Voraussetzungen erfüllt sind und die Installation auf einer unterstützten GPU-Ausprägung erfolgt.
-
Konfiguration/Nutzung.
-
Exportieren Sie die folgenden Umgebungsvariablen
LD_LIBRARY_PATH
undLIBRARY_PATH
.export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export LIBRARY_PATH=/usr/local/cuda/lib64:$LIBRARY_PATH
-
-
Klonen Sie das Repository
perftest
, und kompilieren Sie es mit CUDA.git clone https://github.com/linux-rdma/perftest.git
-
Nach dem Klonen verwenden Sie den folgenden Befehl.
cd perftest/ ./autogen.sh && ./configure CUDA_H_PATH=<path to cuda.h> && make -j, e.g.: ./autogen.sh && ./configure CUDA_H_PATH=/usr/local/cuda/include/cuda.h && make -j
Somit ist das Flag -use_cuda=
zum Hinzufügen zu einer Befehlszeile verfügbar: ./ib_write_bw -d ib_dev --use_cuda=<gpu index> -a
Hinweis: Beim manuellen Testen von GPUDirect RDMA mit
ib_write_bw
muss das vorhandene Package deinstalliert und mit CUDA neu kompiliert werden. Sie müssen die Knotenausprägung, die GPU-Anzahl und die aktive RDMA-Schnittstelle auf Knoten manuell prüfen, bevor Sie mit dem Benchmarking fortfahren.
Lösung – Überblick
ib_write_bw.sh ist ein Skript, das den RDMA-Benchmarkprozess GPUDirect vereinfacht, indem alle damit verbundenen manuellen Aufgaben automatisiert werden. Dieses Skript kann direkt von der Bastion selbst mit allen Argumenten ausgelöst werden. Sie müssen nicht in einem herkömmlichen Client-Server-Modell ausgeführt werden. Skripte führen während der Ausführung die folgenden Prüfungen aus. Wenn eine dieser Prüfungen nicht erfolgreich ist, wird sie mit einem Fehler beendet.
- Knotenausprägung.
- CUDA-Installation.
- Gesamtanzahl der installierten GPUs und der eingegebenen GPU-ID.
- Aktive RDMA-Schnittstellen auf Server und Client.
- Unterstützte Ausprägungen
- BM.GPU.B4.8
- BM.GPU.A100-v2.8
- BM.GPU4.8
- Voraussetzungen
- Unterstützte GPU-Ausprägung.
- CUDA Treiber und Toolkits installiert.
Wenn alle Prüfungen übergeben wurden, generiert und führt ib_write_bw.sh
ein ansible Playbook aus, um die Installation und Konfiguration auszuführen.
Script
-
Name:
ib_write_bw.sh
-
Speicherort:
/opt/oci-hpc/scripts/
-
Stack:
HPC
-
Stackversion:
2.10.3 and above
Verwendung
sh ib_write_bw.sh -h
Usage:
./ib_write_bw.sh -s <server> -n <node> -c <y> -g <gpu id>
Options:
s Server hostname
n Client hostname.
c Enable cuda (Default: Disabled)
g GPU id (Default: 0)
h Print this help.
Logs are stored at /tmp/logs
e.g., sh ./ib_write_bw.sh -s compute-permanent-node-1 -n compute-permanent-node-2 -c y -g 2
Supported shapes: BM.GPU.B4.8,BM.GPU.A100-v2.8,BM.GPU4.8
Beispielausgabe
sh ib_write_bw.sh -s compute-permanent-node-14 -n compute-permanent-node-965 -c y -g 1
Shape: "BM.GPU4.8"
Server: compute-permanent-node-14
Client: compute-permanent-node-965
Cuda: y
GPU id: 1
Checking interfaces...
PLAY [all] *******************************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************
ok: [compute-permanent-node-14]
ok: [compute-permanent-node-965]
TASK [check cuda] ************************************************************************************************************************
ok: [compute-permanent-node-965]
ok: [compute-permanent-node-14]
.
.
Testing active interfaces...
mlx5_0
mlx5_1
mlx5_2
mlx5_3
mlx5_6
mlx5_7
mlx5_8
mlx5_9
mlx5_10
mlx5_11
mlx5_12
mlx5_13
mlx5_14
mlx5_15
mlx5_16
mlx5_17
ib_server.sh 100% 630 2.8MB/s 00:00
ib_client.sh 100% 697 2.9MB/s 00:00
Server Interface: mlx5_0
initializing CUDA
Listing all CUDA devices in system:
CUDA device 0: PCIe address is 0F:00
CUDA device 1: PCIe address is 15:00
CUDA device 2: PCIe address is 51:00
CUDA device 3: PCIe address is 54:00
CUDA device 4: PCIe address is 8D:00
CUDA device 5: PCIe address is 92:00
CUDA device 6: PCIe address is D6:00
CUDA device 7: PCIe address is DA:00
Picking device No. 1
[pid = 129753, dev = 1] device name = [NVIDIA A100-SXM4-40GB]
creating CUDA Ctx
making it the current CUDA Ctx
cuMemAlloc() of a 131072 bytes GPU buffer
allocated GPU buffer address at 00007f29df200000 pointer=0x7f29df200000
---------------------------------------------------------------------------------------
RDMA_Write BW Test
Dual-port : OFF Device : mlx5_0
Number of qps : 1 Transport type : IB
Connection type : RC Using SRQ : OFF
PCIe relax order: ON
ibv_wr* API : ON
TX depth : 128
CQ Moderation : 1
Mtu : 4096[B]
Link type : Ethernet
GID index : 3
Max inline data : 0[B]
rdma_cm QPs : OFF
Data ex. method : Ethernet
---------------------------------------------------------------------------------------
local address: LID 0000 QPN 0x008b PSN 0xe4ad79 RKey 0x181de0 VAddr 0x007f29df210000
GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:19:196
remote address: LID 0000 QPN 0x008b PSN 0x96f625 RKey 0x181de0 VAddr 0x007f9c4b210000
GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:16:13
---------------------------------------------------------------------------------------
#bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps] CPU_Util[%]
65536 407514 0.00 35.61 0.067920 0.78
Testzusammenfassung
GPUDirect Die RDMA-Testübersicht für jede Schnittstelle der Compute Nodes wird auf der Bastion angezeigt und im Ordner /tmp/ib_bw
auf Bastion gespeichert.
Wichtiger Parameter, nach dem gesucht wird, ist der BW-Durchschnitt [Gb/s].
************** Test Summary **************
Server interface: mlx5_0
#bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps] CPU_Util[%]
65536 407514 0.00 35.61 0.067920 0.78
---------------------------------------------------------------------------------------
Server interface: mlx5_1
#bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps] CPU_Util[%]
65536 407569 0.00 35.61 0.067929 0.78
---------------------------------------------------------------------------------------
Server interface: mlx5_2
#bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps] CPU_Util[%]
65536 407401 0.00 35.60 0.067901 0.78
---------------------------------------------------------------------------------------
Bestätigung
- Autor - Anoop Nair
Weitere Lernressourcen
Lernen Sie andere Übungen auf docs.oracle.com/learn kennen, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube Channel zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Produktdokumentation finden Sie im Oracle Help Center.
Benchmark NVIDIA GPUDirect RDMA with InfiniBand Write Bandwidth
F90875-01
December 2023
Copyright © 2023, Oracle and/or its affiliates.