veilletech.fr
25 oct. Feed du jour
#05 LLM Article

gpu-unlock : BF16 jusqu'à +81 % sur les RTX série 30

Le prefill y gagne, le décodage attend toujours la mémoire.

Un module noyau Linux sous GPL, gpu-unlock, lève la limite de débit des instructions FP16 et BF16 sur les cartes Nvidia GA102, GA103, GA104 et GA106 (RTX série 30) avant que le pilote ne les prenne. Sur une 3090 Ti, le BF16 passe de 87,5 à 157,4 TFLOPS ; le prefill d'un LLM gagne 14 à 36 % selon les rapports d'utilisateurs, le décodage ne bouge pas.

3 min de lectureavancévidéo 1:20
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. Les mesures
  3. Comment s'y prendre
  4. Limites et précautions
  5. À retenir

Ce qui se passe

Le dépôt Zagitta/gpu-unlock (version 1.0.0) publie un module noyau Linux qui double le débit d'émission des instructions FP16 et BF16 vers des opérations FP32 sur les puces GA102, GA103, GA104 et GA106, soit les RTX série 30, jusqu'au niveau de leurs équivalents professionnels. Il reprend la technique V67/PLM de l'outil CMP et la fait tourner avant le pilote : il écrit les registres de vitesse (SS0 0x88888888 pour le plein débit BF16, SS1 0x8), puis réinitialise la carte (FLR) avant que le pilote Nvidia ne la prenne. Ce n'est ni une application UEFI ni un pilote patché, donc rien à reprendre à chaque version du pilote.

Les mesures

Sur une 3090 Ti à 450 W, produit matriciel dense 8192³, médianes de cinq échantillons, accumulation FP32 :

Entrée Avant Après
FP16 87,46 TFLOPS 118,39 TFLOPS
BF16 87,50 TFLOPS 157,41 TFLOPS
TF32 42,58 TFLOPS 82,61 TFLOPS

Les retours d'utilisateurs, avec chacun son banc d'essai, donnent un gain BF16 qui dépend de la carte et de sa limite de puissance (+25 % pour des cartes bridées à 225 W) :

Carte ID PCI Résultat
RTX 3090 Ti 10de:2203 débloquée, +68 à +80 %
RTX 3090 10de:2204 débloquée, +25 à +67 %
RTX 3080 10 Go 10de:2206 débloquée, +70 à +73 %
RTX 3080 20 Go (mémoire modifiée) 10de:2206 débloquée, +56 à +59 %
RTX 3080 Ti 20 Go (OEM, GA102-250) 10de:2205 déblocage terminé, BF16 reste à demi-débit
RTX 3070 10de:2484 débloquée, +73 à +81 %
RTX 3070 Ti 10de:2482 non testée avec ce module (déblocage via UEFI réussi sous Windows)
RTX 3060 12 Go 10de:2504 débloquée, environ +80 %
GA103 (toute carte) 10de:2414 aucun retour

Pour un LLM : le prefill gagne de 14 à 36 % dans quatre rapports, ainsi que la diffusion et FlashAttention. Le décodage, borné par la bande passante mémoire, et le calcul INT8 restent identiques ; les sorties comparées étaient identiques bit à bit avant et après.

Comment s'y prendre

Terminal
git clone https://github.com/Zagitta/gpu-unlock
cd gpu-unlock
make install

make install détecte la distribution (Arch, Debian/Ubuntu, Fedora/RHEL), télécharge les entrées Nvidia épinglées, contrôle leur SHA-256 et génère le firmware en local. Le module s'insère dans l'initramfs avant nvidia, mais ne fait rien sans option sur la ligne de commande du noyau :

TEXT
gpu_unlock.targets=all
gpu_unlock.targets=0000:21:00.0,0000:22:00.0

La seconde forme vise des cartes par adresse PCI complète (lspci -D). Sous Debian ou Ubuntu, l'ajouter dans GRUB_CMDLINE_LINUX_DEFAULT de /etc/default/grub puis sudo update-grub ; sous Fedora ou RHEL : sudo grubby --update-kernel=ALL --args="gpu_unlock.targets=all". Vérifier :

Terminal
journalctl -k -b | grep gpu_unlock
lspci -nnk -s 0000:21:00.0

Pour arrêter, retirer le paramètre. Après une mise en veille en RAM, le module rejoue le déblocage (environ une seconde de plus à la reprise ; gpu_unlock.resume=0 le désactive) ; l'hibernation n'est pas couverte.

Limites et précautions

Source : GitHub — Zagitta/gpu-unlock, README consulté le 25 octobre 2026. Source en anglais.