Déblocage BF16 des RTX 30 : ComfyUI jusqu'à 60 % plus rapide
Un module noyau Linux open source restaure le débit d'émission FP/BF16 des RTX 30. Sur une 3090 Ti, ComfyUI en BF16 gagne jusqu'à 60 %, l'INT8 ne bouge pas.
Cette famille de cartes porte un bridage logiciel depuis des années : les puces grand public GA102, GA103, GA104 et GA106 exécutent le produit multiply-add fusionné FP/BF16 vers FP32 à la moitié du débit de leurs équivalents professionnels, alors que le silicium est identique. gpu-unlock écrit les sélecteurs de vitesse qui lèvent ce plafond avant le chargement de nvidia, de sorte que le reste de la pile fonctionne sans modification.
Ce que le module modifie
Le projet combine deux approches antérieures : la technique V67/PLM du débloqueur CMP, et le timing pré-pilote de la méthode UEFI. Concrètement, avant que le pilote NVIDIA ne s'attache à une carte, le module écrit le sélecteur de vitesse SS0 0x88888888, qui sélectionne le taux BF16 complet, et le SS1 4 bits 0x8 pour IMLA4, puis effectue un FLR et quitte. Ce n'est ni une application UEFI ni un pilote corrigé, et c'est précisément la propriété que son auteur met en avant : il n'y a aucun correctif à rétablir à chaque nouvelle version de pilote livrée par NVIDIA.
Le README énonce l'effet sans détour : le module double le taux d'émission des instructions FMA FP/BF16 vers FP32 sur ces quatre familles de puces. Le module ne fait rien tant que la ligne de commande du noyau ne l'active pas avec gpu_unlock.targets=, soit all, soit une liste d'adresses PCI ; les cartes sont débloquées simultanément en une seconde environ, quel que soit leur nombre.
À quoi ressemblent les chiffres
La mesure de référence du projet est un GEMM dense 8192³ sur une RTX 3090 Ti à 450 W, avec des médianes sur cinq échantillons et une accumulation FP32 :
Le BF16 passe de 87,5 à 157,4 TFLOP/s et le TF32 de 42,6 à 82,6, soit quasiment un doublement, tandis que le FP16 progresse moins, de 87,5 à 118,4. Le README décrit le changement comme un doublement du taux d'émission des FMA FP/BF16 vers FP32 sans détailler les chiffres par type de données ; le tableau publié est donc la seule mesure de cette répartition.
Les rapports de compatibilité des utilisateurs, rassemblés dans le README du référentiel, couvrent le reste de la pile :
| Carte | Résultat | Gain GEMM BF16 |
|---|---|---|
| RTX 3090 Ti | Débloquée | +68 à 80 % |
| RTX 3090 | Débloquée | +25 à 67 % |
| RTX 3080 10 Go | Débloquée | +70 à 73 % |
| RTX 3080 20 Go | Débloquée | +56 à 59 % |
| RTX 3070 | Débloquée | +73 à 81 % |
| RTX 3060 12 Go | Débloquée | environ +80 % |
| RTX 3080 Ti 20 Go (OEM) | Déblocage terminé, BF16 reste à la moitié du taux | aucun |
| RTX 3070 Ti | Non testée avec ce module | aucun |
Le README précise clairement que ces chiffres proviennent du benchmark propre à chaque rapport et ne sont pas directement comparables. La limite de puissance est le principal facteur de confusion : le chiffre le plus bas, +25 % sur une 3090, vient d'une carte plafonnée à 225 W.
Mesuré dans ComfyUI
Le test utile pour ce site n'est pas le GEMM mais la génération. Un propriétaire indépendant de RTX 3090 Ti, u/under-_-null, a exécuté les mêmes graphes avec les pilotes d'origine et débloqués, et publié la durée médiane par image ou par clip : jusqu'à 60 % plus rapide sur les pipelines BF16, et quasiment inchangé en INT8.
| Modèle et précision | D'origine | Débloqué | Gain |
|---|---|---|---|
| MOSS-Image SFT BF16 | 71,98 s | 45,40 s | +58,6 % |
| Qwen-Image 2.1 Turbo BF16 | 8,51 s | 5,41 s | +57,2 % |
| Z-Image Turbo BF16 | 6,79 s | 4,35 s | +56,1 % |
| checkpoint FLUX.1 dev FP8 | 31,96 s | 20,66 s | +54,6 % |
| Krea 2 Turbo BF16 | 15,65 s | 10,70 s | +46,3 % |
| MiniMax H3 BF16 (vidéo et audio) | 253,27 s | 158,05 s | +60,2 % |
| LTX-2.5 distilled BF16 (vidéo et audio) | 70,81 s | 60,63 s | +16,8 % |
| MOSS-Image SFT INT8 | 27,31 s | 27,23 s | +0,3 % |
| Qwen-Image 2.1 Turbo INT8 | 3,92 s | 3,75 s | +4,6 % |
| MiniMax H3 INT8 ConvRot | 155,07 s | 118,21 s | +31,2 % |
Deux choses ressortent. Les gains se concentrent sur le travail en BF16, là où le taux d'émission compte ; les chemins de quantification INT8 sont presque intacts, donc un utilisateur qui exécute déjà des checkpoints INT8 ConvRot gagne quelques pour cent, pas 60. MiniMax H3 en INT8 ConvRot fait exception avec 31 %, bien au-dessus des autres lignes INT8 du même rapport.
La fidélité de sortie tient : le même rapport a comparé 150 exécutions d'images fixes débloquées et d'origine, et a trouvé des pixels RVB décodés identiques. D'autres rapports de compatibilité du référentiel vont dans le même sens, ce qui est cohérent avec une modification du taux d'émission plutôt que de la précision.
Exigences et risques
Les détails qui comptent avant de l'essayer, tous issus de la documentation du projet :
- Linux uniquement. Le module se compile avec les en-têtes du noyau installés et s'installe via mkinitcpio, initramfs-tools ou dracut, avec des cibles de paquets Arch, Debian et Fedora.
- Activation carte par carte.
gpu_unlock.targets=alldébloque toutes les cartes GA10x non attachées ; sinon, listez les adresses PCI telles quelspci -Dles affiche. Les cartes déjà initialisées par un pilote sont refusées. - Démarrage à froid. Charger le module à la main après le démarrage n'a aucun effet sur une carte que
nvidiaa déjà attachée. - Gestion de la mise en veille. Les sélecteurs de vitesse sont réinitialisés lors d'une coupure d'alimentation, le module débloque donc à nouveau au réveil via un notificateur de mise en veille, sauf si
gpu_unlock.resume=0le désactive. L'hibernation n'est pas prise en charge. - Les cartes d'affichage fonctionnent, avec la console éteinte depuis la réinitialisation jusqu'à ce que
nvidia-drmprenne le relais. - Toutes les cartes ne répondent pas. La RTX 3080 Ti 20 Go OEM termine le déblocage mais conserve le BF16 à la moitié du taux, et aucun rapport n'existe encore pour GA103.
Un projet communautaire distinct, impacifist/Windows-GPU-UNLOCK, porte la technique vers une approche UEFI pour les utilisateurs de Windows. Il ne fait pas partie du projet d'origine et n'a pas été testé ici.
Disponibilité
- Module : Zagitta/gpu-unlock, version 1.0.0 dans le référentiel, avec le tableau de compatibilité et le code d'extraction du firmware.
- Fils de benchmark : discussion sur le déblocage des RTX 30 et le rapport ComfyUI sur RTX 3090 Ti.
- Portage Windows : impacifist/Windows-GPU-UNLOCK.
Commentaires
Connectez-vous avec GitHub pour rejoindre la discussion.