Avancé7 min de lectureMis à jour
Faire tourner l'IA sur un processeur : quantification, ONNX et pourquoi les petits modèles gagnent
Pas toujours besoin d'un GPU. Comment la quantification int8, ONNX Runtime et la bonne taille font répondre un modèle en millisecondes sur CPU.
Pourquoi la vitesse compte
Une API de modération de discussions doit répondre pendant que l'utilisateur regarde encore l'écran : quelques centaines de millisecondes au plus. Les GPU sont rapides mais chers ; les serveurs ordinaires ont des processeurs. Rendre un modèle rapide sur CPU, c'est ce qui rend un service de modération abordable.
Ce que calcule un modèle
Un réseau de neurones, c'est surtout des multiplications de matrices : les nombres qui représentent le texte sont multipliés par les poids du modèle, couche après couche. La vitesse dépend du nombre de multiplications (la taille du modèle et la longueur du texte) et de la rapidité de chacune.
La quantification
Les poids sont normalement stockés en nombres à virgule flottante de 32 bits. La quantification les stocke en entiers de 8 bits (int8), avec un facteur d'échelle par ligne ou par canal :
| Format | Taille d'un modèle de 560 millions de paramètres | Vitesse typique sur CPU |
|---|---|---|
| float32 | environ 2,2 Go | référence |
| int8 | environ 0,6 Go | souvent 2 à 4 fois plus rapide |
Les processeurs modernes ont des instructions qui multiplient beaucoup de nombres de 8 bits à la fois (VNNI, AVX-512, Intel AMX) : c'est de là que vient la vitesse.
Le prix est une infime perte de précision. Avec la quantification dynamique par canal, un bon classificateur ne perd en général presque rien de mesurable, mais les scores se décalent légèrement. C'est pourquoi il faut réaligner les seuils après la quantification : chaque seuil est déplacé pour que le modèle quantifié signale la même part de messages que l'original sur un jeu de calibration.
ONNX et ONNX Runtime
ONNX est un format ouvert pour enregistrer un modèle comme un graphe d'opérations, indépendamment du framework qui a servi à l'entraîner. ONNX Runtime exécute ce graphe et il est optimisé pour les processeurs : il fusionne les opérations, utilise tous les cœurs et choisit les instructions les plus rapides disponibles.
Un exemple réel
VigiMod 1.2.1 compte environ 560 millions de paramètres. Sur 4 cœurs de processeur :
| Version | Temps par paire message–catégorie |
|---|---|
| Pleine précision | environ 113 ms |
| ONNX int8 | environ 32 ms (3,5 fois plus rapide) |
Après réalignement des seuils, la perte de qualité mesurée sur les données de validation était inférieure à 0,005 de F1, dans le bruit.
D'autres astuces
- Des entrées plus courtes : limitez le contexte aux derniers messages utiles.
- Le traitement par lots : notez plusieurs messages à la fois quand ils arrivent ensemble.
- Mettre en cache la partie fixe de l'entrée (par exemple une longue politique) dans les modèles qui le permettent.
- Un modèle plus petit, de meilleures données : un petit modèle entraîné sur les bons exemples bat souvent un grand modèle généraliste, pour une fraction du coût.
Quand il faut vraiment un GPU
Pour l'entraînement, et pour faire tourner de très grands modèles qui génèrent de longues réponses. Une conception courante est la cascade : un petit modèle rapide sur chaque message, un plus grand seulement sur les rares cas incertains.
Testez-vous
Répondez aux questions, puis vérifiez vos réponses.
Continuer à apprendre
- Comment les modèles de langage lisent le texte : tokens, embeddings et attentionDébutant · 7 min de lecture
- Qu'est-ce qu'un classificateur de texte et comment décide-t-il ?Débutant · 6 min de lecture
- Données d'entraînement et étiquettes : un modèle ne vaut que ses exemplesIntermédiaire · 6 min de lecture
Voyez-le sur de vrais messages
Essayez la démo en direct ou lisez comment fonctionne l'API.