行业动态 › 正文

2026-10-26本地实测 · 硬件调优

3090 解锁 A-B 实录:BF16 从 77.5 到 108.3 TFLOPS,pp2048 只动 0.6%

这是一份完整技术记录:开源项目 gpu-unlock v1.0.0 在另一台自有主机(i9-12900H 笔记本 + 外置 RTX 3090,Ubuntu 26.04)上的实施、验证与边界。三组 A-B 测下来结论很清楚——稠密 BF16 矩阵乘实测 108.3 TFLOPS(原厂上限约 77.5,+40%),而 27B 量化 GGUF 推理的 prefill +0.6%、挖矿算力 129.5 → 129.5 TH/s 一动不动。解锁是真的,收益只落在一条精度路径上。

一、先交代口径:这台机器、这个工具、三组测量的边界

本文所有数字都来自本机命令输出,没有估算、没有转述替代实测。被解锁对象是 gpu-unlock v1.0.0(GitHub 用户 Zagitta,GPL-2.0-only,2026-10-18 发布),它移除的是 NVIDIA 在 GeForce Ampere 显卡上对「FP16/BF16 输入 + FP32 累加」Tensor Core 运算的指令发射速率限制。主机与工具链如下:

  • 主机:HASEE CV15S 笔记本,i9-12900H 平台,Ubuntu 26.04,内核 7.0.0-38-generic,initramfs 生成器为 dracut 110-11ubuntu0.1(不是 initramfs-tools)
  • 驱动:NVIDIA 615.71.09(KMD)+ CUDA UMD 13.4,与上游作者验证环境版本一致;Secure Boot 已关闭
  • 目标卡:GPU1 = GA102 GeForce RTX 3090,10de:2204,BDF 0000:02:00.0;GPU0 = AD107M RTX 4060 Laptop(不参与本次操作)
  • GEMM 口径:torch 2.13.0+cu130,8192×8192×8192,20 次迭代取均值,显存 P-state 解锁(9751 MHz),停矿,功耗墙 350 W
  • llama.cpp 口径:CUDA 后端 build d59d455fd,Qwen3.8-27B-Uncensored-Q5_K_M(18.18 GiB,-ngl 99),同一台机、同一组参数、显存 P-state 均解锁
  • 挖矿口径:PeakMiner 2.19.2 → herominers,显存锁 810 MHz、核心锁 1560 MHz,功耗 243~249 W、温度 66~67 °C

二、机制:它改的是「发射速率」,不是加计算单元

gpu-unlock 既不是 UEFI 应用,也不是打补丁的驱动,而是一个在 initramfs 阶段、NVIDIA 专有驱动绑定显卡之前执行的 Linux 内核模块。它的动作分三步:

  • 借道矿卡解锁社区:用 CMP 矿卡解锁(WildFlash1st/cmp90hx-unlock)的 V67/PLM 手法,把改过的 GSP 固件镜像加载进显卡;
  • 写硬件速度选择寄存器:SS0 = 0x88888888(选择完整 BF16 速率),SS1 的 4 位 = 0x8(IMLA4,上游注明效果未验证);
  • 对 PCI 功能执行 FLR(Function Level Reset)复位,然后把卡交还给原版、未修改的 NVIDIA 驱动正常初始化。

这三个动作决定了它的三个特性:不刷 vBIOS(因此不存在砖机风险,也没有「反刷」流程)、不跟着驱动版本重新打补丁(驱动升级不失效)、只管一次启动(内核命令行里没有参数就没有解锁)。

支持范围按设备 ID 放行 GA102 / GA103 / GA104 / GA106 的 GeForce 卡,专业 A 系列与数据中心卡被显式拒绝。上游除 RTX 3090 与 3090 Ti 之外没有实测过其他 GA102 板卡,GA104 一张都没有实测过——所以任何单个成功案例都不能外推到别的型号。

三、实施时间线:从编译到冷启动 13 小时

时间步骤结果
10-25 20:30拉取源码、按当前内核编译模块编译通过(gcc 15.2.0,无源码改动)
10-25 20:32下载 pinned 输入(NVIDIA 源码 + CachyOS nvidia-utils)10.7 秒,SHA-256 全部校验通过
10-25 20:35生成固件载荷4.0 秒,5 个文件,make test 5/5 通过
10-25 20:39采集原厂基线(llama.cpp + 挖矿)pp512 1239.86 / pp2048 1250.51 t/s
10-26 08:42首次安装(--trial)踩坑:initramfs 里 0 条 gpu_unlock
10-26 08:43补装 dracut drop-in 后重装initramfs 内 7 条(模块 + 5 个固件)
10-26 08:44写入一次性 grub 入口并 armnext_entry=gpu-unlock trial
10-26 08:58:45关机 → 开机(冷启动)启动正常,未黑屏、未卡启动
10-26 08:58:48内核日志出现 gpu_unlock: unlocked解锁成功
10-26 09:00稠密 GEMM / llama.cpp / 挖矿 三组 A-B见第五、六节
10-26 09:04参数固化进 /etc/default/grub后续启动自动生效

产物一侧也留了账:gsp_ga10x.bin 84,277,400 B(由 CachyOS 包内原样提取)、booter_load_ga102.bin 61,256 B、gsp_boot_ga102.bin 24,576 B、gsp_boot_desc_ga102.bin 84 B、生成的 V67 签名镜像 v67-ga102-610.43.03.bin 64,000 B,以及 DKMS 编译后 zstd 压缩的 gpu_unlock.ko 35,414 B。固件生成器的 SHA-256 写在 manifest 里,make test 的 5 个用例分别校验打包路径、版本一致性、PKGBUILD 与 manifest 一致、V67 载荷哈希、发布组件清单——全部通过,说明生成的载荷与上游钉住的参考镜像逐字节一致。

四、唯一的坑:这台机的 initramfs 生成器是 dracut

仓库给的是 initramfs-tools 的 drop-in(/usr/share/initramfs-tools/modules.d/),但本机 update-initramfs 实际调用 dracut。第一次安装「成功」,镜像里 gpu_unlock 条目数为 0——装是装完了,但完全不会生效。补装仓库自带的 dracut 配置(force_drivers+=" gpu_unlock ")后重新生成,镜像内出现 7 条:内核模块 + 5 个固件文件 + 目录项,这才算装进去了。

这个坑的教训只有一句:装完必须打开 initramfs 看内容,不能用安装脚本的退出码当证据。

五、硬证据:稠密 GEMM 与内核日志

图 1 是三组 GEMM 的关系:本次实测落在原厂上限与社区最好成绩之间。

8192³ 稠密 BF16 GEMM(TFLOPS) RTX 3090 原厂上限77.5 本次实测(解锁后)108.3 社区最好成绩129.6 口径:本机 350 W 功耗墙、停矿、显存 P-state 9751 MHz,20 次迭代均值;单次迭代 10.15 ms。 社区那份 129.6 TFLOPS 的记录条件未完全公开,本机实测约为其 72%,差值来自功耗墙。 判据:未解锁的 3090 任何情况下都跑不出 108 TFLOPS 的 BF16——原厂上限就在 77.5 附近。
精度本次实测
单位 TFLOPS
3090 原厂上限社区解锁最好成绩相对原厂
fp16108.7~77.5129.6+40%
bf16108.3~77.5129.6+40%
tf3259.6~40.269.8+48%

单次迭代 10.12 ms(fp16)、10.15 ms(bf16)。实测核心只跑到约 1920 MHz、温度 59 °C——不是温度问题,是 350 W 的功率预算问题。

解锁发生在启动第 3 秒,本次启动共 17 行 gpu_unlock 记录。关键三行:

  • gpu_unlock: FWSEC geometry: image_off=0x4289c size=0xe200 imem=0xda00 … ucode=9 signatures=3 versions=0x7 bytes=1152
  • gpu_unlock: FWSEC signature selection: versions=0x7 fuse_version=2 sig_bytes=384
  • pci 0000:02:00.0: gpu_unlock: unlocked

内核会同时打上 taint 标记(loading out-of-tree module taints kernel、module verification failed)——因为 Secure Boot 关闭、模块也没有登记进 MOK,这是预期行为,不代表加载失败。启动后 lspci -nnk -s 02:00.0 仍显示 Kernel driver in use: nvidia,说明复位后原版驱动正常接管。

六、业务负载 A-B:三组全落在噪声里

下表 llama.cpp 三行为同一模型 Qwen3.8-27B-Uncensored-Q5_K_M(-ngl 99);tg128 受 810 MHz 显存锁影响,原厂态未测。

测试项解锁前解锁后变化
pp5121239.86 ± 22.87 t/s1225.72 ± 68.83 t/s−1.1%
噪声内
pp20481250.51 ± 2.22 t/s1258.08 ± 1.01 t/s+0.6%
tg128未测37.40 ± 0.11 t/s新增参考值
PRL 算力
pearlhash
129.5 TH/s129.5 TH/s0
拒绝份额000
挖矿功耗249 W244 W−5 W

为什么一点没涨:量化 GGUF 推理里,Q5_K 这类权重的矩阵乘在 ggml 里走的是 int8 量化 + dp4a 类整数累加,权重照样要按字节从显存流一遍;被解锁的「FP16/BF16 输入 × FP32 累加」这条路径根本没被调用,所以解锁与它无关,解码(tg)本来就受显存带宽约束,更不会动。Pearl 挖矿的 pearlhash 是纯矩阵乘,但走整数 GEMM,INT8 tensor 速率在原厂 3090 上没有被人为砍半,SS0/SS1 对它无效。实测结果与理论判断完全吻合。

七、收益矩阵:哪些负载吃得到,哪些吃不到

负载类型代表场景受益依据与幅度
稠密 BF16 图像生成ComfyUI / SDXL / Flux是社区实测 +47%~59%
稠密 BF16/FP16 训练、微调LoRA、BF16 全参是本次 8192³ GEMM 实测,接近 +40%
TF32 稠密 GEMM科学计算、部分训练框架是本次实测 +48%
量化 GGUF 推理llama.cpp Q4/Q5/Q8否本次 A-B 实测 pp/tg 全平
整数 GEMM 负载PRL / pearlhash否本次 A-B 实测零变化
解码 / token 生成所有自回归推理否
带宽瓶颈
本次 tg128 = 37.4 t/s
游戏 / DLSS 帧数——无证据上游至今无独立帧数验证

同一张表在传闻层面上还有四个必须提前否掉的期待:不是翻倍(只有被解锁的那一条精度路径提速,理论上限 2 倍,实测受功耗墙限制远达不到);不会有 48 GB 显存(24 GB 是 24 颗 1 GB GDDR6X 物理决定的);不存在「解锁 FP8」(Ampere 没有 FP8 硬件单元,没有可解锁对象);不会提升显存带宽(控制器与位宽决定,与本次寄存器无关)。判断标准很简单:被限的是「发射速率」(同一批单元跑得更慢),这类才可能软件解开;「单元本身不存在」或「带宽/容量不够」,任何工具都改不了。

八、运维守则:判断当前这次启动到底有没有解锁,只认一条命令

  • 温重启会静默丢掉解锁。systemctl reboot 之后参数还在命令行上、模块也会跑,但卡不是冷的,模块按设计拒绝执行(already initialised since power on)——系统照常启动、一切看起来正常,实际是原厂状态。
  • 判据只有一条:journalctl -k -b | grep "gpu_unlock: unlocked"。nvidia-smi 里没有任何字段反映这个状态,/proc/cmdline 看着对也不代表生效。
  • 合盖/睡眠是安全的。睡眠会给显卡断电,模块的 resume 钩子(默认开启)会在唤醒时重新解锁一次。
  • 真想重启就「关机再开机」。多花 20 秒,换来的是这一次启动带解锁。
  • 回滚:sudo bash ~/gpu-unlock/rollback-gpu-unlock.sh 会删掉 grub 自定义入口、移除命令行参数、dkms remove 模块、删除固件与 initramfs drop-in,然后重建 initramfs 与 grub;回滚后需冷启动一次才回到原厂行为。

九、风险与遗留项:五条边界,一条未处理的顺带问题

  • 实验性工具。项目发布仅一周余,社区报告十余份,长期稳定性(尤其 GSP 固件在长时间高负载下的行为)没有数据。本机目前验证到的窗口是:解锁后连续跑稠密 GEMM、大模型加载推理、以及数分钟挖矿,无异常。
  • 内核被 taint。加载外部模块会让内核打上 taint 标记,某些内核调试与 NVIDIA 官方支持流程会因此拒绝分析问题;日常使用无影响。
  • 功耗墙是天花板。本卡 350 W 上限决定了只能拿到社区峰值的约 72%;想再往上需要更高功耗墙的板卡或改散热/供电,不在本次范围。
  • 社区个案差异大。有一例 RTX 3080 Ti 20 GB 报告「流程走完但 BF16 无提升」,说明结果依赖具体板卡与固件版本,任何单例都不能外推。
  • 一次性入口会随内核升级失效。自定义 grub 入口里写死的是 7.0.0-38 内核路径,内核升级后这两个菜单项可能指向已被清理的内核文件;默认启动项带参数,不受影响。
  • 顺带的链路问题(未处理)。外置 3090 当前只协商到 PCIe 5.0 GT/s ×4(约 2 GB/s),而卡与 CPU 根端口的能力都是 16.0 GT/s,建议检查 OCuLink 线材/转接卡。这不影响算力(数据都在显存里),只影响加载模型与显存拷贝的速度;窄链路下的固件写入与 FLR 复位没有被上游报告覆盖过,只能靠实机冷启动验证,结果是通过。

机悟的建议:先看你的负载走的是哪条路径,再决定要不要动

这类硬件层面的寄存器解锁,值不值得做,只取决于一个问题——你的主负载走不走浮点稠密 GEMM:

  • 走整数量化路径的一律不用试:量化 GGUF 推理(llama.cpp 的 Q4/Q5/Q8)、整数 GEMM 挖矿,实测全平,装上去只是多背一个内核 taint 和「温重启失效」的运维负担。
  • 出图/微调机值得试:稠密 BF16 的 ComfyUI / SDXL / Flux(社区 +47%~59%)与 LoRA、BF16 全参微调(本次 GEMM 实测接近 +40%)是唯一确定的受益面;先把原厂基线记下来,再用同一批提示词/同一份数据复测,别只看峰值。
  • 客户机房一律不动:实验性内核模块 + 内核 taint + 一次性启动参数,等于把「机器起不来」和「官方支持拒绝分析」两个风险绑在一起。自己的开发机可以接受,交付环境不行。
  • 如果你正在为出图或微调算「加一张卡还是先榨干手里这张」,40 分钟评估里我们把你这台机的实际瓶颈测出来——是算力、带宽还是功耗墙,写成一页纸给你,连复测脚本一起留。

数据来源:本机命令输出(torch 2.13.0+cu130 的 8192³ 稠密 GEMM、llama.cpp CUDA build d59d455fd 的 llm-bench A-B、PeakMiner 2.19.2 同矿池同钱包 A-B、journalctl -k -b 与 lspci 输出,2026-10-25 至 10-26);工具与支持范围引自上游 Zagitta/gpu-unlock 仓库(GPL-2.0-only,v1.0.0,2026-10-18)README 与 issue 区;原厂上限与社区成绩引自上游 README、Notebookcheck(2026-10-24)、Wccftech(2026-10-24)与 TechPowerUp 报道。所有数字均来自本机命令输出,无估算、无转述替代实测;结果只代表该台机器该次冷启动,不可外推到其他板卡。本文为自有设备实测记录,不评判任何企业与产品,不构成投资建议。

返回行业动态列表(共 127 条)→

先测瓶颈,再决定加卡还是调优

40 分钟线上评估:报上卡型、显存与你的主负载(出图、微调还是推理),我们给出「瓶颈在算力、带宽还是功耗墙」的结论,并把复测脚本留给你。

本页可引用 引用或转载请保留来源链接与日期,下面两行可直接复制:
「3090 解锁 A-B 实录:BF16 从 77.5 到 108.3 TFLOPS,pp2048 只动 0.6%」,机悟 JAVIS,2026-10-26,https://jiwu.org.cn/news-2026-10-26-rtx3090-unlock-gemm-ab.html
Markdown:[3090 解锁 A-B 实录:BF16 从 77.5 到 108.3 TFLOPS,pp2048 只动 0.6%](https://jiwu.org.cn/news-2026-10-26-rtx3090-unlock-gemm-ab.html)(机悟 JAVIS,2026-10-26)