Sujet sous haute tensor

Contrairement aux GPU pour les pros, les GeForce RTX 30 et 40 (au moins) ont un bridage mis en place par NVIDIA sur les performances de certains calculs liés à l’IA. Une « astuce » permet de faire sauter cette limitation et permet presque de doubler les performances dans certains cas. On a testé l’expérience sur une RTX 3070 Ti, avec succès. Voici tous nos résultats.
Sur GitHub, un dépôt fait beaucoup parler de lui depuis ce week-end : gpu-unlock-ada. Sur certaines cartes de la série Ampere (GeForce RTX 30) et Ada (GeForce RTX 40), ce programme promet d’améliorer les performances sur des calculs liés à l’intelligence artificielle. Et pas qu’un peu : le gain grimpe à 100 % dans certains cas.
On « débride » une GeForce RTX 3070 Ti : la théorie avant la pratique
Chez Next, nous avons tenté l’expérience pour comprendre le fonctionnement et mesurer les gains éventuels dans différents scénarios : le calcul brut, la génération d’une image, le speech-to-text ainsi qu’un dialogue avec un LLM. Le tout en local, sur une RTX 3070 Ti. Résultat des courses ? Nous arrivons bien à quasiment x 2 dans certains cas, quand d’autres n’enregistrent aucun changement.
Sans trop entrer dans les détails, le cœur de l’optimisation se trouve sur l’accumulation. Lorsqu’une carte graphique effectue des calculs pour une IA générative, elle multiplie des matrices, ce qui revient à faire des multiplications et des additions. L’accumulation consiste à additionner les différents résultats pour obtenir le total.
C’est un peu comme un ticket de caisse : le nombre d’articles est multiplié par le prix unitaire, puis ajouté au sous-total, etc. Les montants individuels peuvent être faibles, mais le total élevé. En cas d’approximation à répétition, le prix final peut être bien différent du prix réel, d’où l’intérêt d’avoir une plus grande précision.
Les choix de NVIDIA sur les GPU grand public et pour les pros
C’est ce qui se passe avec l’intelligence artificielle générative sur des milliards de paramètres. L’accumulation de millions de calculs donne un nombre élevé, et nécessite donc une précision plus importante. Des poids de neurones sur 16 bits et une accumulation sur 32 bits sont monnaie courante, permettant de limiter les erreurs d’arrondi, surtout quand des milliers de valeurs sont ajoutées.
Dans ce document, NVIDIA annonce que, sur les GeForce, les performances FP16 (16 bits) avec accumulation sur 16 bits sont deux fois plus élevées qu’avec une accumulation sur 32 bits. Cette limitation semble donc être un choix commercial de la part de NVIDIA, pas une impossibilité matérielle.
Dans le même document, on peut voir que les performances des RTX A6000 et A40 sont identiques avec accumulation sur 16 et 32 bits :


Le but du projet du jour est donc de faire sauter ce bridage. Cela passe par plusieurs étapes détaillées dans le dépôt, pour arriver à modifier le paramètre responsable de la division par deux des performances en accumulation sur 32 bits. Afin de mettre en place cette modification, il faut, selon le dépôt GitHub, éteindre la machine et la débrancher pendant 30 secondes. Le but ? Vider complètement les condensateurs et remettre la carte à son état initial. Parfois, un simple reboot suffit (c’était notre cas). Ensuite, au démarrage, le paramètre est modifié.
Plusieurs limitations sont à prendre en compte. Le « patch » tient tant que la machine est allumée. Une fois éteinte, il faut recommencer l’opération (mais le module le fait automatiquement tant qu’il est en place). Ensuite, la manipulation ne fonctionne que sous Linux (des travaux sont aussi en cours pour Windows) et il faut désactiver le Secure Boot. Cette option est utile pour la sécurité car elle protège contre des logiciels malveillants qui essayeraient de s’installer avant le démarrage du système. Autre solution plus complexe : signer le module, mais c’est une autre histoire.






