Observação:

Benchmark NVIDIA GPUDirect RDMA com InfiniBand Largura de banda de gravação

Introdução

O benchmarking de desempenho é a marca registrada da HPC. Os supercomputadores mais modernos são clusters de nós de computação com uma arquitetura heterogênea. Em tal nó podemos ver tanto CPUs clássicas quanto co-processadores de computação especializados (GPUs). Este tutorial descreve uma abordagem para benchmark NVIDIA GPUDirect Remote Direct Memory Access (GPUDirect RDMA) com um script personalizado baseado na largura de banda de gravação InfiniBand (ib_write_bw).

O benchmarking de GPUDirect RDMA com o script ib_write_bw.sh fornece um mecanismo fácil e eficaz para executar o benchmarking de GPUDirect RDMA em um cluster HPC sem se preocupar com instalação, dependências ou configuração de software. Esse script está incluído na pilha de HPC da OCI 2.10.2 e superior. Um relatório de teste consolidado com detalhes de todas as interfaces será exibido no console do OCI Bastion e armazenado em /tmp para referência futura.

O Remote Direct Memory Access (RDMA) permite que dispositivos Peripheral Component Interconnect Express (PCIe) acessem diretamente a memória GPU. Projetado especificamente para as necessidades de aceleração de GPU, o NVIDIA GPUDirect RDMA fornece comunicação direta entre GPUs NVIDIA em sistemas remotos. É uma tecnologia que permite um caminho direto para a troca de dados entre a GPU e dispositivos de terceiros usando recursos padrão do PCI Express. Ele é ativado em GPUs da classe Tesla e Quadro, o GPUDirect RDMA depende da capacidade das GPUs NVIDIA de expor partes da memória do dispositivo em uma região de Registro de Endereço Base do PCI Express.

GPU RDMA

"gpurdma"

O Pacote Perftest é uma coleção de testes gravados em uverbs destinados a serem usados como um microbenchmark de desempenho. Ele contém um conjunto de benchmark de largura de banda e latência, como:

Observação: o pacote perftest precisa ser compilado com o Compute Unified Device Architecture (CUDA) para utilizar o recurso GPUDirect.

Neste tutorial, estamos nos concentrando em um teste de largura de banda RDMA GPUDirect com transações de envio usando largura de banda de gravação InfiniBand (ib_write_bw), que pode ser usado para testar largura de banda e latência usando transações de gravação RDMA. Automatizaremos o processo de instalação e teste com um script de wrapper personalizado para ib_write_bw nativo. Esse script pode ser usado para verificar ib_write_bw entre dois nós de GPU no cluster. Se o CUDA estiver instalado no nó, a execução recompilará um pacote perftest com o CUDA.

Objetivos

Pré-requisitos

Instalação manual do perftest com CUDA DMA-BUF

Antes de continuar com a instalação manual, verifique se todos os pré-requisitos foram atendidos e se estamos instalando em uma forma de GPU suportada.

Observação: o teste manual do RDMA GPUDirect com ib_write_bw requer a desinstalação do pacote existente e a recompilação com o CUDA. Precisamos verificar a forma do nó, a contagem de GPU e a interface RDMA ativa nos nós manualmente antes de continuar com o benchmarking.

Visão Geral da Solução

ib_write_bw.sh é um script que simplifica o processo de benchmark do RDMA GPUDirect automatizando todas as tarefas manuais relacionadas a ele. Esse script pode ser acionado diretamente do próprio bastion com todos os argumentos. Não há necessidade de executar em um modelo cliente-servidor tradicional. Os scripts executam as verificações a seguir durante a execução. Se alguma dessas verificações falhar, ela será encerrada com um erro.

Se todas as verificações forem aprovadas, ib_write_bw.sh gerará e executará um playbook ansible para executar a instalação e a configuração.

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

Saída de Amostra

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

Resumo do Teste

O resumo do teste RDMA GPUDirect para cada interface dos nós de computação será exibido no bastion e o mesmo será armazenado na pasta /tmp/ib_bw no bastion.

O parâmetro importante que ele procura é a média de BW [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
---------------------------------------------------------------------------------------

Confirmação

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.