cafecomtech
Assinar
FERRAMENTAS · NVIDIA · 14 ABR 2026

NVIDIA NVbandwidth: ferramenta pra medir performance de interconexão e memória em GPU

A NVIDIA publicou um guia do NVbandwidth, ferramenta CUDA que mede banda e latência de transferência de memória em sistemas com GPU. Suporta testes unidirecionais, bidirecionais, multi-GPU e multi-node, com métodos via copy engine ou kernel SM. Funciona em topologias NVLINK, NVLink C2C e PCIe, e serve pra otimização, validação de hardware e troubleshooting em aplicações CUDA.

NVIDIA NVbandwidth: ferramenta pra medir performance de interconexão e memória em GPU
NVIDIA NVbandwidth: ferramenta pra medir performance de interconexão e memória em GPU foi anunciado em 14 de abril às 16:00, horário de Brasília. fonte original →

Quem escreve aplicação CUDA sabe: performance de transferência de dados é um dos gargalos mais comuns, seja em setup single-GPU ou multi-GPU. Pra diagnosticar isso, a NVIDIA mantém o NVbandwidth, ferramenta CUDA que mede banda e latência de cópia de memória entre diferentes links.

O post técnico é direcionado a dev CUDA, arquiteto de sistema e engenheiro de infra de ML que precisa medir e validar performance de interconexão entre GPUs.

O que é NVbandwidth

É uma ferramenta baseada em CUDA que mede banda e latência pra vários padrões de cópia de memória usando dois métodos: copy engine (CE) ou kernel copy via SM (Streaming Multiprocessor). Reporta a banda medida no sistema, cobrindo as rotas típicas:

  • CPU memory → GPU memory
  • GPU memory → CPU memory
  • GPU memory → GPU memory

Ajuda a avaliar performance geral do sistema, medir latência de acesso a memória, diagnosticar gargalos de banda em apps CUDA, otimizar padrões de transferência e comparar banda entre múltiplas GPUs.

Por que importa pra quem roda LLM

Banda de memória é fator crítico em app moderno de GPU, especialmente LLM. Com modelo crescendo em tamanho, movimentação eficiente de dados afeta:

  • Carregamento do modelo: tempo de startup
  • Inferência: capacidade de resposta em tempo real
  • Treino: atualização de gradiente e sincronização de parâmetro

Na prática, se você tá debugando por que seu treino distribuído tá lento ou por que TTFT (Time To First Token) da inferência degradou depois de uma mudança de hardware, NVbandwidth é o primeiro lugar pra olhar antes de culpar o código.

Tipos de teste suportados

Unidirecionais:

  • Host → Device (H2D)
  • Device → Host (D2H)
  • Device ↔ Device (D2D)

Bidirecionais:

  • Host ↔ Device
  • Device ↔ Device

Multi-GPU:

  • All to One (A2O), One to All (O2A)
  • All to Host (A2H), Host to All (H2A)

Multi-node (quando compilado com suporte a MPI): mede banda cruzando fronteiras de nó num cluster.

Latência: Host ↔ Device e Device ↔ Device.

Dois métodos de cópia

  • Copy Engine (CE): usa as funções assíncronas de memcpy nativas do CUDA
  • Streaming Multiprocessor (SM): kernels CUDA customizados que fazem a cópia via SM

A dupla abordagem dá visão mais completa de quanto o sistema aguenta.

Design agnóstico de topologia

Funciona em qualquer topologia de interconexão, NVLINK, NVLink C2C ou PCIe, sem precisar que você informe a topologia explicitamente. Output sai em texto puro (default) ou JSON (flag -j).

Requisitos

  • GPU NVIDIA com CUDA
  • CUDA toolkit 11.X ou superior (single-node); 12.3 pro multi-node
  • Driver compatível com a versão do toolkit
  • Compilador C++17 (GCC 7.x+ no Linux)
  • CMake 3.20+ (recomendado 3.24+)
  • Boost program options

Pra multi-node: CUDA 12.3 + driver 550+ e MPI instalado.

Uso básico

Pra medir banda de interconexão do sistema inteiro:

./nvbandwidth

Pra medir banda D2D via copy engine, buffer de 1GiB, 10 iterações, saída JSON:

./nvbandwidth -t device_to_device_memcpy_read_ce -b 1024 -i 10 -j

Exemplo de output num teste host-to-device:

Running host_to_device_memcpy_ce.
memcpy CE CPU(row) -> GPU(column) bandwidth (GB/s)
        0       1
0       55.63   55.64
SUM host_to_device_memcpy_ce 111.27
COEFFICIENT_OF_VARIATION host_to_device_memcpy_ce 0.00

Como a medição funciona por dentro

Pra não contaminar a medição com overhead de enfileiramento, o fluxo é:

  1. Enfileira um spin kernel que espera numa flag em memória host
  2. O spin kernel segura o device até todos os eventos de medição estarem enfileirados
  3. Enfileira evento de start, N iterações de memcpy, evento de stop
  4. Libera a flag pra começar a medição

Isso isola o tempo real de transferência pela interconexão.

Modo multi-node

Rodar multi-node exige setup extra. Primeiro, sobe o NVIDIA Internode Memory Exchange Service (IMEX):

sudo systemctl start nvidia-imex.service

Configura endereços dos nós em /etc/nvidia-imex/nodes_config.cfg e roda com MPI:

mpirun --allow-run-as-root --map-by ppr:4:node --bind-to core -np 8 \
  --report-bindings -q -mca btl_tcp_if_include enP5p9s0 \
  --hostfile /etc/nvidia-imex/nodes_config.cfg ./nvbandwidth -p multinode

Sistemas NVIDIA Multi-Node NVLink (MNNVL) exigem domínio IMEX totalmente configurado pra todos os nós do domínio NVLink.

Output típico num teste peer-to-peer entre 8 GPUs num sistema multi-node mostra matriz com banda por par, com valores em torno de 397 GB/s em cada direção.

Pra que usar

  • Otimização: descobrir que padrão de transferência é mais eficiente no seu hardware
  • Avaliação de sistema: comparar banda entre configurações diferentes
  • Troubleshooting: confirmar se gargalo de banda é causa de problema de performance em app CUDA
  • Validação de hardware: depois de instalar GPU nova, trocar driver ou mudar config, verificar se a banda bate com o esperado
  • Teste de regressão: baseline pra detectar degradação depois de update de software

Código e docs no repo NVIDIA/nvbandwidth.

0

☕ comentários · 0

Entra pra deixar um comentário. Magic link, sem senha.
Sem comentários ainda. Seja o primeiro.