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:
Pruebas unidireccionales:
Host -> Dispositivo (H2D)
Dispositivo -> Host (D2H)
Dispositivo Dispositivo (D2D)
Pruebas bidireccionales:
Host Dispositivo
Dispositivo Dispositivo
Pruebas multi-GPU:
Todo a Uno (A2O)
Uno a Todo (O2A)
Todo a Host (A2H)
Host a Todo (H2A)
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
Latencia Host Dispositivo
Latencia Dispositivo Dispositivo
Métodos de copia múltiples
La herramienta implementa dos métodos principales para transferencias de memoria:
Motor de copia (CE): Utiliza funciones de copia de memoria asíncronas integradas en CUDA
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:
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:
Interfaz CLI: Maneja las entradas del usuario y orquesta la ejecución de pruebas
Marco de casos de prueba: Proporciona una interfaz estándar para definir diferentes pruebas de ancho de banda
Marco de copia de memoria: Componente central que realiza operaciones de memoria
Kernels CUDA: Kernels especializados de CUDA para realizar operaciones de memoria
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:
Primero, encola un kernel de giro que gira en una bandera en la memoria del host
El kernel de giro gira en el dispositivo hasta que todos los eventos de medición han sido completamente encolados
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:
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:
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
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:
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:
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!