GPU Unlock 1.0.0
Ontgrendelen van de FP/BF16-instructiesnelheid op Nvidia 3000-serie kaarten naar professionele equivalenten
Het voordeel van deze vroege kmod-driver is dat handmatige patching niet vereist is telkens wanneer NVIDIA een nieuwe driverversie uitbrengt.
Het effect van deze ontgrendeling is dat de snelheid van het uitgeven van instructies voor FP/BF16 FMA naar FP32-operaties wordt verdubbeld op GA102, GA103, GA104 en GA106 kaarten.
Benchmarkresultaten
3090 Ti dense 8192³ GEMM bij 450 W, medianen van vijf samples met FP32-accumulatie:
| Input | Voor | Na |
|---|---|---|
| FP16 | 87.46 TFLOPS | 118.39 TFLOPS |
| BF16 | 87.50 TFLOPS | 157.41 TFLOPS |
| TF32 | 42.58 TFLOPS | 82.61 TFLOPS |
Geteste kaarten
Onderstaande resultaten zijn gerapporteerd door gebruikers. De module accepteert elke GeForce ID die is vermeld in kernel/gpu_unlock/main.c, maar de onderstaande kaarten zijn de exemplaren waarvoor meldingen zijn binnengekomen.
| Chip | Kaart | PCI ID | Resultaat | BF16 GEMM winst | Rapporten |
|---|---|---|---|---|---|
| GA102 | RTX 3090 Ti | 10de:2203 | Ontgrendeld | +68–80% | #1 |
| GA102 | RTX 3090 | 10de:2204 | Ontgrendeld | +25–67% | #5, #9, #10, #17, #25, #27, #33 |
| GA102 | RTX 3080 Ti 20 GB (OEM, GA102-250) | 10de:2205 | Ontgrendeling voltooid, BF16 blijft op halve snelheid | — | #28 |
| GA102 | RTX 3080 10 GB | 10de:2206 | Ontgrendeld | +70–73% | #14 |
| GA102 | RTX 3080 20 GB (geheugenupgrade) | 10de:2206 | Ontgrendeld | +56–59% | #10, #15 |
| GA104 | RTX 3070 | 10de:2484 | Ontgrendeld | +73–81% | #10, #12 |
| GA104 | RTX 3070 Ti | 10de:2482 | Niet getest met deze module (dezelfde unlock werkte via een UEFI-port op Windows) | — | #32 |
| GA106 | RTX 3060 12 GB | 10de:2504 | Ontgrendeld | ongeveer +80% | #13, #31 |
| GA103 | alle | 10de:2414 | Nog geen rapporten | — | — |
De winsten betreffen de dense GEMM-doorvoersnelheid uit de benchmark van elk individueel rapport, waardoor ze niet direct vergelijkbaar zijn. De stroomlimiet speelt een grote rol: de laagste waarde (+25%) is afkomstig van kaarten die beperkt zijn tot 225 W.
Matrix-intensief werk versnelt, waaronder:
- LLM prefill (+14–36% in #9, #15, #25 en #33)
- Diffusion
- FlashAttention
LLM-decode, dat wordt beperkt door geheugenbandbreedte, en INT8-werk blijven ongeveer gelijk. Rapporten waarin de output werd vergeleken, stelden vast dat deze bit-identiek zijn voor en na de ontgrendeling. Rapporten bestlaan ook configuraties met maximaal vier kaarten in één machine, de kaart die het display aanstuurt, en kaarten die via vfio-pci aan een VM zijn doorgegeven (#17).
Installatie
Eerste keer uitvoeren:
git clone https://github.com/Zagitta/gpu-unlock
cd gpu-unlock
make install
Voeg vervolgens gpu_unlock.targets=all toe aan je kernel-opdrachtregel, waarbij bestaande opties behouden blijven:
- GRUB (Debian/Ubuntu/Mint): voeg het toe aan
GRUBCMDLINELINUX_DEFAULTin/etc/default/gruben voer daarnasudo update-grubuit. - GRUB (Arch/CachyOS): dezelfde bewerking, voer daarna
sudo grub-mkconfig -o /boot/grub/grub.cfguit. - Fedora/RHEL: voer
sudo grubby --update-kernel=ALL --args="gpu_unlock.targets=all"uit. - systemd-boot: voeg het toe aan de options-regel in je boot-entry (
bootctl statustoont de locatie). - UKI / gegenereerde entries: voeg het toe aan
/etc/kernel/cmdlineen regenereer je boot-images/entries (bijv.sudo mkinitcpio -Pvoor mkinitcpio UKI's).
Lokale build
Elke build downloadt de vastgelegde NVIDIA/CachyOS-inputs via HTTPS, controleert hun SHA-256 en genereert firmware uitsluitend in de build-directory en het binaire pakket. Alle drie de formaten installeren via dezelfde make install-* targets. Pakketten worden gebouwd vanaf de committed HEAD.
Bouw, installeer build-afhankelijkheden en installeer de pakketten in één stap (vraagt om sudo-wachtwoord):
make install(detecteert de distributie en selecteert een 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 install)
make install gebruikt /etc/os-release (ID, daarna ID_LIKE) om Arch, Debian/Ubuntu of Fedora/RHEL/CentOS families te detecteren. De RPM-installer vereist DNF. Voor andere distributies kan een expliciet target hierboven worden geselecteerd.
make arch, make deb en make rpm bouwen alleen. Debian- en RPM-pakketten gaan naar build/deb en build/rpm. De NVIDIA-inputs worden gecachet in ~/.cache/gpu-unlock/inputs (make inputs; overschrijf met INPUTS=).
Omdat dpkg-buildpackage zelf nooit het netwerk gebruikt, heeft een clean-chroot build (sbuild of pbuilder) GPUUNLOCKINPUTS nodig die naar die cache wijst. Het make dist archief, het Debian-bronpakket en de .nosrc.rpm bevatten geen NVIDIA-archieven of gegenereerde firmware.
Boot-proces en opt-in
De pakketten plaatsen gpu_unlock en de bijbehorende firmware in de initramfs en laden deze daar, voordat NVIDIA een kaart kan binden:
- mkinitcpio:
/etc/mkinitcpio.conf.d/zz-gpu-unlock.confvoegtgpuunlockdirect vóórnvidiainMODULESin, zodat een displaykaart zo kort mogelijk blank blijft. Zondernvidiain het image wordt het als laatste geladen, maar nog steeds vóór eennvidiadie vanaf het root-bestandssysteem wordt geladen. Images worden bij installatie herbouwd. mkinitcpio negeert drop-ins voor een image die is gebouwd met-c <config>of een presetconfig; plaatsgpu_unlockin dat geval zelf direct vóórnvidiain deMODULESvan die config. - initramfs-tools:
/usr/share/initramfs-tools/modules.d/gpu-unlock.conf. - dracut:
/usr/lib/dracut/dracut.conf.d/gpu-unlock.conf.
Bij initramfs-tools en dracut wordt de module gebouwd voor elke geïnstalleerde kernel die headers heeft; deze images worden herbouwd bij installatie en verwijdering. Later geïnstalleerde kernels krijgen de module en een nieuw image via de eigen install-hooks van de kernel.
Er is geen softdep nvidia pre: regel: kmod respecteert alleen de eerste softdep nvidia regel die het leest, dus regels van andere pakketten (nvidia-utils, gddr6_hwmon) zouden deze stilzwijgend overschrijven, of andersom.
De module doet niets tenzij de kernel-opdrachtregel dit activeert:
gpu_unlock.targets=all(elke ongebonden GA102/GA103/GA104/GA106 kaart)gpu_unlock.targets=0000:21:00.0(alleen deze kaarten)gpu_unlock.targets=0000:21:00.0,0000:22:00.0(komma-gescheiden)
Adressen zijn volledige PCI-namen zoals lspci -D ze print (hexadecimale cijfers in beide schrijfwijzen), onafhankelijk van GPU-nummering en display-rol. Een vermelding die geen GA102/GA103/GA104/GA106 kaart is, inclusief alle gemengde adressen, wordt gelogd en genegeerd.
De kaarten worden gelijktijdig ontgrendeld (ongeveer een seconde voor alle aanwezige kaarten), en elk afzonderlijk: een kaart die al gebonden is of is uitgeschakeld, wordt overgeslagen. Bus mastering die door de board-firmware is ingeschakeld (Supermicro X11 doet dit ongeacht de option ROM en bus master instellingen) wordt eerst gewist; een kaart die door een andere driver is geïnitialiseerd, wordt nog steeds geweigerd. Daarna laadt nvidia en bindt elke kaart zoals gebruikelijk.
De displaykaart werkt ook. De firmware-framebuffer (de boot-console en Plymouth) blijft draaien terwijl de firmware-stappen van de unlock worden uitgevoerd, en wordt verwijderd vlak voor de reset van de kaart, zoals nvidia-drm een moment later sowieso zou doen. Het scherm is blank vanaf die reset tot nvidia-drm het overneemt.
Het handmatig laden van de module na het opstarten heeft geen effect op een kaart die door nvidia is gebonden.
Slaapstand en hervatten: Suspend to RAM schakelt de kaarten uit, wat de snelheidselectoren reset. Na het hervatten ontgrendelt de module elke kaart die bij het opstarten is ontgrendeld, voordat nvidia deze hervat: de suspend-notifier draait vlak vóór degene waarmee nvidia zijn kaarten hervat (NVregUseKernelSuspendNotifiers=1, de standaard in huidige drivers; nvidia-resume.service draait nog later). Dit voegt ongeveer een seconde toe aan het hervatten. Een kaart die stroom behield, zoals bij suspend-to-idle, blijft ontgrendeld en wordt alleen gelezen. Een kaart die NVIDIA al heeft hervat, of die is gebonden aan een andere driver, blijft zoals hij is, en het logboek vermeldt waarom. Voeg gpuunlock.resume=0 toe aan de kernel-opdrachtregel, of schrijf 0 naar /sys/module/gpu_unlock/parameters/resume, om dit uit te schakelen. Hibernatie wordt niet ondersteund.
Resultaat controleren
Controleer het resultaat met:
journalctl -k -b | grep gpu_unlock
lspci -nnk -s 0000:21:00.0
Om de ontgrendeling te stoppen, verwijder je gpu_unlock.targets= uit de kernel-opdrachtregel; voor een eenmalige boot verwijder je dit in het bewerkingsscherm van de bootloader. Het verwijderen van de pakketten verwijdert ook de module en de initramfs drop-ins.
Als de firmware op een kaart nooit stopt, logt de module dit en behoudt hij de DMA-buffers die de firmware mogelijk nog gebruikt tot de volgende stroomonderbreking. Schakel de stroom uit voordat je het opnieuw probeert.
Licenties
De kernelmodule en lokale packaging zijn GPL-2.0-only. De gegenereerde payload is afgeleid van de vastgelegde CMP-referentie; NVIDIA-firmware blijft onder haar eigen voorwaarden. Zie firmware/NOTICE.md en licenses/ voor attributie en mededelingen.
Groetjes,