Québec, Canada

403-1381 1re Avenue

+1 581.849.27.96

bdgouthiere@gmail.com

Faire tenir un modèle de 70 milliards sur une carte moins chère

Ou : comment ranger 141 Go dans 42 sans perdre plus de quelques pour cent de ce qu’il y avait dedans.

La réponse courte : un modèle de 70 milliards de paramètres pèse 141 Go en 16 bits, 73 à 75 Go en 8 bits et environ 40 à 42 Go en 4 bits. La perte de qualité mesurée est quasi nulle en 8 bits, qu’il s’agisse de FP8 ou du format Q8_0 de llama.cpp, et de l’ordre de 2 à 5 % en 4 bits. Autrement dit, la quantisation fait passer un tel modèle de deux H100 à une seule carte de 80 Go, voire à une L40S de 48 Go. Pour un serveur de production, FP8 sur une carte récente ; quand la mémoire manque, AWQ ou GPTQ en 4 bits avec vLLM ; pour un usage personnel, GGUF avec Ollama. C’est souvent ce qui rend rentable un modèle ouvert servi en Europe sur votre propre matériel.

Quantifier, c’est stocker chaque poids du modèle sur moins de bits. En 16 bits, un paramètre occupe deux octets ; en 8 bits, un seul ; en 4 bits, un demi. Les formats se distinguent par la façon de choisir ce qu’on arrondit. GGUF est le format de fichier de llama.cpp, repris par Ollama, avec une gamme de variantes : Q8_0 à 8,5 bits par poids, Q4_K_M à 4,9. AWQ et GPTQ quantifient les poids seuls en 4 bits, en s’appuyant sur un jeu de calibration pour protéger les poids les plus importants. FP8 quantifie poids et activations en 8 bits, et demande une carte Ada ou Hopper pour en tirer toute la vitesse.

La mesure qui compte est la perte de qualité, et elle est mieux documentée qu’on ne le croit. Le README de l’outil de perplexité de llama.cpp mesure Llama 3 8B : la perplexité passe de 6,2332 en 16 bits à 6,2343 en Q8_0, soit 0,04 % d’écart, et à 6,4071 en Q4_K_M, soit 2,8 %. Une étude de plus de 500 000 évaluations sur Llama 3.1 conclut que FP8 est « effectivement sans perte », et que le 4 bits sur les poids seuls rivalise avec le 8 bits en entier.

Pour qui : une équipe qui hésite entre quantifier un modèle ouvert pour le servir elle-même et l’appeler tel quel par une API hébergée en Suisse.

À partir de : 0,20 le million de tokens en entrée et 0,75 en sortie pour Mistral Small 4 chez Infomaniak AI Services, en francs suisses ou en euros hors taxes, sans carte graphique à gérer.

Pour démarrer : activer Infomaniak AI Services pour comparer la version servie du modèle à votre version quantifiée, sur les mêmes prompts.

Quantisation LLM : GGUF, AWQ ou FP8, la mémoire et la qualité

La mémoire d’un modèle de 70 milliards selon le format, en taille de fichier, avant le cache des tokens :

FormatTailleCarte qui suffit, cache compris
16 bits (F16)141 Godeux H100 de 80 Go
Q8_0 (GGUF)75 Goune carte de 80 Go, sans marge
FP873 Goune H100 de 80 Go, sans marge
Q5_K_M (GGUF)50 Goune carte de 80 Go
Q4_K_M (GGUF)42,5 Goune L40S de 48 Go avec un contexte court, une A100 ou une H100
GPTQ 4 bits (W4A16)39,5 Goidem

La qualité ensuite, telle que mesurée sur des modèles de cette taille :

Mesure publiéeRésultat
Llama 3 70B, perplexité en Q8_0+ 0,03 % par rapport au 16 bits
Llama 3 70B, perplexité en Q4_K_M+ 4,8 %
Llama 3.3 70B en FP8, MMLU en français99,7 % du score d’origine
Llama 3.3 70B en GPTQ 4 bits98,3 % du score d’origine selon Red Hat
Qwen2 72B en AWQmoyenne de 80,4 contre 81,3 en 16 bits

Le choix du format dépend moins du modèle que du moteur qui le servira. vLLM charge AWQ, GPTQ et FP8 nativement, GGUF seulement par un module expérimental. Ollama et llama.cpp chargent GGUF. Un détail d’actualité : AutoAWQ, l’outil de référence pour produire des modèles AWQ, est officiellement abandonné depuis 2025 et a été repris par le projet vLLM, dont l’outil llm-compressor produit désormais des modèles en AWQ, GPTQ ou FP8.

La conséquence sur la facture est directe. Llama 3 70B en 16 bits, servi sur quatre H100 PCIe, produit environ 10 tokens par seconde pour un utilisateur ; en Q4_K_M, sur une seule A100 ou H100, il en produit 22 à 25, selon les mesures du dépôt de benchmarks de XiongjieDai. La version quantifiée est plus rapide et coûte quatre fois moins de cartes. Sur une L40S de 48 Go, à 0,79 $ de l’heure en Community Cloud chez Runpod, elle tourne à 15 tokens par seconde.

Mes règles, pour finir. En production avec vLLM sur une carte Ada ou Hopper, FP8, pratiquement sans perte. Quand la mémoire manque, AWQ ou GPTQ en 4 bits, et une vérification sur vos propres prompts. Pour un poste de travail ou un serveur personnel, GGUF en Q4_K_M ou Q5_K_M avec Ollama. Et jamais en dessous de 4 bits pour une tâche où une erreur coûte cher.

La presse réduit le volume de moitié ou des deux tiers. Ce qui s'échappe par les côtés se mesure, et c'est souvent peu.

Si vous servez ensuite le modèle vous-même

Un modèle quantifié se sert avec vLLM ou Ollama sur un GPU loué, et son coût dépend surtout de la charge. Le calcul est dans servir son propre LLM.

Si vous n’avez pas encore choisi le modèle

Quantifier un modèle mal classé en français ne le rend pas meilleur. Les critères de choix, licence comprise, sont dans le meilleur LLM open source selon l’usage.

Si vous préférez ne rien quantifier du tout

Une API sert le modèle dans sa version d’origine ou en FP8, sans carte à gérer. La grille suisse est dans le prix de l’API LLM suisse.