RTX 4090隐藏算力被解锁:Tensor Core吞吐翻倍,驱动不变
一张 RTX 4090,什么硬件都没换,特定 Tensor Core 运算吞吐率竟然从 165.6 TFLOPS 飙升至 331.6 TFLOPS,直接翻倍!更让人意外的是,这次被挖出潜力的远不止 RTX 4090。RTX 3090 Ti、RTX 4070 Ti SUPER,甚至 2018 年发布的 RTX 2080
什么硬件都没动,一张 RTX 4090 在特定 Tensor Core 运算上的吞吐率就从 165.6 TFLOPS 涨到 331.6 TFLOPS,整整翻了一倍。
被挖出余量的也不只是 RTX 4090。RTX 3090 Ti、RTX 4070 Ti SUPER,连 2018 年面世的 RTX 2080 Ti,在社区测试里都跑出了明显的性能提升。
事情要从 GitHub 上的一批开发者说起,他们一直在琢磨英伟达 GPU 底层的计算限制。
这批人发现,一些 GeForce 显卡的 Tensor Core 在跑特定混合精度运算时,指令发射速率被卡住了。只要改动 GPU 启动阶段的相关配置,原本受限的运算路径就能恢复更高的吞吐率。
整个过程不用换 GPU,也不用刷显卡 BIOS。已经验证过的 Linux 方案里,原版 NVIDIA 驱动照样能跑。
现在 GitHub 上已经出现了覆盖 RTX 20、30、40 三代显卡的项目,还有开发者在 Windows 11 环境下做完了实验。开源社区这场对英伟达显卡「隐藏算力」的挖掘,正在铺开。
RTX 4090 算力翻倍
最抓眼球的成绩出自 RTX 4090。开发者 JustAResearcher 在开源项目 gpu-unlock-ada 里公布了这张卡解锁前后的测试数据。项目上线才 2 天,Star 量就到了 2.7k。
项目地址:https://github.com/JustAResearcher/gpu-unlock-ada
拆开看,FP16 输入、FP32 累加的 Tensor Core 运算,吞吐率由 165.6 TFLOPS 升到 331.6 TFLOPS,差不多翻倍。BF16 输入、FP32 累加也是同样的走势,从 165.5 TFLOPS 提到 330.6 TFLOPS。也就是说,在特定混合精度运算下,同一张 RTX 4090 的指令吞吐率能到原先的约两倍。
为了排除偶然因素,开发者把测试循环次数从 2 万次加到 4 万次,测出的 FP16/FP32 和 BF16/FP32 吞吐率分别是 330.8 TFLOPS 和 330.3 TFLOPS,跟之前基本对得上。
还有一点更值得看:整个实验既没换显卡硬件,也没靠拉高功耗上限、手动超频或者改 NVIDIA 官方驱动来换性能。
技术报告显示,测试显卡用的是 AD102 芯片,128 个 SM(流式多处理器),跑 Linux 7.2.4 内核,功耗上限一直保持在 450W。开发者借 GPU 启动阶段的固件执行流程,拿到受保护寄存器的写入权限,再改掉控制计算速率的寄存器配置。
配置改完后,显卡经历了一次 PCIe 功能级重置(FLR),接着由未经修改的 NVIDIA 615.78.08 驱动正常接管。驱动初始化和 CUDA 测试之后的寄存器检查显示,解锁配置仍然生效。开发者算是成功解除了 RTX 4090 在部分 Tensor Core 运算模式下的速率限制,让原有计算单元在执行 FP16/BF16 输入、FP32 累加指令时跑出更高吞吐率。
不过性能变化并没有覆盖所有运算类型。比如 FP16 输入、FP16 累加,解锁前吞吐率就已经到 325.7 TFLOPS,解锁后经过较长循环测试达到 331.6 TFLOPS,并没有出现类似的翻倍。INT8 运算吞吐率基本维持在 661 TOPS 左右,普通 FP32 标量运算也保持在约 79.1 TFLOPS。可见这次解锁主要影响的是此前受速率限制的特定 Tensor Core 运算路径,RTX 4090 的全部计算能力并没有一起翻倍。
另一位 RTX 4090 持有者用经过审查的项目代码做了独立复测。实验用的是 Linux 7.2.11-arch1-1 内核和 NVIDIA 615.78.08 驱动,解锁前后是同一张显卡、相同的测试程序、450W 功耗上限,结果得到进一步验证。测试中,FP16 输入、FP32 累加的指令吞吐率从 160.4 TFLOPS 升到 320.4 TFLOPS,BF16 输入、FP32 累加从 159.7 TFLOPS 升到 320.2 TFLOPS,两项都接近翻倍。
复测地址:https://github.com/JustAResearcher/gpu-unlock-ada/blob/main/docs/evidence/rtx4090-pr1-matched/README.md
可一旦测试从底层指令吞吐率换成实际矩阵乘法,性能增幅就没那么夸张了。用 cuBLAS 做矩阵乘法测试时,FP16 运算的吞吐率随矩阵规模不同提升约 12% 至 34%。其中 4096×4096 矩阵乘法的吞吐率从 153.2 TFLOPS 升到 206.0 TFLOPS,增幅约 34.4%。BF16 的差异更大:1024×1024 和 8192×8192 规模分别提升约 19.6% 和 16.0%,但 4096×4096 的测试里性能基本没变。
这种差异跟实际计算任务的执行方式有关。底层指令吞吐率测试尽量压低了内存访问等因素的干扰,真实矩阵乘法还要牵扯数据搬运、计算调度以及不同规模下的运算效率。所以,RTX 4090 特定 Tensor Core 指令吞吐率翻倍已经有独立复测撑腰,但这不代表实际 AI 训练或推理速度也能翻倍。
RTX 30 系列同样算力暴涨
RTX 30 系列这边也有好消息。开发者 Zagitta 的开源项目 gpu-unlock,已经在多款 RTX 30 系列显卡上跑通了。
其中 RTX 3090 Ti 的成绩相当亮眼。450W 功率上限下,BF16 矩阵运算吞吐率从 87.5 TFLOPS 升到 157.4 TFLOPS,增幅接近 80%;TF32 的提升达到 94%,几乎翻倍。
继 RTX 4090 之后,RTX 3080、3070 和 3060 也先后传出解锁成功的消息。RTX 3080 10GB 的 BF16 吞吐率由 65.4 TFLOPS 升至 113.4 TFLOPS,涨幅约 73%;RTX 3070 和 RTX 3060 的测试则分别录得约 81% 和 76% 的提升。
项目地址:https://github.com/Zagitta/gpu-unlock
gpu-unlock 的思路和此前针对 RTX 4090 的方案一脉相承:抓住 GPU 启动阶段的固件执行流程,改动那个管着 Tensor Core 指令发射速率的寄存器配置。
说白了,NVIDIA GPU 里有一类寄存器专门调节不同指令的执行速率,SS0 和 SS1 就在其中。它们带着权限保护,普通驱动碰不了。
Zagitta 从早先 CMP 显卡解锁项目里的 V67 技术取了经,借 GPU 安全启动固件的一个漏洞,用返回导向编程(ROP)改写权限级别掩码(PLM),拿到往这些寄存器写值的权限。接着,程序把 SS0 设为 0*88888888、SS1 设为 0*8,让对应的运算路径切到更高的指令发射速率上。
但 Zagitta 没去动 NVIDIA 驱动,而是把整套解锁流程做进了 Linux 内核模块。系统启动时,这个模块抢在 NVIDIA 官方驱动接管显卡之前跑起来,先把寄存器配置改好,再用 PCIe 功能级重置(FLR)让改动生效。之后,未经修改的 NVIDIA 驱动照常加载。按这套做法,部分 Ampere 架构显卡在处理 FP16/BF16 输入、FP32 累加指令时,指令发射速率能达到原先的两倍。
技术传开后,越来越多显卡用户开始提交自己的独立测试结果。
一名用 RTX 3080 10GB 的开发者把功率上限设在 320W 又测了一轮。BF16 吞吐率涨了约 73% 之外,FP16 输入、FP32 累加的矩阵运算吞吐率也从 64.88 TFLOPS 升到 110.14 TFLOPS,增幅约 70%。
在持续 120 秒的 FP16/BF16 交替矩阵运算测试里,这张卡完成的计算次数由 6940 次增至 11860 次,平均吞吐率提升约 71%。两轮测试功耗都维持在约 318W,峰值温度分别是 78℃ 和 79℃。
计算结果是否正确也做了验证:FP16、BF16 和 TF32 矩阵运算中,解锁前后的输出一模一样。不过并非所有任务都能沾光。本来就跑得较快的 FP16 输入、FP16 累加运算,吞吐率基本停在 112 TFLOPS 上下;INT8 运算和普通 FP32 运算也几乎没动。
矩阵运算之外,一些实际 AI 任务同样跑得更快了。有位 RTX 3090 用户用 vLLM 跑 27B BF16 大模型,提示词预填充速度提升约 33%,首个 Token 的响应时间缩短约 24%。另一名开发者手里有两张显存扩容版 RTX 3080,在大模型预填充测试中也拿到约 33% 至 36% 的性能提升。
RTX 3080 测试报告:https://github.com/Zagitta/gpu-unlock/issues/15?
只是两组实验里,逐 Token 生成速度都没什么明显变化。原因在于大模型预填充阶段要做大量矩阵计算,而逐 Token 生成更多卡在显存带宽上。
从底层寄存器改动到真实的 AI 工作负载,这套解锁方案已经在多款 RTX 30 系列显卡上换来了可观的性能收益。同样的技术思路,眼下也被开发者搬到了更早的 GPU 架构上。
8 年前的 2080 Ti 也被挖出潜力
RTX 20 系列这边的事更有意思。2018 年亮相的 RTX 2080 Ti 到今天已经八年,当年卖上千美元的旗舰卡,早已不在高端 GPU 性能竞争的第一线。可随着 NVIDIA GPU 算力解锁技术扩散,这张老卡又被开发者翻出来做测试。
开发者 nlzy 把 gpu-unlock 的相关技术移植到 NVIDIA Turing 架构,并在 GitHub 上开源了项目 turing-unlock。
项目地址:https://github.com/nlzy/turing-unlock
开发者测的是一张采用 22GB 非标准显存配置的 Dell RTX 2080 Ti。原版 RTX 2080 Ti 只有 11GB 显存,这张测试卡的硬件配置因此和普通零售版不一样。在 250W 功耗设置下,开发者用 cuBLAS 跑了 FP16 输入、FP32 累加的矩阵乘法测试。矩阵的 M、N、K 三个维度都取 2048 时,吞吐率从解锁前的 55.7 TFLOPS 升到 91.4 TFLOPS,增幅约 64.1%。
其他矩阵规模也有不同程度的提升:
1024:从 50.3 提升至 68.3 TFLOPS,提升约 35.8%;
4096:从 53.7 提升至 81.7 TFLOPS,提升约 52.1%;
8192:从 52.8 提升至 77.9 TFLOPS,提升约 47.5%。
拿来对照的话,NVIDIA 在 Turing 架构白皮书中给出的 RTX 2080 Ti 对应 FP16 Tensor Core 峰值吞吐率为 56.9 TFLOPS。按这个数字算,2048 规模下解锁前的测试结果达到标称峰值的 97.9%,解锁后则达到 160.6%。可见原先的速率配置确实压住了这条计算路径能发挥的吞吐率;配置调整之后,原有 Tensor Core 可以在相应运算模式下多干活。
另一名开发者的实验里,也出现了类似的结果。
GitHub 用户 haohervchb 单独发起了 Turing-unlock 研究项目,测试对象是一张 ASUS RTX 2080 Ti。该卡基于 TU102 芯片,具备 68 个 SM 和标准 11GB 显存。和 nlzy 做的 Linux 内核模块不一样,这个项目走的是系统启动前的 UEFI 执行路线,在操作系统加载之前就把 GPU 配置改掉。
在 FP16 输入、FP32 累加的底层 MMA(矩阵乘加)指令测试里,解锁前吞吐率为 46.94 TFLOPS,解锁后升至 93.66 TFLOPS,差不多翻了一倍。按每个 SM、每个时钟周期的浮点运算次数来算,也从约 511.7 FLOP/SM/clock 提高到 1022.4 FLOP/SM/clock。
项目地址:https://github.com/haohervchb/Turing-unlock
可换到实际的 cuBLAS 矩阵乘法测试,涨幅就没那么大了。8192×8192 规模的 GEMM 测试中,吞吐率由 48.15 TFLOPS 提升到 85.17 TFLOPS,增幅约 76.9%。这一数字没赶上底层指令测试里接近两倍的表现,但对一张八年前发布的显卡来说,提升依然相当可观。
眼下两项研究的验证范围都还有限。已有证据只能表明,部分 TU102 显卡可以通过修改速率配置,拉高特定 Tensor Core 运算的吞吐率。其他 RTX 20 系列型号是否同样适用,不同驱动、固件版本下兼容性如何,都还要进一步验证。至于实际 AI 训练、推理和游戏性能能提升多少,也没法拿这些测试数据直接推算。
Windows 11 上也有人跑通了。此前的探索基本集中在 Linux 环境,随着多个项目陆续开源,Windows 平台也出现了实验性进展。
开发者 TOTORONG 在 Hugging Face 上公开了 AD103_win_unlocker,展示的是 Windows 11 环境下修改 GPU 计算配置的实验。
项目地址:https://huggingface.co/TOTORONG/AD103_win_unlocker/blob/main/docs/INSTALL.en.md
测试用了一张经过显存扩容、容量达到 32GB 的 RTX 4080,搭载 AD103 GPU。这套方案同样不靠 Linux 内核模块,而是用 UEFI 程序在 Windows 启动前完成配置修改,随后把控制权交还 Windows。
项目公布的测试结果显示,在 4096 规模的矩阵乘法中:
FP16/FP32:91.54 → 182.80 TFLOPS。
BF16/FP32:91.91 → 184.49 TFLOPS。
两项测试的吞吐率都接近翻倍,说明相关底层配置修改并非只能在 Linux 系统上实现。不过目前的 Windows 11 结果仍出自特定改装显卡,还不能当作普通 RTX 4080 或整个 RTX 40 系列通用兼容的依据。
参考链接:https://x.com/Pirat_Nation/status/2114297495815704697