site logo

Marico's space

RTX 4090“2x FP16”解锁:GEMM 实际性能提升 12% 至 34%,如何安全测试

服务器技术 2026-10-26 17:33:56 8

最近折腾了 RTX 4090 的“2x FP16”,踩了几个坑,这篇把问题说清楚。所谓“2x”确实是真实存在的,但它并不等于训练任务能直接获得 100% 的性能提升。下面结合公开测试结果、实际 GEMM(通用矩阵乘法)表现和安装风险,梳理如何在自己的显卡上安全验证。

gpu-unlock-ada 是一个 Linux 内核模块。它会在系统启动时、官方 NVIDIA 驱动加载之前运行,把支持该功能的 RTX 40 系列显卡切换到全速 FP16(16 位浮点)和 BF16(16 位脑浮点)张量运算,并使用 FP32(32 位浮点)累加。

2 倍提升是真的,但它和训练任务最终看到的结果不是一回事。真正值得关注的是:测试数据到底说明了什么、有哪些风险,以及如何在自己的机器上安装、测量和回退。

这些数字到底说明了什么

README 中报告了两类结果,两者的差异才是关键。

指令基准测试(寄存器级指令发射率)。在 RTX 4090(10de:2684)上:

模式 解锁前 解锁后
FP16,FP32 累加 165.6 TF/s 331.6 TF/s
BF16,FP32 累加 165.5 TF/s 330.6 TF/s

另一位用户使用 NVIDIA 615.78.08、保持同样的 450 W 功耗上限独立测试后,FP16 从 160.4 TF/s 提升到 320.4 TF/s,BF16 从 159.7 TF/s 提升到 320.2 TF/s。所有数值校验均通过。

真实 cuBLAS GEMM。在同一组匹配测试中,GEMM 的中位吞吐量会随着矩阵形状变化:

  • FP16 提升了 12% 至 34%
  • BF16 在两个矩阵形状下提升了 16% 至 20%,但在 4096³ 下 基本没有变化

README 明确说明,这些数据来自一组匹配的测试运行,测试期间桌面环境仍然处于活动状态;它们既不是完整应用的加速结果,也不属于长时间稳定性测试。INT8(8 位整数)、dp4a 和标量 FP32 基本维持在基线水平。在一块 RTX 4070 Ti SUPER 上,经过验证的 E4M3 FP8 CUTLASS GEMM 从 59.326 TF/s 变为 59.495 TF/s,差异只有 0.3%。

因此,比较诚实的总结是:张量指令发射率翻倍,真实矩阵乘法有明显但小得多的提升,而 INT8 和 FP32 基本没有收益。

风险说白了

  • 它属于非官方方案,NVIDIA 不提供支持,并且可能影响保修。
  • 其中使用的 payload 来自对 NVIDIA 调试启动器的公开分析(源自 TOTORONG/AD103_win_unlocker),会通过内核模块在驱动加载前修改 GPU 寄存器状态。
  • 目前只在非常少的显卡上验证过。RTX 4070 Ti SUPER(10de:2705)和 RTX 4060 Ti 16GB(10de:2805)路径仍属实验性质,并且各自只在一块显卡上验证。其他 Ada 架构型号、专业 RTX A 系列以及数据中心显卡均不在支持范围内。
  • 目前还没有长时间稳定性测试结果。

如果这些风险对你的机器可以接受,可以继续往下看。

环境要求

  • 一台由你完全控制的 Linux 机器,并保留未修改的官方启动项,方便回退
  • 内核头文件、可正常工作的 DKMS(Dynamic Kernel Module Support,动态内核模块支持)工具链,以及内核中的 CONFIG_CRYPTO_LIB_SHA256
  • 官方 NVIDIA 驱动
  • 关闭 Secure Boot,或者使用自己的密钥签名这个树外模块
  • 在启用任何修改之前,先记录自己的官方基准测试数据

第 1 步:先测官方状态

运行 diagnostics/bench 中的 CUDA(Compute Unified Device Architecture,计算统一设备架构)指令基准测试,再加一个自己的真实工作负载。记下内核版本、驱动版本和功耗上限。解锁后的测试必须保持这三项完全一致,否则对比结果没有意义。

第 2 步:编译和安装

git clone https://github.com/JustAResearcher/gpu-unlock-ada.git
cd gpu-unlock-ada
make install
Enter fullscreen mode Exit fullscreen mode

make install 会自动识别发行版类型,也支持显式指定目标:make install-arch、make install-deb、make install-rpm。构建过程会通过 HTTPS 下载固定版本的 NVIDIA 610.43.03 输入文件,校验其 SHA-256 哈希,并在本机生成固件。项目不提供预编译固件。安装包会把模块和固件放入 initramfs,确保它在 NVIDIA 绑定显卡之前完成执行。

第 3 步:在内核命令行中显式启用

模块默认不会启用,必须由用户主动选择目标显卡。先用 lspci -D 查找显卡的完整 PCI 地址,然后添加:

gpu_unlock.targets=0000:03:00.0
Enter fullscreen mode Exit fullscreen mode

这里只是示例,必须替换成你自己的地址。对于实验性显卡,需要添加对应的标志,并指定一个精确地址(targets=all 永远不会选中这些型号):

gpu_unlock.targets=0000:01:00.0 gpu_unlock.ad103_experimental=1
gpu_unlock.targets=0000:01:00.0 gpu_unlock.ad106_experimental=1
Enter fullscreen mode Exit fullscreen mode

第一行用于 RTX 4070 Ti SUPER,第二行用于 RTX 4060 Ti 16GB。

第 4 步:冷启动

第一次尝试时,请彻底关闭机器电源,然后重新开机。模块需要显卡处于全新的固件状态,才能在 NVIDIA 驱动加载前完成操作,而普通热重启无法保证这一点。在手动进行冷启动验证前,不要运行 nvidia-smi、CUDA、NVML(NVIDIA Management Library,NVIDIA 管理库)或 nvidia-modprobe,因为这些程序可能按名称加载 NVIDIA 驱动。

第 5 步:确认是否真的解锁成功

journalctl -k -b | grep gpu_unlock
Enter fullscreen mode Exit fullscreen mode

检查日志中是否存在对应显卡的 gpu_unlock: unlocked 信息,以及 payload、selector 和 post-FLR 检查结果。仅仅显示模块已加载,或者 modprobe 执行成功,并不能证明解锁已经生效。如果模块报告固件没有停止,并且正在保留它的 DMA 缓冲区,应当先关机,不要尝试强制卸载模块。

第 6 步:重新运行同一组基准测试

保持内核、驱动和功耗上限完全一致。按照 docs/testing.md 中的测试指南,对比 FP16、BF16、INT8 和 FP32 的结果。对于自己的工作负载而言,只有你自己测出的 GEMM 数据才有参考意义。

如何关闭功能

从内核命令行中删除 gpu_unlock.targets=,也可以在启动加载器的编辑界面中只对本次启动临时删除。删除相关软件包会移除模块以及 initramfs 集成。关机后,显卡会恢复到全新的硬件状态。

常见用途与可直接复制的提示词

  • 在 RTX 4090 上解锁全速 FP16 和 BF16 张量运算
  • 对比官方状态与解锁后的张量吞吐量
  • 测试实验性的 RTX 4070 Ti SUPER 或 4060 Ti 解锁路径

每周一封邮件,精选当周最热门的 AI(人工智能)项目,并附上具体使用方法:订阅 dedupedai.com,免费获取。