Note:

Referencia NVIDIA GPUDirect RDMA con InfiniBand Ancho de banda de escritura

Introducción

La evaluación comparativa del rendimiento es el sello distintivo de HPC. Los superordenadores más modernos son grupos de nodos informáticos con una arquitectura heterogénea. En tal nodo podemos ver tanto CPU clásicas como codprocesadores informáticos especializados (GPU). En este tutorial se describe un enfoque para comparar el acceso directo a memoria (GPUDirect RDMA) remoto NVIDIA GPUDirect con un script personalizado basado en el ancho de banda de escritura InfiniBand (ib_write_bw).

Benchmarking GPUDirect RDMA con secuencia de comandos ib_write_bw.sh proporciona un mecanismo fácil y eficaz para realizar benchmarking GPUDirect RDMA en un cluster de HPC sin preocuparse por la instalación, las dependencias o la configuración del software. Este script se incluye con la pila de HPC de OCI 2.10.2 y superior. Se mostrará un informe de prueba consolidado con detalles de todas las interfaces en la consola de OCI Bastion y se almacenará en /tmp para futuras referencias.

Remote Direct Memory Access (RDMA) permite el acceso directo de los dispositivos de interconexión rápida de componentes periféricos (PCIe) a la memoria de GPU. Diseñado específicamente para las necesidades de aceleración de GPU, NVIDIA GPUDirect RDMA proporciona comunicación directa entre las GPU NVIDIA en sistemas remotos. Es una tecnología que permite una ruta directa para el intercambio de datos entre la GPU y los dispositivos peer de terceros mediante las funciones estándar de PCI Express. Está habilitado en las GPU de clase Tesla y Quadro, GPUDirect RDMA se basa en la capacidad de las GPU NVIDIA para exponer partes de la memoria del dispositivo en una región de registro de direcciones base de PCI Express.

RDMA DE GPU

"gpurdma"

El paquete perftest es una recopilación de pruebas escritas sobre uverbs destinadas a utilizarse como referencia de rendimiento. Contiene un juego de referencias de ancho de banda y latencia, como:

Nota: El paquete perftest se debe compilar con Compute Unified Device Architecture (CUDA) para utilizar la función GPUDirect.

En este tutorial, nos estamos centrando en una prueba de ancho de banda RDMA GPUDirect con transacciones de envío mediante el ancho de banda de escritura InfiniBand (ib_write_bw), que se puede utilizar para probar el ancho de banda y la latencia mediante transacciones de escritura RDMA. Automatizaremos el proceso de instalación y prueba con un script de envoltorio personalizado para ib_write_bw nativo. Este script se puede utilizar para comprobar ib_write_bw entre dos nodos de GPU del cluster. Si CUDA está instalado en el nodo, la ejecución volverá a compilar un paquete perftest con CUDA.

Objetivos

Requisitos

Instalación manual de perftest con CUDA DMA-BUF

Antes de continuar con la instalación manual, asegúrese de que se cumplen todos los requisitos previos y de que estamos instalando una unidad de GPU soportada.

Nota: La prueba manual de RDMA GPUDirect con ib_write_bw requiere la desinstalación del paquete existente y la recompilación con CUDA. Necesitamos verificar manualmente la unidad de nodo, el recuento de GPU y la interfaz RDMA activa en los nodos antes de continuar con la evaluación comparativa.

Visión General de la Solución

ib_write_bw.sh es una secuencia de comandos que simplifica el proceso de referencia de RDMA GPUDirect mediante la automatización de todas las tareas manuales relacionadas con él. Este script se puede disparar directamente desde el bastión con todos los argumentos. No es necesario ejecutarse en un modelo cliente-servidor tradicional. Las secuencias de comandos realizan las siguientes comprobaciones durante la ejecución. Si alguna de estas comprobaciones falla, se cerrará con un error.

Si se transfieren todas las comprobaciones, ib_write_bw.sh generará y ejecutará un manual de ansible para realizar la instalación y la configuración.

Script

Sintaxis

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

Salida de ejemplo

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

Resumen de Prueba

GPUDirect El resumen de prueba de RDMA para cada interfaz de los nodos de cálculo se mostrará en el bastión y el mismo se almacenará en la carpeta /tmp/ib_bw en el bastión.

El parámetro importante que busca es BW promedio[Gb/seg].

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

Confirmación

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.