엔비디아 3000 시리즈 GPU FP/BF16 언락 방법
GPU unlock 1.0.0
Nvidia 3000 카드의 FP/BF16 instruction issue rate를 프로페셔널 카드 수준으로 해제
이 Linux 커널 모듈은 CMP unlocker의 V67/PLM 기법과 UEFI 방식의 드라이버 이전 타이밍을 결합합니다. 이 모듈은 unlock을 수행하고, 속도 셀렉터를 기록한 뒤(SS0 0x88888888는 전체 BF16 rate를 선택하고, 4비트 SS1 0x8 IMLA4) 수정되지 않은 NVIDIA 드라이버가 카드를 바인드하기 전에 FLR을 수행합니다. 이것은 UEFI application도 아니고 패치된 NVIDIA 드라이버도 아닙니다.
이 초기 kmod 드라이버의 장점은 nvidia가 새 드라이버 버전을 릴리스할 때마다 수동 패치가 필요하지 않다는 점입니다.
이 unlock의 효과는 GA102, GA103, GA104, GA106 카드에서 FP/BF16 FMA의 instruction issuing speed를 FP32 연산에 대해 두 배로 높인다는 것입니다.
3090 Ti에서 FP32 accumulation을 사용한 dense 8192³ GEMM, 450 W, 5회 샘플 중앙값:
| 입력 | 이전 | 이후 |
|---|
| FP16 | 87.46 TFLOPS | 118.39 TFLOPS |
|---|---|---|
| BF16 | 87.50 TFLOPS | 157.41 TFLOPS |
| TF32 | 42.58 TFLOPS | 82.61 TFLOPS |
테스트된 카드
사용자들이 보고한 결과입니다. 이 모듈은 kernel/gpu_unlock/main.c에 나열된 모든 GeForce ID를 허용하지만, 아래 카드들은 누군가가 보고한 카드들입니다. 작동 여부와 관계없이 compatibility report로 본인의 결과도 추가해 주세요.
| 칩 | 카드 | PCI ID | 결과 | BF16 GEMM 향상 | 보고서 |
|---|
| GA102 | RTX 3090 Ti | 10de:2203 | 잠금 해제됨 | +68–80% | #1 |
|---|---|---|---|---|---|
| GA102 | RTX 3090 | 10de:2204 | 잠금 해제됨 | +25–67% | #5, #9, #10, #17, #25, #27, #33 |
| GA102 | RTX 3080 Ti 20 GB (OEM, GA102-250) | 10de:2205 | 잠금 해제는 완료되지만, BF16은 절반 속도로 유지됨 | — | #28 |
| GA102 | RTX 3080 10 GB | 10de:2206 | 잠금 해제됨 | +70–73% | #14 |
| GA102 | RTX 3080 20 GB (memory upgrade) | 10de:2206 | 잠금 해제됨 | +56–59% | #10, #15 |
| GA104 | RTX 3070 | 10de:2484 | 잠금 해제됨 | +73–81% | #10, #12 |
| GA104 | RTX 3070 Ti | 10de:2482 | 이 모듈로는 테스트하지 않음(같은 잠금 해제가 Windows의 UEFI 포트에서 동작했음) | — | #32 |
| GA106 | RTX 3060 12 GB | 10de:2504 | 잠금 해제됨 | 약 +80% | #13, #31 |
| GA103 | any | 10de:2414 | 아직 보고된 사례 없음 | — | — |
성능 향상 수치는 각 보고서의 자체 벤치마크를 기준으로 한 dense GEMM 처리량이므로, 서로 직접 비교할 수는 없습니다. 전력 제한이 매우 중요합니다. 가장 낮은 수치(+25%)는 225 W로 제한된 카드에서 나온 것입니다.
행렬 중심 작업은 빨라집니다. LLM prefill(+14–36%, #9, #15, #25, #33), diffusion, FlashAttention이 그렇습니다. 메모리 대역폭에 의해 제한되는 LLM decode와 INT8 작업은 거의 그대로입니다. 출력 비교를 수행한 보고서들은 적용 전후 결과가 비트 단위로 동일했다고 확인했습니다.
보고서는 한 대의 머신에서 최대 네 장의 카드, 디스플레이를 구동하는 카드, 그리고 vfio-pci(#17)로 VM에 패스스루한 카드도 다룹니다.
설치 방법
먼저 실행:
git clone https://github.com/Zagitta/gpu-unlock
cd gpu-unlock
make install그다음 기존 옵션은 유지한 채 gpu_unlock.targets=all을 kernel command line에 추가하세요.
- GRUB (Debian/Ubuntu/Mint):
/etc/default/grub의GRUB_CMDLINE_LINUX_DEFAULT안에 추가한 뒤sudo update-grub를 실행합니다. - GRUB (Arch/CachyOS): 동일하게 수정한 뒤
sudo grub-mkconfig -o /boot/grub/grub.cfg를 실행합니다. - Fedora/RHEL:
sudo grubby --update-kernel=ALL --args="gpu_unlock.targets=all"를 실행합니다. - systemd-boot: 부팅 항목의
options줄에 추가합니다(bootctl status에서 위치를 확인할 수 있습니다). - UKI / generated entries:
/etc/kernel/cmdline에 추가하고 부팅 이미지/항목을 다시 생성합니다(예: mkinitcpio UKI의 경우sudo mkinitcpio -P).
로컬 빌드
모든 빌드는 고정된 NVIDIA/CachyOS 입력을 HTTPS로 다운로드하고, SHA-256을 검사한 다음, 빌드 디렉터리와 바이너리 패키지에만 펌웨어를 생성합니다. 세 가지 형식 모두 동일한 make install-* 타깃을 통해 설치됩니다. 패키지는 커밋된 HEAD에서 빌드됩니다.
빌드, 빌드 의존성 설치, 패키지 설치를 한 번에 수행합니다( sudo 비밀번호를 묻습니다).
make install # detect the distribution and select an installer
make install-arch # makepkg -sif
make install-deb # apt-get build-dep, dpkg-buildpackage, apt-get install
make install-rpm # dnf builddep, rpmbuild, dnf installmake install은 /etc/os-release의 (ID, 그다음 ID_LIKE)를 사용해 Arch, Debian/Ubuntu, Fedora/RHEL/CentOS 계열을 감지합니다. RPM 설치 프로그램은 DNF가 필요합니다. 다른 배포판에서는 위의 호환되는 명시적 타깃을 선택하세요.
make arch, make deb, make rpm은 빌드만 수행합니다. Debian 및 RPM 패키지는 build/deb와 build/rpm에 생성됩니다. NVIDIA 입력은 ~/.cache/gpu-unlock/inputs에 캐시됩니다(make inputs; INPUTS=로 재정의 가능). dpkg-buildpackage 자체는 네트워크를 전혀 사용하지 않으므로, 깨끗한 chroot 빌드(sbuild 또는 pbuilder)에서는 해당 캐시를 가리키는 GPU_UNLOCK_INPUTS가 필요합니다. make dist 아카이브, Debian source package, .nosrc.rpm에는 NVIDIA 아카이브나 생성된 펌웨어가 포함되지 않습니다.
부팅 흐름 및 opt-in
패키지는 gpu_unlock과 해당 펌웨어를 initramfs에 넣고, nvidia가 카드를 바인드하기 전에 그곳에서 로드합니다:
- mkinitcpio:
/etc/mkinitcpio.conf.d/zz-gpu-unlock.conf는MODULES에서nvidia바로 앞에gpu_unlock을 넣어, 디스플레이 카드가 가능한 한 짧은 시간 동안만 비어 있게 합니다. 이미지에nvidia가 없으면gpu_unlock은 맨 뒤로 가고, 여전히 루트 파일시스템에서 로드된nvidia보다 먼저 실행됩니다. 이미지는 설치 시 재빌드됩니다. mkinitcpio는-c <config>로 빌드한 이미지나 프리셋_config에 대한 drop-in을 무시하므로, 해당 config의MODULES에gpu_unlock을nvidia바로 앞에 직접 넣어야 합니다. - initramfs-tools:
/usr/share/initramfs-tools/modules.d/gpu-unlock.conf. - dracut:
/usr/lib/dracut/dracut.conf.d/gpu-unlock.conf.
initramfs-tools와 dracut에서는 헤더가 설치된 모든 커널에 대해 모듈이 빌드되며, 해당 커널의 이미지는 설치 시와 제거 시 다시 빌드됩니다. 나중에 설치된 커널은 커널 고유의 install hook을 통해 모듈과 새 이미지를 받습니다.
softdep nvidia pre: 규칙은 없습니다. kmod는 읽은 softdep nvidia 줄 중 첫 번째만 따르므로, 다른 패키지의 규칙(nvidia-utils, gddr6_hwmon)이 이를 조용히 덮어쓸 수 있고, 반대로 이것이 그들의 규칙을 덮어쓸 수도 있습니다.
이 모듈은 커널 명령줄에서 사용하도록 지정하지 않으면 아무 일도 하지 않습니다:
gpu_unlock.targets=all # every unbound GA102/GA103/GA104/GA106 card
gpu_unlock.targets=0000:21:00.0 # only these cards
gpu_unlock.targets=0000:21:00.0,0000:22:00.0 # comma-separated주소는 lspci -D가 출력하는 전체 PCI 이름이며(16진수는 대소문자 모두 가능), GPU 번호와 디스플레이 역할과는 무관합니다. all과 주소가 섞인 경우를 포함해 GA102/GA103/GA104/GA106 카드가 아닌 항목은 로그에 남기고 무시합니다. 카드들은 동시에 잠금 해제되며, 모두 합쳐도 대략 1초 정도 걸리고, 각각 독립적으로 처리됩니다. 이미 바인딩되었거나 전원이 꺼진 카드는 건너뜁니다. 보드 펌웨어가 켜 둔 버스 마스터링은 먼저 해제됩니다(Supermicro X11은 옵션 ROM과 버스 마스터 설정이 어떻든 이 동작을 합니다). 이미 어떤 드라이버가 초기화한 카드는 여전히 거부됩니다. 그런 다음 nvidia가 로드되어 평소처럼 모든 카드에 바인딩됩니다.
디스플레이 카드도 정상 동작합니다. 잠금 해제의 펌웨어 단계가 실행되는 동안에는 펌웨어 프레임버퍼(부팅 콘솔과 Plymouth)가 계속 동작하며, 카드의 리셋 직전에 제거됩니다. 이는 어차피 조금 뒤에 nvidia-drm이 할 일과 같습니다. 그 리셋부터 nvidia-drm이 제어를 넘겨받을 때까지 화면은 비어 있습니다.
부팅 후에 모듈을 수동으로 불러도 nvidia가 바인딩한 카드에는 아무 일도 하지 않습니다.
RAM으로의 일시 중단은 카드의 전원을 꺼서 속도 선택기를 초기화합니다. 재개 후에는 모듈이 부팅 시 잠금 해제했던 모든 카드를 다시 잠금 해제한 뒤 nvidia가 재개합니다. 즉, 이 모듈의 suspend notifier가 nvidia가 카드를 재개할 때 사용하는 notifier보다 조금 먼저 실행됩니다(NVreg_UseKernelSuspendNotifiers=1, 현재 드라이버의 기본값이며, nvidia-resume.service는 그보다 더 나중에 실행됩니다). 이로 인해 재개에 약 1초가 추가됩니다. suspend to idle처럼 전원이 유지되는 카드는 여전히 잠금 해제된 상태이며 읽기만 수행합니다. nvidia가 이미 재개했거나 다른 드라이버에 바인딩된 카드는 그대로 유지되며, 로그에 그 이유가 기록됩니다. 이 기능을 끄려면 커널 명령줄에 gpu_unlock.resume=0을 추가하거나, /sys/module/gpu_unlock/parameters/resume에 0을 쓰면 됩니다. 최대 절전 모드는 지원하지 않습니다.
다음으로 결과를 확인합니다:
journalctl -k -b | grep gpu_unlock
lspci -nnk -s 0000:21:00.0잠금 해제를 중지하려면 커널 명령줄에서 gpu_unlock.targets=를 제거하세요. 한 번만 부팅할 경우에는 부트로더 편집 화면에서 삭제하면 됩니다. 패키지를 제거하면 모듈과 initramfs drop-in도 함께 제거됩니다.
카드의 펌웨어가 결코 멈추지 않으면, 모듈은 이를 기록하고 펌웨어가 다음 전원 차단 전까지 계속 사용할 수 있는 DMA 버퍼를 유지합니다. 다시 시도하기 전에 전원을 껐다 켜세요.
커널 모듈과 로컬 패키징은 GPL-2.0-only입니다. 생성된 페이로드는 고정된 CMP 레퍼런스에서 파생되며, NVIDIA 펌웨어는 자체 조건에 따릅니다. 저작자 표기와 고지는 firmware/NOTICE.md와 licenses/를 참고하세요.
지원해 주세요
GPU를 더 살 수 있게 도와주세요 <3
ZagittaHelp me buy GPUs :DETH: 0xf4eee937937f92038D70B16AbD7736D8a53a1c5c
BTC: bc1qwpkwp70fn76z3s4kg2l9y3j4kst95twcznuugf
SOL: 8Rih6HY7V4LcdjYHz4iSffT4fTniqw5CACaBigSVxNYu
출처
- 원문: https://github.com/Zagitta/gpu-unlock (2026-10-25 · github.com)