Un nuevo módulo del kernel de Linux, `gpu-unlock`, permite a los usuarios omitir las restricciones a nivel de hardware en las tarjetas gráficas de consumo Nvidia Ampere (serie 3000) y Ada Lovelace (serie 4000). Específicamente, el módulo desbloquea la tasa de emisión de instrucciones para operaciones FP16 y BF16, las cuales suelen estar limitadas en el hardware de consumo en comparación con sus equivalentes profesionales. Al aplicar este desbloqueo, los usuarios han informado que el rendimiento de tensor para estos tipos de datos específicos se duplica, acelerando significativamente las cargas de trabajo con alta densidad de matrices, como el prellenado de Modelos de Lenguaje Grande (LLM), modelos de difusión y FlashAttention.

Un gráfico promocional para el proyecto gpu-unlock en GitHub.
El proyecto gpu-unlock tiene como objetivo igualar el rendimiento de las GPU de consumo con las tarjetas de grado profesional desbloqueando las tasas de emisión de instrucciones.github.com

Esta imagen representa el proyecto gpu-unlock que permite a los usuarios omitir las restricciones a nivel de hardware en las tarjetas Nvidia Ampere y Ada Lovelace.

El mecanismo se basa en una sofisticada explotación del proceso de arranque de Nvidia. Durante la inicialización, el Security Engine 2 (SEC2) de la GPU ejecuta un firmware 'booter' firmado para autenticar y cargar el firmware del System Processor (GSP) de la GPU. Los investigadores descubrieron que este firmware booter es vulnerable a un clásico desbordamiento de búfer. Mediante el uso de Return Oriented Programming (ROP) —una técnica en la que pequeñas piezas de código de firmware existente, o 'gadgets', se encadenan entre sí— el módulo puede ejecutar código arbitrario en modo 'heavy-secure'. Esto permite al módulo escribir selectores de velocidad específicos (SS0 y SS1) en los registros de la GPU antes de que el controlador oficial de NVIDIA se vincule a la tarjeta. Debido a que el módulo se ejecuta como un módulo de kernel temprano (kmod) en el initramfs, realiza estas escrituras y un PCIe Function Level Reset (FLR) antes de que el controlador estándar pueda inicializar el hardware.

Un logotipo de proyecto para el repositorio gpu-unlock-ada.
El repositorio gpu-unlock-ada proporciona una implementación específica para desbloquear el rendimiento de tensor en las GPUs de la serie RTX 4000.github.com

Esta imagen representa la implementación específica para las tarjetas de la serie RTX 4000 mencionadas en la discusión del artículo sobre el mecanismo de desbloqueo.

Si bien las ganancias de rendimiento son sustanciales para las tareas con alta carga de tensor, el desbloqueo conlleva compensaciones prácticas y relacionadas con el hardware. Por ejemplo, lograr las ganancias máximas reportadas en una RTX 3090 Ti puede requerir aumentar el límite de potencia a 450W, lo que supera el diseño térmico de los enfriadores de serie y requiere refrigeración adicional. Además, el aumento de rendimiento es específico para la tasa de emisión de instrucciones; las cargas de trabajo limitadas por el ancho de banda de memoria, como la decodificación de LLM o las operaciones INT8, no experimentan mejoras significativas. El módulo está diseñado para ser persistente a través de los reinicios e incluso sobrevive a los estados de 'suspensión a RAM', aunque añade aproximadamente un segundo al proceso de reanudación ya que vuelve a aplicar el desbloqueo al hardware.