NVIDIA lanza NVbandwidth, herramienta clave para evaluar el rendimiento de memoria en GPUs

El rendimiento de transferencia de datos es crucial al desarrollar aplicaciones CUDA, tanto en sistemas de una sola GPU como en configuraciones multi-GPU. Para evaluar las características de memoria de tu sistema GPU, puedes utilizar NVIDIA NVbandwidth.

Este artículo explora qué es NVbandwidth, cómo funciona, sus características clave y cómo puedes usarlo para probar y evaluar tus sistemas NVIDIA GPU. Está dirigido a desarrolladores CUDA, arquitectos de sistemas e ingenieros de infraestructura ML que requieren medir y validar el rendimiento de interconexión de GPU.

¿Qué es NVbandwidth?

NVbandwidth es una herramienta basada en CUDA que mide el ancho de banda y la latencia para diversos patrones de copia de memoria a través de diferentes enlaces utilizando métodos de copia de motor (CE) o de núcleo. Informa el ancho de banda medido en tu sistema, ofreciendo ideas valiosas sobre las características de rendimiento de tu configuración GPU. Aunque las GPUs modernas tienen capacidades de cálculo impresionantes, su rendimiento a menudo se limita por la velocidad de transferencia de datos entre diferentes dispositivos:

  • Memoria de CPU a memoria de GPU
  • Memoria de GPU a memoria de CPU
  • Memoria de GPU a memoria de GPU

Conocer estas características de rendimiento ayuda a los desarrolladores a:

  • Evaluar el rendimiento del sistema
  • Medir la latencia de acceso a la memoria
  • Medir el ancho de banda en despliegues de GPU en un solo nodo y multi-nodo
  • Comprender las implicaciones de rendimiento de diferentes patrones de transferencia de memoria
  • Diagnosticar cuellos de botella de ancho de banda en aplicaciones CUDA
  • Optimizar patrones de transferencia de memoria para cargas de trabajo específicas
  • Comparar ancho de banda y latencia entre múltiples GPUs en un sistema
  • Monitoreo y validación de rendimiento

Motivación

El ancho de banda de memoria es un factor crítico en aplicaciones modernas de GPU, como los modelos de lenguaje grande (LLMs). A medida que los modelos crecen en tamaño y complejidad, el movimiento eficiente de datos se vuelve cada vez más importante para un rendimiento óptimo en áreas como:

  • Carga e inicialización del modelo: Una carga rápida del modelo es crucial para tiempos de inicio rápidos
  • Rendimiento de inferencia: Afecta las capacidades de respuesta en tiempo real
  • Eficiencia de entrenamiento: Las limitaciones de ancho de banda pueden afectar el rendimiento en diferentes fases de entrenamiento:
    • Actualizaciones de gradiente
    • Sincronización de parámetros

Características clave de NVbandwidth

Pruebas de ancho de banda integrales

NVbandwidth admite una amplia gama de pruebas de ancho de banda, incluyendo:

  1. Pruebas unidireccionales:
    • Host -> Dispositivo (H2D)
    • Dispositivo -> Host (D2H)
    • Dispositivo Dispositivo (D2D)
  2. Pruebas bidireccionales:
    • Host Dispositivo
    • Dispositivo Dispositivo
  3. Pruebas multi-GPU:
    • Todo a Uno (A2O)
    • Uno a Todo (O2A)
    • Todo a Host (A2H)
    • Host a Todo (H2A)
  4. Pruebas multi-nodo (cuando se construye con soporte MPI):
    • Pruebas para medir ancho de banda a través de límites de nodo en un clúster

Pruebas de latencia

  1. Latencia Host Dispositivo
  2. Latencia Dispositivo Dispositivo

Métodos de copia múltiples

La herramienta implementa dos métodos principales para transferencias de memoria:

  1. Motor de copia (CE): Utiliza funciones de copia de memoria asíncronas integradas en CUDA
  2. Multiprocesador de transmisión (SM): Utiliza núcleos CUDA personalizados para realizar copias a través del SM

Este enfoque dual permite comprender mejor las capacidades de ancho de banda de tu sistema.

Diseño agnóstico a la topología

NVbandwidth está diseñado para funcionar de manera eficiente a través de diferentes topologías de interconexión de GPU en un sistema de un solo nodo o multi-nodo, ya sea utilizando NVLINK, NVLink C2C o PCIe. No requiere que el usuario tenga un conocimiento explícito de la topología del sistema para funcionar, lo que lo hace prácticamente agnóstico a la topología.

Opciones de salida flexibles

Los resultados pueden mostrarse en:

  • Formato de texto plano (predeterminado)
  • Formato JSON (usando la opción -j)

Requisitos del sistema

Para usar NVbandwidth, necesitas:

  • GPU NVIDIA habilitada para CUDA
  • Kit de herramientas CUDA (versión 11.X o superior para la versión de un solo nodo y 12.3 para la versión de multinodo)
  • Controlador de pantalla NVIDIA compatible con la versión del kit de herramientas CUDA
  • Compilador compatible con C++17 (GCC 7.x o superior para Linux)
  • CMake (versión 3.20 o superior, se recomienda 3.24+)
  • Biblioteca de opciones de programa Boost
  • Solo versión multi-nodo:
    • Kit de herramientas CUDA 12.3 y controlador 550 o superior
    • Instalación de MPI

Para más instrucciones detalladas sobre la construcción, los usuarios interesados pueden consultar las instrucciones README.

Uso de NVbandwidth

Uso básico

Para medir de forma integral el ancho de banda de interconexión de tu sistema, simplemente ejecuta:

Supongamos que deseas medir el ancho de banda de dispositivo a dispositivo utilizando el método del motor de copia, con un buffer de 1GiB y 10 iteraciones, y deseas que los resultados se muestren en formato JSON:

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

Salida de ejemplo

A continuación se presenta un ejemplo de cómo se ve la salida al ejecutar una prueba de copia de host a dispositivo:

 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 NOTE: The reported results may not reflect the full capabilities of the platform. Performance can vary with software drivers, hardware clocks, and system topology. 

Bajo el capó: Cómo funciona NVbandwidth

Arquitectura

NVbandwidth sigue un diseño modular que separa la definición de pruebas, operaciones de memoria y reporte de resultados en subsistemas distintos:

  1. Interfaz CLI: Maneja las entradas del usuario y orquesta la ejecución de pruebas
  2. Marco de casos de prueba: Proporciona una interfaz estándar para definir diferentes pruebas de ancho de banda
  3. Marco de copia de memoria: Componente central que realiza operaciones de memoria
    1. Kernels CUDA: Kernels especializados de CUDA para realizar operaciones de memoria
  4. Sistema de salida: Formatea y presenta los resultados de la prueba NVbandwidth.cpp:178-246

Detalles de medición

La herramienta utiliza el siguiente enfoque para medir el rendimiento con precisión:

  1. Primero, encola un kernel de giro que gira en una bandera en la memoria del host
  2. El kernel de giro gira en el dispositivo hasta que todos los eventos de medición han sido completamente encolados
  3. A continuación, encola un evento de inicio, una cantidad determinada de iteraciones de memcpy y, finalmente, un evento de parada

Finalmente, libera la bandera para iniciar la medición.

Este proceso asegura que la sobrecarga de encolado de operaciones se excluya de la medición de la transferencia real a través de la interconexión.

Pruebas de ancho de banda bidireccionales

Para las pruebas bidireccionales, NVbandwidth mide el ancho de banda cuando los datos fluyen en ambas direcciones simultáneamente. Ver figura 1 a continuación:

Figure shows CPU and GPU connected by H2D and D2H data directions
Figura 1: CPU y GPU conectados por direcciones de datos H2D y D2H

Copias CE

El flujo A (flujo medido) realiza escrituras en el dispositivo, mientras que el flujo B en la dirección opuesta produce lecturas.

Copias SM

La prueba lanza un kernel de copia donde los grupos de hilos alternos copian datos en direcciones alternas.

Operación multi-nodo

Ejecutar NVbandwidth en modo multi-nodo requiere configuración adicional:

  1. Iniciar el Servicio de Intercambio de Memoria Internodal de NVIDIA (IMEX):
 sudo systemctl start nvidia-imex.service 

Configura las direcciones de nodo en /etc/nvidia-imex/nodes_config.cf

2. Ejecutar con 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 

Los sistemas NVIDIA Multi-Node NVLink (MNNVL) requieren un dominio IMEX completamente configurado y operativo para todos los nodos que forman el dominio NVLink. NVbandwidth utiliza MPI para coordinar las mediciones entre nodos. Ver figura 2 a continuación:

Figure shows an example multi-node system with 2 NVSwitches, each of which is fully-connected to all the GPUs.
Figura 2: Ejemplo de un sistema multi-nodo y multi-GPU conectado con NVLink.

Salida de ejemplo

A continuación se presenta un ejemplo de cómo se ve la salida al medir el rendimiento entre pares de nodos en un sistema multi-nodo:

 Running multinode_device_to_device_memcpy_read_ce. memcpy CE GPU(row) -> GPU(column) bandwidth (GB/s) 0 1 2 3 4 5 6 7 0 N/A 397.39 397.44 397.59 397.50 397.52 397.66 397.55 1 397.65 N/A 397.35 397.46 397.48 397.53 397.53 397.59 2 397.65 397.35 N/A 397.57 397.39 397.55 397.53 397.50 3 397.57 397.37 397.35 N/A 397.50 397.50 397.52 397.53 4 397.68 397.30 397.44 397.55 N/A 397.53 397.52 397.52 5 397.66 397.26 397.48 397.46 397.52 N/A 397.50 397.59 6 397.68 397.39 397.48 397.59 397.52 397.44 N/A 397.61 7 397.68 397.41 397.42 397.48 397.52 397.50 397.53 N/A 

Casos de uso de NVbandwidth

Optimización del rendimiento

Al comprender las características de ancho de banda de tu sistema, puedes optimizar tus aplicaciones CUDA para aprovechar mejor el ancho de banda disponible. Por ejemplo, podrías descubrir que ciertos patrones de transferencia son más eficientes que otros para tu configuración de hardware específica.

Evaluación y pruebas del sistema

NVbandwidth proporciona una forma estandarizada de medir y comparar el rendimiento del ancho de banda entre diferentes sistemas, lo que lo hace valioso para pruebas y evaluación del sistema.

Resolución de problemas

Si tu aplicación CUDA experimenta problemas de rendimiento, NVbandwidth puede ayudar a identificar si las limitaciones de ancho de banda son un factor contribuyente. NVbandwidth informa el ancho de banda medido en una configuración de sistema específica. Los resultados de rendimiento pueden variar significativamente en función de múltiples factores, como el modelo de GPU, la generación de interconexión, los relojes actuales y otros aspectos de la configuración del sistema.

Validación de hardware: Después de instalar nuevas GPUs, actualizar controladores o realizar cambios en el sistema, NVbandwidth puede verificar que el rendimiento de ancho de banda de memoria cumple con las expectativas. Esto ayuda a identificar problemas de hardware, problemas de controladores o errores de configuración que podrían afectar el rendimiento de la aplicación.

Pruebas de regresión de rendimiento: Al implementar nuevas versiones de software o actualizaciones del sistema, NVbandwidth proporciona una línea base para detectar regresiones de rendimiento. Comparando las mediciones de ancho de banda antes y después de los cambios, puedes identificar rápidamente si las actualizaciones han afectado negativamente el rendimiento del sistema.

Más allá

NVbandwidth es una herramienta indispensable para medir y comprender las características de ancho de banda de los sistemas GPU de NVIDIA. Proporciona ideas valiosas para optimizar aplicaciones CUDA, evaluar el rendimiento del sistema y resolver problemas al ofrecer una suite de pruebas integral, opciones de configuración flexibles y soporte tanto para implementaciones de un solo nodo como multi-nodo.

Al aprovechar NVbandwidth, puedes tomar decisiones informadas para maximizar el rendimiento de tus aplicaciones CUDA y garantizar capacidades óptimas de transferencia de datos en tu configuración de GPU. A medida que los clústeres de GPU evolucionan en tamaño y complejidad, NVbandwidth continúa avanzando, abordando nuevos desafíos en la medición y análisis de ancho de banda, incluyendo pruebas de escalabilidad del rendimiento.

Para obtener información más detallada, explora estos recursos adicionales.

Para comenzar a optimizar el rendimiento de tu sistema GPU, ¡descarga y prueba NVbandwidth hoy!

Te puede interesar

Ilustración de un hombre mayor con auriculares y chaqueta