Hinweis:

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

"gpurdma"

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:

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

Voraussetzungen

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.

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.

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

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

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.