Quel format de quantification utiliser, en pratique.
Une stack de serving demande un format de nombres avant toute autre chose, et la réponse fait varier votre facture mensuelle d’un facteur huit. Le format aux poids les plus légers n’est pas toujours celui qui donne le modèle le plus petit.
En bref
- La règle empirique
- Les poids rétrécissent exactement selon le ratio indiqué dans le nom — BF16 / FP16 2 B/param · FP8 1 B/param · 4-bit (AWQ, GPTQ) 0.5 B/param. Rien d’autre ne rétrécit.
- Ce que cela vaut
- Qwen 3 32B demande NVIDIA A100 PCIe à $1,091 par mois à pleine précision, et NVIDIA L4 à $125 en 4-bit. Même modèle, même contexte.
- Le piège
- Le cache clef/valeur ne suit pas la baisse des poids. À 128k de contexte, un Llama 3.3 70B en 4 bits représente 53 % de cache et seulement 47 % de poids.
- Où le 4 bits perd nettement
- Llama 3.1 8B à 128k demande 23.0 GB en 4-bit contre 18.4 GB en FP8 — plus de mémoire, pour une moins bonne qualité
Commencez ici
La majeure partie de cette page est du calcul, voici donc la conclusion en premier. Quatre questions déterminent le format, posées dans cet ordre parce que chacune peut à elle seule clore la discussion.
Le modèle tient-il déjà en pleine précision, avec de la place pour votre contexte ? Faites-le tourner en BF16 et arrêtez de lire. La quantification est une façon d’acheter une machine plus petite, et vous en avez déjà acheté une qui fonctionne. Il n’y a aucune récompense à compresser un modèle qui tient déjà.
Votre contexte est court et votre modèle grand ? C’est là que le 4 bits mérite sa réputation. Les poids dominent la mémoire, et les réduire au quart revient presque à réduire la machine au quart.
Votre contexte est long et votre modèle petit ? Utilisez FP8, sur une carte qui le prend en charge. FP8 divise par deux le cache aussi bien que les poids, et au-delà d’une certaine longueur, c’est cette seconde division par deux qui compte — le tableau ci-dessous indique le point exact où il dépasse le 4 bits.
Servez-vous une seule personne sur une seule machine ? GGUF via Ollama demande de loin le moins de travail, et le débit auquel vous renoncez est un débit qu’un lecteur unique n’allait de toute façon jamais utiliser.
Tout ce qui suit explique pourquoi ces quatre réponses sont ce qu’elles sont, et vous donne les chiffres pour les vérifier sur votre propre modèle plutôt que sur le nôtre. Si vous n’avez pas encore déterminé de combien de mémoire votre modèle a besoin, ce calcul fait l’objet d’un guide séparé, à consulter en premier.
Trois formats, quatre noms
Il n’existe que trois formats numériques d’usage courant pour le service, et ils ne diffèrent que par une chose : le nombre d’octets que coûte chaque paramètre. Tout le reste — AWQ, GPTQ, GGUF, bitsandbytes — est une méthode pour produire l’un de ces trois formats, pas un quatrième.
| Format | Octets par poids | Octets par élément de cache | À quoi ça sert |
|---|---|---|---|
| BF16 / FP16 | 2 | 2 | Qualité de référence |
| FP8 | 1 | 1 | Proche de la référence, Hopper et Blackwell |
| 4-bit (AWQ, GPTQ) | 0.5 | 2 | Poids minimaux, cache toujours en FP16 |
Lisez les deux colonnes numériques comme une paire. Elles sont égales sur les deux premières lignes et elles ne sont pas égales sur la troisième, et cette seule asymétrie explique la plupart des surprises plus loin sur cette page.
Les quatre noms que vous rencontrerez réellement dans un dépôt de modèle correspondent à ce tableau comme suit.
AWQ et GPTQ
Deux voies vers la même destination en 4 bits. AWQ détermine quels poids comptent en observant les activations et les protège ; GPTQ compresse couche par couche et corrige l’erreur au fur et à mesure. Les deux produisent un checkpoint que vLLM et SGLang chargent directement, et sur un modèle donné, l’écart entre eux est plus petit que l’écart entre l’un ou l’autre et le 16 bits.
GGUF
La famille llama.cpp, ce qu’Ollama utilise en interne. C’est un conteneur plutôt qu’une méthode unique : un seul fichier contient les poids à l’une ou l’autre d’une douzaine de précisions, et il déborde les couches vers la RAM système quand la carte est trop petite. Imbattable pour un utilisateur sur une machine, et le plus faible des trois en concurrence réelle.
FP8
Moins un format de checkpoint qu’un mode. Donnez à une stack de serving des poids en 16 bits, et elle les convertira en FP8 au chargement, sans téléchargement séparé ni passe de calibration. C’est le seul des quatre qui puisse aussi compresser le cache, ce qui explique pourquoi il apparaît plus loin là où on ne l’attend pas.
BF16 et FP16
Les poids tels que les auteurs les ont publiés, et la référence à laquelle chaque autre ligne est comparée. Deux octets par paramètre, aucun jeu de calibration, aucun support de kernel à vérifier, aucun débat de qualité à avoir. Quand cela tient, c’est la bonne réponse et le reste de cette page est une distraction.
Demander chacun d’eux se résume à un flag. Ce sont les mêmes options que celles que le guide vLLM détaille longuement ; le propos ici est seulement de montrer à quel point la différence entre elles est mince.
# 1. Reference. The weights as published, nothing to prepare.
$ vllm serve meta-llama/Llama-3.3-70B-Instruct --dtype bfloat16
# 2. FP8, quantised while it loads. No second download, no calibration.
# --kv-cache-dtype is the half everyone forgets: it is what
# halves the CACHE as well as the weights.
$ vllm serve meta-llama/Llama-3.3-70B-Instruct \
--quantization fp8 --kv-cache-dtype fp8
# 3. Four-bit AWQ. A DIFFERENT checkpoint, prepared by someone else.
$ vllm serve casperhansen/llama-3.3-70b-instruct-awq \
--quantization awq_marlin
# 4. Four-bit GPTQ. Same idea, different repository and flag.
$ vllm serve TechxGenus/Llama-3.3-70B-Instruct-GPTQ \
--quantization gptq_marlin
La moitié qui ne rétrécit pas
Quantifier les poids en 4 bits ne quantifie pas le cache clef/valeur. AWQ et GPTQ compressent les poids, et seulement les poids ; le cache reste en 16 bits sauf si vous demandez séparément un cache FP8, ce que la plupart des gens ne font jamais sur un checkpoint 4 bits. C’est la troisième colonne du tableau ci-dessus, et c’est la raison pour laquelle le calcul ci-dessous ne se déroule pas comme on pourrait s’y attendre.
La conséquence se voit le plus facilement sur un seul modèle. Voici Llama 3.3 70B, en 4 bits, à chaque longueur de contexte que propose le configurateur — poids contre cache.
| Contexte | Poids | Cache clef/valeur | Part de cache |
|---|---|---|---|
| 4k tokens | 35.0 GB | 1.3 GB | 3 % |
| 8k tokens | 35.0 GB | 2.5 GB | 7 % |
| 32k tokens | 35.0 GB | 10.0 GB | 22 % |
| 128k tokens | 35.0 GB | 40.0 GB | 53 % |
La colonne des poids ne bouge jamais — c’est tout l’intérêt de les quantifier. La colonne du cache croît linéairement avec le contexte jusqu’à ce que, sur la dernière ligne, elle dépasse le modèle auquel elle appartient.
Poussez suffisamment loin, et le 4 bits cesse purement et simplement de gagner. FP8 divise par deux les deux moitiés ; le 4 bits divise par quatre une moitié et laisse l’autre intacte. Il existe donc, pour chaque modèle, une longueur de contexte où les deux se croisent, et elle survient d’autant plus tôt que le modèle est petit — car un petit modèle a peu de poids à économiser, pour la même croissance de cache par token.
| Modèle | 4k | 8k | 32k | 128k |
|---|---|---|---|---|
| Llama 3.1 8B | 5.2 | 5.8 | 9.2 | 23.0 |
| Qwen 3 32B | 19.5 | 20.7 | 27.6 | 55.2 |
| Llama 3.3 70B | 41.7 | 43.1 | 51.7 | 86.3 |
Chiffres en gigaoctets, pour le plus léger des deux formats, avec le perdant indiqué en dessous. Lisez de gauche à droite et observez l’avantage de la colonne 4 bits s’amenuiser à mesure que le contexte grandit.
La dernière ligne garde son avance partout, car 70 milliards de paramètres représentent un poids considérable à économiser. La ligne du milieu se termine à égalité parfaite : à 128k, Qwen 3 32B coûte exactement le même prix dans les deux formats, et vous choisiriez le FP8 pour la qualité. Et la première ligne s’inverse complètement at 128k, où le 4 bits demande plus de mémoire que le FP8 tout en étant le moins fidèle des deux. Cette combinaison — plus de mémoire et une sortie moins bonne — est l’erreur de quantification la plus courante que nous observons, et elle est invisible si vous ne regardez jamais que la taille du fichier de poids.
Ce que votre carte peut réellement faire
FP8 est d’abord une fonctionnalité matérielle avant d’être logicielle. Une carte dont les tensor cores ne le prennent pas en charge chargera quand même un checkpoint FP8 — la stack déballe les poids en 16 bits avant la multiplication — mais vous ne conservez que le gain sur le téléchargement, sans aucun gain de vitesse, et un cache FP8 ne vous est pas du tout accessible. Le 4 bits, c’est l’inverse : il fonctionne partout, car les poids sont de toute façon déballés en 16 bits avant le calcul.
| Génération | Cartes que nous louons | FP8 |
|---|---|---|
| Ampere | NVIDIA RTX A6000 48GB, NVIDIA A100 PCIe 40GB, NVIDIA A100 PCIe 80GB, NVIDIA A100 SXM4 80GB | Aucune en matériel — déballé en 16 bits |
| Ada Lovelace | NVIDIA L4 24GB, NVIDIA RTX 4090 24GB, NVIDIA L40S 48GB | Dans les tensor cores — poids et cache |
| Hopper | NVIDIA H100 PCIe 80GB, NVIDIA H100 SXM5 80GB, NVIDIA H200 SXM5 141GB | Dans les tensor cores — poids et cache |
| Blackwell | NVIDIA RTX 5090 32GB, NVIDIA B200 SXM6 180GB | Dans les tensor cores — poids et cache |
Cette colonne décrit le silicium, ce qui n’est pas tout à fait la même question que celle de savoir où le FP8 est une bonne idée. La note du catalogue elle-même, en regard du format, nomme Hopper and Blackwell, et c’est une remarque qui porte sur les piles de service plutôt que sur les cœurs tensoriels : ce sont les générations sur lesquelles les kernels FP8 et les caches FP8 ont eu le plus d’usage et le moins de surprises. Ada Lovelace le fera tourner. Hopper et Blackwell sont là où nous placerions un déploiement qui en dépend.
Encore une chose à savoir avant de choisir une carte. Llama 3.3 70B en FP8 à 8k nécessite 81.9 GB, et une carte de 80 GB — entre autres la NVIDIA A100 PCIe — en manque de 1.9 GB. Pas assez pour sauter aux yeux sur un tableur, mais largement assez pour échouer sur la machine. La carte qui s’en sort seule est celle du niveau au-dessus, et le configurateur vous dira laquelle avant de payer plutôt qu’après.
Ce que cela apporte en vitesse
Générer un token signifie lire une fois les poids actifs en mémoire. Moins d’octets par poids signifie moins d’octets à lire, ce qui signifie plus de tokens par seconde — et sur un flux unique sans traitement par lots, cette relation est quasiment linéaire, car la carte n’a rien d’autre à attendre. C’est le même plafond de bande passante mémoire que divise le guide du coût par token, et il est délibérément prudent. Ci-dessous, il est appliqué à un modèle assez petit pour tourner sur chaque machine à une seule carte que nous louons, afin que le format et la carte puissent être lus sur le même tableau.
| Carte | Bande passante | BF16 / FP16 | FP8 | 4-bit (AWQ, GPTQ) |
|---|---|---|---|---|
| NVIDIA L4 | 300 GB/s | ~ 8 tok/s | ~ 17 tok/s | ~ 34 tok/s |
| NVIDIA RTX A6000 | 768 GB/s | ~ 22 tok/s | ~ 43 tok/s | ~ 86 tok/s |
| NVIDIA L40S | 864 GB/s | ~ 24 tok/s | ~ 49 tok/s | ~ 97 tok/s |
| NVIDIA RTX 4090 | 1008 GB/s | ~ 28 tok/s | ~ 57 tok/s | ~ 113 tok/s |
| NVIDIA A100 PCIe | 1555 GB/s | ~ 44 tok/s | ~ 87 tok/s | ~ 175 tok/s |
| NVIDIA RTX 5090 | 1792 GB/s | ~ 50 tok/s | ~ 101 tok/s | ~ 202 tok/s |
| NVIDIA A100 PCIe | 1935 GB/s | ~ 54 tok/s | ~ 109 tok/s | ~ 218 tok/s |
| NVIDIA H100 PCIe | 2000 GB/s | ~ 56 tok/s | ~ 113 tok/s | ~ 225 tok/s |
Llama 3.1 8B sur une carte, un flux à la fois. Chaque machine listée le contient dans les trois formats, si bien que les lignes sont comparables aussi bien horizontalement que verticalement — et le ratio entre les trois colonnes est le même sur chaque ligne, car il est fixé par les octets par poids et rien d’autre.
Deux précautions pour lire ce tableau. La première est qu’il décrit une seule requête à la fois, et presque personne ne sert une seule requête à la fois : avec le traitement par lots continu, les poids sont lus une seule fois pour tout le lot, si bien que c’est l’arithmétique plutôt que la mémoire qui devient la limite, et l’écart entre les colonnes se resserre. La seconde est que la déquantification a un coût. Les poids en 4 bits doivent être décompressés avant d’être multipliés, et sur un petit modèle à faible taille de lot, cette décompression peut absorber une part visible de ce que la lecture réduite vous a fait gagner. La direction du tableau est fiable ; les multiples exacts ne sont pas une promesse.
Ce que cela vous coûte
C’est la partie du sujet où il faut se méfier des chiffres assurés, y compris les nôtres. L’erreur de quantification dépend bien davantage du modèle que de la méthode, et les comparaisons publiées se contredisent entre elles parce qu’elles mesurent des modèles différents sur des tâches différentes. Ce que l’on peut dire honnêtement, c’est la tendance générale.
FP8 est assez proche pour ne pas prêter à controverse. C’est toujours un format à virgule flottante — un exposant et une mantisse, avec moins de bits pour chacun — et non la grille d’entiers sur laquelle un checkpoint 4 bits doit être mappé avec des échelles par groupe. C’est pourquoi il se dégrade si progressivement, et pourquoi il ne nécessite aucune passe de calibration. La plupart des équipes l’adoptent sans faire d’évaluation, et la plupart s’en sortent bien.
Le 4 bits est un compromis réel, et il ne joue pas de façon uniforme. Le score moyen aux benchmarks bouge généralement très peu. Ce qui bouge, c’est la traîne : les longues chaînes de raisonnement, le calcul exact, les langues rares, les formats de sortie stricts. Un modèle qui obtient toujours un bon score sur une suite à choix multiples peut se mettre à fermer incorrectement du JSON.
Les modèles plus gros l’absorbent mieux. Le 4 bits sur un 70B est un déploiement courant. Le 4 bits sur un 8B, dont chaque paramètre porte davantage d’information, est là où la dégradation se remarque — et, d’après le tableau ci-dessus, là où il rapporte le moins.
Les données de calibration comptent plus que le nom de la méthode. AWQ et GPTQ compressent tous deux par rapport à un corpus d’échantillon. Un checkpoint calibré sur de la prose anglaise et utilisé pour du code sera moins bon que ce que la méthode mérite, et aucun tableau de benchmark ne vous le dira.
Ce qui mène à la seule recommandation de cette page qui ne relève pas de l’arithmétique : faites tourner les deux. Vous louez une machine avec accès root et rien n’y est facturé au compteur, donc servir deux fois le même modèle sur deux ports et y envoyer vous-même une centaine de prompts coûte une soirée et tranche la question pour votre usage plutôt que pour celui de quelqu’un d’autre. C’est une réponse nettement meilleure que n’importe quel tableau, celui-ci compris — et c’est pourquoi nous préférons vous montrer la formule plutôt qu’un score.
Quelle machine cela implique
La raison pour laquelle tout cela compte, c’est la facture. Voici la machine la moins chère de notre catalogue qui contient chaque modèle entier à 8k de contexte, dans chacun des trois formats — entier signifiant sur une seule carte, sans le répartir, car un modèle réparti sur plusieurs cartes fait entrer l’interconnexion en jeu, et c’est un autre guide.
| Modèle | BF16 / FP16 | FP8 | 4-bit (AWQ, GPTQ) |
|---|---|---|---|
| Llama 3.1 8B | NVIDIA L4 | NVIDIA L4 | NVIDIA L4 |
| Qwen 3 32B | NVIDIA A100 PCIe | NVIDIA RTX A6000 | NVIDIA L4 |
| Llama 3.3 70B | 4 × NVIDIA B200 SXM6 | 4 × NVIDIA H200 SXM5 | NVIDIA RTX A6000 |
À 8k de contexte, sur les machines que nous louons réellement. Quand une cellule nomme plusieurs cartes, il s’agit du plus petit nœud dans lequel la carte est livrée, et non d’un modèle réparti : les cartes les plus grosses sont vendues par quatre et par huit, donc le moyen le moins cher d’éviter de répartir un 70B en pleine précision est d’en acheter quatre et de n’en utiliser qu’une seule. C’est exactement la facture que la quantification existe pour éviter.
Deux réflexes font la différence entre bien utiliser ce tableau et se faire piéger par lui. Dimensionnez au contexte que vous ferez réellement tourner, pas au maximum du modèle — le second tableau de cette page montre ce qui arrive à ceux qui confondent les deux. Et vérifiez le format par rapport à la carte avant de commander, pas après : NVIDIA RTX A6000, NVIDIA A100 PCIe et NVIDIA A100 SXM4 ne peut pas vous donner les chiffres du FP8, quelle que soit l’option que vous passiez. Le configurateur indique la mémoire requise et si elle tient sur une seule carte, pour chaque nœud et chaque format, avant tout paiement. Si ce que vous évaluez, c’est la location par rapport au paiement d’une API au jeton, ce seuil de rentabilité est calculé séparément, et la quantification le déplace largement en faveur du matériel.
Vérifiez le format et la machine ensemble.
Le configurateur indique ce dont votre modèle a besoin à chaque précision, et quels nœuds le contiennent sur une seule carte, avant que vous ne payiez quoi que ce soit.
Autres guides
- Dimensionnement · 10 min
Faire tourner un modèle à mélange d’experts
Le nombre total de paramètres décide de la machine, les actifs de la vitesse. Ce qu’il faut en VRAM pour DeepSeek V3 et Qwen 3 235B, et quel nœud louer.
Lire le guide - Coût · 6 min
Quand la location mensuelle l’emporte sur l’horaire
Le seuil de rentabilité sur des chiffres réels, les trois coûts qu’un prix horaire cache jusqu’à la facture, et le piège du temps mort qui triple une estimation.
Lire le guide - Coût · 9 min
L’auto-hébergement contre une API facturée au token
Le seuil de rentabilité entre payer une API au token et louer un GPU, calculé sur nos propres prix et débit — et les quatre points que l’arithmétique laisse de côté.
Lire le guide