Amd Ryzen Logo

Comment arriver à une précision proche des nombres flottant tout en gardant une vitesse d'exécution de type Int8 ? En mettant en commun l'exposant, pardi !

À l’annonce des APU Strix Point d’AMD, nous étions perplexes concernant une des améliorations du NPU : le BlockFP16. En effet, sur ce dernier, la firme a annoncé obtenir à la fois la vitesse d’exécution de l’Int8 et la précision du FP16 : cela ne s’appelle pas de l’optimisation, mais de la magie ! Certes, la chose n’est pas à écarter sachant qu’un CPU est, quelque part, du sable auquel nous avons appris à calculer ; mais, après enquête, la chose est en fait explicable plus simplement : AMD a repris des anciens travaux de Microsoft pour l’implémenter en hardware.

Amd Ryzen Logo

Nous vous l’expliquions dans notre mégadossier IA (page 7 très exactement — comment ça de la pub pour notre dossier, vous dites ?), un des moyens d’alléger la charge de calcul d’un réseau est de transformer les données d’un encodage puissant dit « à virgule flottante » en un encodage bien plus simple entier, une opération nommée quantization… ce qui nécessite cependant un réapprentissage parfois coûteux en temps pour réussir à limiter l’effet de cette dégradation de la précision. En interne, le FP16 est en fait une collection de deux entiers, l’un codant un nombre à virgule nommé mantisse, l’autre un exposant, et le résultat final est la multiplication mantisse x 2^exposant (étendue par un bit codant pour le signe). C’est ce qui rend le calcul compliqué : il faut d’abord jouer sur l’exposant avant de pouvoir triturer les mantisses ensemble.

Microsoft Amd Block Fp16

Un exemple du BlockFP, en utilisant 12 bits

Or, il est venu dans la tête des ingénieurs de la Raymonde en 2020 une idée : le MSFP16. Partant du fait que les exposants sont souvent de valeurs similaires dans des tâches de machine learning, pourquoi ne pas utiliser un seul exposant pour tout un groupe de mantisse ? Le principe est génial : non seulement le calcul est simplifié (il n’y a plus besoin de se soucier de l’exposant dans la plupart des cas), mais le stockage également puisqu’un seul exposant est en mémoire pour toutes les données. Enfin, pas totalement toutes, puisque le partage de l’exposant est limité à un… oui… vous y êtes… bloc ! Dans le cadre d’AMD, ce bloc peut être de 16 ou 32 éléments. L’avantage du bousin ? Être compatible avec la plupart des réseaux sans besoin de réentrainement tant la perte de qualité due au casting en BlockFP16 s'avère en pratique limitée... tout en étant proche de l’Int8 en matière de taille et consommation des unités. Reste à voir à quel point le format se popularisera, que ce soit du côté logiciel (écosystème permettant d’en faire usage, car la conversion demande un minimum de développement) ou côté matériel (i.e. que le format inspire d’autres fabricants). Hardware à suivre !

Double Doc


  • C'est vrai que ça sonnait presque trollesque d'annoncer une précision en FP16 en gardant la rapidité du Int8 😁

  • Correction à faire :

    réentrainement tant "que" la perte de qualité due

2 commentaires

Laissez votre commentaire

En réponse à Some User