Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
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
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:
-
Invia:
ib_send_bw
eib_send_lat
-
Lettura RDMA:
ib_read_bw
eib_read_lat
-
Scrittura RDMA:
ib_write_bw
eib_write_lat
-
Atomico RDMA:
ib_atomic_bw
eib_atomic_lat
-
Ethernet nativa (quando si utilizza MOFED2) -
raw_ethernet_bw
eraw_ethernet_la
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
- Benchmark NVIDIA GPUDirect RDMA con uno script personalizzato creato su
ib_write_bw
.
Prerequisiti
-
Toolkit CUDA 11.7 o versione successiva.
-
Installare i moduli kernel GPU Open-Source NVIDIA versione 515 o successiva.
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.
-
Configurazione/utilizzo.
-
Esportare le seguenti variabili di ambiente
LD_LIBRARY_PATH
eLIBRARY_PATH
.export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export LIBRARY_PATH=/usr/local/cuda/lib64:$LIBRARY_PATH
-
-
Duplica il repository
perftest
e compilalo con CUDA.git clone https://github.com/linux-rdma/perftest.git
-
Dopo il clone, usare il comando seguente:
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
Pertanto, il flag -use_cuda=
sarà disponibile per l'aggiunta a una riga di comando: ./ib_write_bw -d ib_dev --use_cuda=<gpu index> -a
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.
- Forma del nodo.
- Installazione CUDA.
- Numero totale di GPU installate e ID Gpu immessi.
- Interfacce RDMA attive su server e client.
- Forme supportate
- BM.GPU.B4.8
- BM.GPU.A100-v2.8
- BM.GPU4.8
- Prerequisiti
- Forma GPU supportata.
- Driver e toolkit CUDA installati.
Se vengono superati tutti i controlli, ib_write_bw.sh
genererà ed eseguirà una playbook ansible per eseguire l'installazione e la configurazione.
Script
-
Nome:
ib_write_bw.sh
-
Posizione:
/opt/oci-hpc/scripts/
-
Pila:
HPC
-
Versione stack:
2.10.3 and above
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
- Autore - Anoop Nair
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.
Benchmark NVIDIA GPUDirect RDMA with InfiniBand Write Bandwidth
F90875-01
December 2023
Copyright © 2023, Oracle and/or its affiliates.