nlzy/turing-unlock

Unlock full speed FP16 tensor core of NVIDIA Turing GPUs

这是什么?

一个 Linux 内核模块,用于解锁 NVIDIA TU102 GPU(RTX 2080 Ti 中的芯片)上的全速 FP16 张量核心。

它做什么?

默认情况下,GPU 以降低的速度运行其张量核心。此模块将两个硬件速度选择器(SS0 和 SS1)写入特定值,并释放固件互斥锁(ACR 互斥锁 3)。之后,GPU 正常启动,但张量核心现在可以以最大额定速度运行。

它是如何工作的?

该模块直接操作底层 GPU 寄存器。它将 SS0 设置为 0x88888888,SS1 设置为 0x8,然后释放固件锁。这是在 GPU 启动过程中、NVIDIA 驱动加载之前完成的。该模块仅适用于 TU102 芯片(如 RTX 2080 Ti),并且仅在 Dell RTX 2080 Ti 22GB 上使用 NVIDIA 驱动 575.51.03(专有和开源驱动)测试过。

安装

在项目目录中运行 make install。它会自动检测你的 Linux 发行版并构建/安装相应的包。你也可以强制指定包类型:

  • make install-arch 用于 Arch
  • make install-deb 用于 Debian/Ubuntu
  • make install-rpm 用于 Fedora/RHEL

如果只想构建包而不安装,使用 make arch、make deb 或 make rpm。构建会下载两个 NVIDIA 固件文件(带有固定版本和 SHA-256 校验),并缓存到 ~/.cache/turing-unlock/inputs。你可以用 make inputs 预下载它们,或用 INPUTS= 更改缓存目录。

启用解锁

该模块默认不做任何事。你必须添加一个内核命令行选项来告诉它要解锁哪些 GPU。使用 turing_unlock.targets=all 解锁所有兼容的显卡,或指定 PCI 地址(例如 turing_unlock.targets=0000:21:00.0)。你可以用逗号分隔多个地址。用 lspci -D 获取完整的 PCI 地址。

将选项添加到你的引导加载程序配置(GRUB、systemd-boot、UKI 等)并重启。启动后,用 journalctl -k -b | grep turing_unlock 检查内核日志,看看是否成功。

启动顺序

安装包将模块及其固件放入 initramfs,以便在 NVIDIA 驱动之前加载。模块会跳过已有驱动或已断电的显卡。它还处理多张 TU102 显卡的情况(它们一次运行一个)。如果需要,它会在 NVIDIA 驱动绑定之前执行 PCIe 重置(FLR)。成功时,显卡不会被重置;失败时,可能会发生重置,导致屏幕空白,直到显示驱动接管。

性能

README 包含 RTX 2080 Ti 在 250W 下 FP16 矩阵乘法(带 FP32 累加)的基准测试结果。数字显示解锁后速度大幅提升,有时超过 NVIDIA 声称的理论峰值(56.9 TFLOPS)。例如,在矩阵大小 2048 时,性能从 55.7 TFLOPS(峰值的 97.9%)提升到 91.4 TFLOPS(峰值的 160.6%)。

风险和警告

README 明确警告:“张量核心功耗非常高。解锁到全速可能会损坏你的硬件。使用风险自负。”此外,如果 GPU 固件没有正确停止,模块会记录错误并保留 DMA 缓冲区,直到下次断电。重试前应关闭机器电源。

许可证

模块和打包代码为 GPL-2.0-only。NVIDIA 固件文件保留其自己的许可证(见 firmware/NOTICE.md 和 licenses/)。

相关

  • 项目
  • 项目
  • 项目
  • 项目