一个新的 Linux 内核模块 `gpu-unlock` 允许用户绕过 Nvidia Ampere(3000 系列)和 Ada Lovelace(4000 系列)消费级显卡的硬件级限制。具体而言,该模块解锁了 FP16 和 BF16 操作的指令发射率,这些操作在消费级硬件上通常比专业级显卡受到更严重的限制。通过应用此解锁,用户报告称这些特定数据类型的 Tensor 吞吐量翻了一倍,显著加速了矩阵密集型工作负载,例如大语言模型(LLM)的预填充、扩散模型和 FlashAttention。
这张图片代表了 gpu-unlock 项目,该项目允许用户绕过 Nvidia Ampere 和 Ada Lovelace 显卡的硬件级限制。
该机制依赖于对 Nvidia 启动过程的复杂利用。在初始化期间,GPU 的 Security Engine 2(SEC2)运行经过签名的“booter”固件,用于验证并加载 GPU 系统处理器(GSP)固件。研究人员发现,此 booter 固件存在经典的缓冲区溢出漏洞。通过使用面向返回编程(ROP)——一种将现有固件代码的小片段(即“gadgets”)串联在一起的技术——该模块可以在“重度安全”模式下执行任意代码。这使得模块能够在官方 NVIDIA 驱动绑定到显卡之前,向 GPU 寄存器写入特定的速度选择器(SS0 和 SS1)。由于该模块作为早期内核模块(kmod)在 initramfs 中运行,它能在标准驱动初始化硬件之前执行这些写入操作并进行 PCIe 功能级重置(FLR)。
此视觉效果代表了文章中讨论的解锁机制针对 RTX 4000 系列显卡的特定实现。
虽然对于 Tensor 密集型任务,性能提升非常显著,但此解锁也伴随着实际和硬件方面的权衡。例如,要在 RTX 3090 Ti 上获得报告的最大收益,可能需要将功耗限制提高到 450W,这超过了出厂散热器的热设计,并需要额外的散热措施。此外,性能提升仅限于指令发射率;受限于内存带宽的工作负载(如 LLM 解码或 INT8 操作)不会看到显著改善。该模块设计为在重启后保持持久,甚至能在“挂起到内存”状态下幸存,尽管它会为恢复过程增加大约一秒钟,因为它需要重新对硬件应用解锁。