Un module open source débloque le BF16 des RTX 30 et gagne près de 80 % de puissance

Open source illustration: hands joining branches to a shared node tree

Le projet open source gpu-unlock, publié sur GitHub par le développeur Zagitta, a rassemblé environ 8 100 étoiles et plus de 850 forks en une semaine environ. Ce qu’il fait est très précis : il lève la limitation de débit des instructions FP16/BF16 des Tensor Cores sur les cartes GeForce RTX 30, sans reflasher le VBIOS et sans modifier le pilote de NVIDIA.

Les GeForce de génération Ampere ne tournent qu’à demi-vitesse sur les multiplications matricielles à entrées en demi-précision et accumulation FP32. L’objectif de gpu-unlock est de doubler le débit d’émission de cette instruction, sur les quatre puces GA102, GA103, GA104 et GA106.

Comment ça fonctionne

gpu-unlock est un module du noyau Linux. Son auteur le décrit comme la combinaison de la technique V67/PLM du déverrouilleur de cartes de minage CMP et du moment d’intervention des solutions UEFI précédentes, « avant le chargement du pilote ». Le module réalise le déverrouillage avant que le pilote NVIDIA ne prenne la main sur la carte, écrit le sélecteur de vitesse, puis effectue une réinitialisation au niveau fonction (FLR).

L’avantage tient au faible coût de maintenance. Ce n’est ni un programme UEFI ni un pilote patché : à chaque nouvelle version du pilote NVIDIA, l’utilisateur n’a pas à repatcher.

Les conditions de test de la RTX 3090 Ti données par l’auteur sont un GEMM dense de 8192³, 450 W de consommation, une accumulation FP32 et la médiane de cinq mesures :

Précision d’entréeAvant déverrouillageAprès déverrouillage
FP1687,46 TFLOPS118,39 TFLOPS
BF1687,50 TFLOPS157,41 TFLOPS
TF3242,58 TFLOPS82,61 TFLOPS

Les gains en BF16 rapportés par les utilisateurs varient selon la carte : de 73 % à 81 % pour la RTX 3070, de 70 % à 73 % pour la 3080 10 Go, environ 80 % pour la 3060 12 Go, entre 25 % et 67 % pour la 3090, la valeur la plus basse venant d’une carte plafonnée à 225 W. Ces chiffres proviennent des propres benchmarks de chaque contributeur et ne sont pas directement comparables.

Sur des charges de travail réelles

Les étapes riches en calcul matriciel accélèrent nettement : le préremplissage de l’inférence des grands modèles afficherait un gain de 14 % à 36 %, et les modèles de diffusion ainsi que FlashAttention en profitent aussi. La génération token par token des grands modèles est limitée par la bande passante de la VRAM et les charges INT8 empruntent un autre chemin : ces deux cas restent globalement inchangés. Les utilisateurs ayant comparé les sorties indiquent que les résultats de calcul sont identiques au bit près avant et après le déverrouillage.

Les « près de 80 % de puissance en plus » relèvent donc surtout du pic théorique. Pour un usage quotidien de chat avec un grand modèle en local, le changement le plus sensible est la lecture plus rapide des longs prompts ; la vitesse d’affichage du texte varie peu. Aucun test indépendant n’existe pour l’instant sur l’effet éventuel sur la fréquence d’images dans les jeux.

Pour les adeptes des cartes d’occasion en Chine

Dans le milieu chinois du déploiement local, les 3090 d’occasion et les 3080 20 Go à mémoire modifiée ont toujours été des choix au bon rapport qualité-prix. Le tableau de compatibilité du projet comporte justement une ligne « RTX 3080 20 Go (mémoire modifiée) » avec un gain rapporté de 56 % à 59 %, ce qui montre que les cartes modifiées profitent aussi de ce déverrouillage.

Le frein se situe côté système. Le module ne prend en charge que Linux, propose des paquets pour les familles Arch, Debian/Ubuntu et Fedora, et doit être activé explicitement dans les paramètres de démarrage du noyau ; le charger manuellement après le démarrage ne sert à rien. Les utilisateurs de Windows ne peuvent se tourner que vers les portages UEFI de la communauté : la 3070 Ti, par exemple, n’a été validée que par cette voie.

L’auteur énumère aussi pas mal de limites :

  • Après une mise en veille en RAM, la carte est de nouveau déverrouillée, ce qui prend environ 1 seconde de plus ; l’hibernation n’est pas prise en charge ;
  • La carte reliée à l’écran devient brièvement noire pendant la réinitialisation du déverrouillage ;
  • Sur certaines cartes dont le firmware ne s’arrête pas, il faut d’abord couper l’alimentation puis réessayer ;
  • Sur la 3080 Ti OEM, le BF16 reste à demi-vitesse après déverrouillage, et aucun retour n’existe pour le GA103.

Le projet est publié en open source sous licence GPL-2.0. Le README ne dit rien de l’éventuel impact de la modification de la limitation d’usine sur la garantie, et NVIDIA n’a pour l’instant pas réagi publiquement ; ceux qui comptent l’essayer sur leur machine principale devront peser le risque eux-mêmes.

Sources : README du projet gpu-unlock, GameApps.hk, CocoLoop ; les données du dépôt GitHub ont servi à vérifier les étoiles et les forks, et le tableau de benchmarks du README à vérifier les TFLOPS et les fourchettes de gain par modèle.