Avec Bitnet Microsoft ouvre la voie de l'Inférence CPU
Les grands modèles de langage (LLM) ont révolutionné le traitement du langage naturel, mais ils présentent un inconvénient majeur : ils consomment une quantité massive de ressources informatiques et d'énergie, rendant leur déploiement coûteux et finalement peu accessible pour de nombreux utilisateurs, notamment dans le domaine de l'embarqué. Il y a donc énormément de recherches aujourd'hui pour résoudre ce problème et rendre l'IA plus légère à l'entraînement, mais surtout à l'utilisation, dans sa phase d'inférence.
C'est dans ce domaine que Bitnet.cpp, un nouveau framework open-source développé par Microsoft, promet de rendre l'inférence des LLMs plus rapide et plus efficace, même sur des CPU classiques.
Les défis de l'inférence des LLMs
Les LLMs, de par leur taille croissante (parfois plus de 100 milliards de paramètres), nécessitent des infrastructures basées sur de puissantes unités de calcul matriciel (GPU, TPU, etc.). Ces systèmes consomment non seulement une énergie énorme, mais limitent aussi le déploiement des LLMs en local, sur des appareils à faible puissance.
En sortie d'entraînement, les modèles utilisent des nombres en virgule flottante de 16 bits (FP16). À partir de là, le calcul est simple : pour faire tourner un modèle LLaMA de 70 milliards de paramètres, il faut 2 octets par paramètre, soit 140 Go de mémoire vidéo, ce qui les rend inaccessibles en inférence sur des machines standards qui disposent au mieux d’un GPU équipé de 8 à 16 Go de VRAM, et au pire, d'aucun GPU.
Une des approches "traditionnelles" pour faire tourner un gros LLM sur une petite infrastructure est la quantification du modèle après entraînement. Cette technique consiste à prendre le modèle après l'entraînement et à réduire la taille des poids en les stockant non plus en 16 bits flottants, mais en les diminuant à 8 bits flottants, voire même 8 ou 4 bits en entiers. Cette méthode, popularisée avec l'arrivée du premier modèle LLaMA de Meta, a donné d'excellents résultats, mais elle entraîne souvent une perte de précision et de performance. C’est là qu’intervient Bitnet.cpp.
Bitnet.cpp : bien plus qu'une simple nouvelle méthode de quantisation
Bitnet.cpp repose sur BitNet, une architecture de transformeurs en 1-bit, développée pour maximiser l’efficacité des modèles tout en maintenant des performances compétitives. La clé de cette technologie est d'utiliser des poids binarisés et des activations quantifiées, permettant de réduire drastiquement la mémoire nécessaire et l’énergie consommée lors de l’inférence.
Mais surtout, contrairement aux méthodes de quantification traditionnelles qui sont appliquées après l’entraînement des modèles (ce qui peut causer une perte de précision), BitNet intègre une approche de quantization-aware training (QAT) qui permet au réseau de s'entraîner en tenant compte de la future quantification. Cela permet aux modèles de s’adapter et de converger en considérant les limites imposées par la faible précision, garantissant ainsi une meilleure performance et une stabilité accrue.
Le résultat est un modèle quantification où un poids n'occupe plus que 1,58 bits en moyenne. Pour reprendre notre petit calcul, un modèle de 70 milliards de paramètres qui pèse 140 Go en FP16 ne pèserait plus qu'environ 13 Go, ce qui peut tenir dans une carte graphique grand public. En réduisant de manière aussi significative la taille des modèles, Bitnet.cpp permet également d'exécuter les modèles à des vitesses raisonnables sur des configurations matérielles plus légères, même sans GPU.
Performances impressionnantes sur CPU
Selon les tests de Microsoft, un LLM de 100 milliards de paramètres peut être exécuté sur un simple CPU Apple M2 à une vitesse comparable à celle de la lecture humaine, soit environ 5 à 7 tokens par seconde. Ce développement ouvre de nouvelles possibilités pour des déploiements locaux ou même sur des appareils mobiles, sans avoir besoin d’un GPU dédié.
Les tests menés avec Bitnet.cpp montrent des résultats impressionnants en termes de performance et d'économie d’énergie. Voici quelques chiffres clés :
- Sur les CPU ARM : Bitnet.cpp offre des gains de vitesse allant jusqu'à 5,07x, tout en réduisant la consommation énergétique de 70%.
- Sur les CPU x86 : La technologie atteint une vitesse jusqu’à 6,17x plus rapide avec une réduction de 82,2% de la consommation d'énergie.
Ces performances sont possibles grâce à l’optimisation des noyaux de calcul utilisés par Bitnet.cpp, spécialement adaptés aux architectures ARM et x86. L’objectif est d’assurer une exécution fluide, même sur des machines ne disposant que de CPU, et de maximiser l’efficacité énergétique.
Cas d’utilisation et perspectives futures
Les possibilités offertes par Bitnet.cpp sont vastes. Avec cette technologie, il devient possible de déployer des modèles LLM directement sur des ordinateurs portables ou des appareils IoT, ouvrant la voie à des applications locales de traitement du langage naturel sans avoir recours au cloud. Cela représente non seulement un avantage en termes de coût, mais aussi en matière de confidentialité des données, puisque celles-ci peuvent être traitées directement sur l’appareil.
Par ailleurs, Microsoft prévoit de développer davantage Bitnet.cpp en intégrant prochainement le support des NPU (neural processing units) et GPU, ce qui élargira encore le spectre des appareils compatibles. L’objectif à long terme est de rendre l’inférence de ces modèles accessible sur des configurations matérielles toujours plus légères, tout en maximisant les économies d’énergie.