Nota

Benchmark NVIDIA GPUDirect RDMA con larghezza di banda di scrittura InfiniBand

Introduzione

Il benchmarking delle prestazioni è il segno distintivo dell'HPC. I supercomputer più moderni sono cluster di nodi di calcolo con un'architettura eterogenea. In un tale nodo possiamo vedere sia CPU classiche che co-processori di calcolo specializzati (GPU). Questa esercitazione descrive un approccio per confrontare NVIDIA GPUDirect Remote Direct Memory Access (GPUDirect RDMA) con uno script personalizzato basato sulla larghezza di banda di scrittura InfiniBand (ib_write_bw).

Il benchmarking di GPUDirect RDMA con lo script ib_write_bw.sh fornisce un meccanismo semplice ed efficace per eseguire il benchmarking di GPUDirect RDMA in un cluster HPC senza preoccuparsi dell'installazione, delle dipendenze o della configurazione del software. Questo script è incluso nello stack HPC OCI 2.10.2 e versioni successive. Un report di test consolidato con i dettagli di tutte le interfacce verrà visualizzato sulla console OCI Bastion e memorizzato all'indirizzo /tmp per riferimento futuro.

Remote Direct Memory Access (RDMA) consente ai dispositivi Peripheral Component Interconnect Express (PCIe) di accedere direttamente alla memoria GPU. Progettato specificamente per le esigenze di accelerazione GPU, NVIDIA GPUDirect RDMA fornisce una comunicazione diretta tra le GPU NVIDIA nei sistemi remoti. Si tratta di una tecnologia che consente un percorso diretto per lo scambio di dati tra GPU e dispositivi peer di terze parti utilizzando le funzionalità standard di PCI Express. È abilitato sulle GPU Tesla e Quadro, GPUDirect RDMA si basa sulla capacità delle GPU NVIDIA di esporre porzioni di memoria del dispositivo in un'area PCI Express Base Address Register.

GPU RDMA

"gpurdma"

Pacchetto più avanzato è una raccolta di test scritti su uverbi destinati a essere utilizzati come microbenchmark per le prestazioni. Contiene un set di benchmark di larghezza di banda e latenza, ad esempio:

Nota: per utilizzare la funzione GPUDirect, è necessario compilare il pacchetto perftest con Compute Unified Device Architecture (CUDA).

In questo tutorial, ci stiamo concentrando su un test di larghezza di banda RDMA GPUDirect con transazioni di invio utilizzando la larghezza di banda di scrittura InfiniBand (ib_write_bw), che può essere utilizzato per testare la larghezza di banda e la latenza utilizzando transazioni di scrittura RDMA. Automatizzeremo il processo di installazione e test con uno script wrapper personalizzato per ib_write_bw nativo. Questo script può essere utilizzato per controllare ib_write_bw tra due nodi GPU nel cluster. Se CUDA è installato sul nodo, l'esecuzione compila di nuovo un pacchetto perftest con CUDA.

Obiettivi

Prerequisiti

Installazione manuale di perftest con CUDA DMA-BUF

Prima di procedere con l'installazione manuale, assicurarsi che tutti i prerequisiti siano soddisfatti e che l'installazione venga eseguita su una forma GPU supportata.

Nota: il test manuale di GPUDirect RDMA con ib_write_bw richiede la disinstallazione del pacchetto esistente e la ricompilazione con CUDA. È necessario verificare manualmente la forma del nodo, il conteggio delle GPU e l'interfaccia RDMA attiva sui nodi prima di procedere con il benchmarking.

Panoramica della soluzione

ib_write_bw.sh è uno script che semplifica il processo di benchmark GPUDirect RDMA automatizzando tutte le attività manuali ad esso correlate. Questo script può essere attivato direttamente dal bastion stesso con tutti gli argomenti. Non è necessario eseguire in un modello client-server tradizionale. Gli script eseguono i seguenti controlli durante l'esecuzione. Se uno qualsiasi di questi controlli non riesce, verrà chiuso con un errore.

Se vengono superati tutti i controlli, ib_write_bw.sh genererà ed eseguirà una playbook ansible per eseguire l'installazione e la configurazione.

Script

Uso

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

Esempio di output

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

Riepilogo test

Il riepilogo dei test RDMA GPUDirect per ogni interfaccia dei nodi di calcolo verrà visualizzato nel bastion e lo stesso verrà memorizzato nella cartella /tmp/ib_bw nel bastion.

Il parametro importante che cerca è la media BW [Gb/sec].

************** 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
---------------------------------------------------------------------------------------

Conferma

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.

Per la documentazione del prodotto, visitare Oracle Help Center.