NOUVEAU - Intelligence Artificielle

Quantization : GPTQ, GGUF, AWQ

Comprendre et choisir le bon format de quantization pour vos LLM : comparatif technique entre GPTQ, GGUF et AWQ avec benchmarks et guide pratique

Ayi NEDJIMI 13 février 2026 24 min de lecture Niveau Avancé

Table des Matières

1 Introduction à la Quantization

Les Large Language Models (LLM) ont transformé le paysage de l'intelligence artificielle, mais leur déploiement reste un défi majeur en termes de ressources matérielles. Un modèle comme Llama 3 70B en précision FP16 occupe environ 140 Go de VRAM, nécessitant au minimum deux GPU A100 80GB pour fonctionner. Pour un Llama 3.1 405B, on dépasse les 800 Go — un coût prohibitif pour la plupart des organisations.

La quantization (ou quantification) est la technique qui résout cette équation impossible. Elle consiste à réduire la précision numérique des poids du modèle — passer de 16 bits flottants à 8, 4, voire 2 bits entiers — pour diminuer drastiquement l'empreinte mémoire et accélérer l'inférence, tout en préservant au maximum la qualité des réponses.

L'état de l'art en 2026

En 2026, trois formats dominent l'écosystème de la quantization des LLM, chacun avec ses forces et sa philosophie :

Le compromis taille vs qualité

Le principe fondamental de la quantization repose sur un compromis : chaque réduction de précision entraîne une perte d'information. Cependant, les recherches montrent que les LLM sont remarquablement robustes à la quantization. Un modèle 70B quantifié en 4 bits conserve généralement plus de 95% de ses performances sur les benchmarks standards, tout en divisant par 4 son empreinte mémoire.

La raison est que les poids d'un LLM ne sont pas tous également importants. La distribution des poids suit une loi de puissance : quelques poids « saillants » portent l'essentiel de l'information, tandis que la majorité contient des valeurs proches de zéro. Les méthodes modernes exploitent cette propriété pour quantifier intelligemment.

Point Clé

En règle générale, un modèle quantifié en 4 bits de taille N surpasse un modèle plus petit en FP16 de taille N/2. Autrement dit, un Llama 3 70B-Q4 sera meilleur qu'un Llama 3 8B en pleine précision, pour une empreinte mémoire comparable (~35 Go vs ~16 Go).

2 Fondamentaux Techniques de la Quantization

De FP32 à INT4 : la cascade de précision

Chaque format numérique offre un compromis différent entre précision et efficacité mémoire. Voici la hiérarchie des précisions utilisées dans les LLM :

Quantization symétrique vs asymétrique

La quantization transforme des valeurs flottantes en entiers via une fonction de mapping. Deux approches existent :

Quantization symétrique : le zéro flottant correspond exactement au zéro entier. La formule est simple : q = round(x / scale)scale = max(|x|) / (2^(n-1) - 1). Plus simple à implémenter et rapide, mais gaspille un bit si la distribution n'est pas centrée sur zéro.

Quantization asymétrique : ajoute un zero-point pour gérer les distributions décalées. La formule devient : q = round(x / scale) + zero_point. Plus précise pour les activations (souvent positives après ReLU), mais légèrement plus lente à cause du terme additionnel.

Granularité et calibration

La granularité définit à quelle échelle les paramètres de quantization (scale et zero-point) sont calculés. On distingue trois niveaux : per-tensor (un seul scale pour toute la matrice, rapide mais imprécis), per-channel (un scale par ligne/colonne, bon compromis), et per-group (un scale par groupe de 32 à 128 poids, le plus précis et utilisé par GPTQ/AWQ).

La calibration est l'étape cruciale qui détermine les paramètres optimaux de quantization. Un petit jeu de données représentatif (128-512 échantillons) est passé dans le modèle pour observer la distribution réelle des poids et des activations. C'est cette étape qui différencie fondamentalement les trois formats que nous allons étudier.

Point Clé

La granularité per-group avec des groupes de 128 poids est le standard actuel. Elle offre un excellent compromis entre précision de quantization et overhead mémoire (les métadonnées scale/zero-point ne représentent que ~0.5% de la taille totale du modèle).

3 GPTQ : Quantization Post-Training sur GPU

L'algorithme OBQ revisité

GPTQ (Generative Pre-trained Transformer Quantization), publié par Frantar et al. en 2023, est une méthode de quantization post-entraînement qui s'appuie sur l'algorithme OBQ (Optimal Brain Quantization). Le principe est de quantifier les poids colonne par colonne en compensant l'erreur introduite sur les colonnes restantes.

Concrètement, pour chaque couche linéaire du modèle, GPTQ procède ainsi : il calcule la matrice de Hessienne à partir des activations du dataset de calibration, puis quantifie les poids un par un en ordre décroissant d'impact. Après chaque quantification, l'erreur résiduelle est redistribuée sur les poids non encore quantifiés grâce aux informations de la Hessienne inverse. Cette compensation intelligente est ce qui rend GPTQ nettement supérieur à une quantization naïve round-to-nearest.

Calibration et dataset

GPTQ nécessite un dataset de calibration pour calculer la Hessienne. En pratique, 128 à 256 échantillons de texte suffisent (typiquement issus de C4 ou WikiText-2). Le choix du dataset impacte la qualité finale : un dataset proche du domaine cible donne de meilleurs résultats. Le processus de quantification d'un modèle 70B prend environ 2 à 4 heures sur un seul GPU A100.

GPTQ utilise par défaut une quantization per-group en 4 bits avec des groupes de 128, et stocke les paramètres scale/zero-point en FP16. Le format résultant est optimisé pour l'inférence GPU avec des kernels CUDA spécialisés (Marlin, ExLlama, ExLlamaV2) qui dépaquettent et dé-quantifient les poids à la volée.

AutoGPTQ en pratique

AutoGPTQ est la bibliothèque de référence pour quantifier et charger des modèles GPTQ. Voici un exemple complet :

from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
from transformers import AutoTokenizer

model_id = "meta-llama/Llama-3.1-8B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)

# Configuration de quantization
quant_config = BaseQuantizeConfig(
    bits=4,               # Quantization 4 bits
    group_size=128,       # Taille des groupes
    desc_act=True,        # Ordre décroissant (meilleure qualité)
    sym=True,             # Quantization symétrique
)

# Chargement et quantization
model = AutoGPTQForCausalLM.from_pretrained(model_id, quant_config)
model.quantize(examples)  # examples = dataset de calibration tokenizé

# Sauvegarde du modèle quantifié
model.save_quantized("./llama-3.1-8b-gptq-4bit")

Forces et limites de GPTQ

Point Clé

Pour les modèles GPTQ, privilégiez le kernel Marlin (disponible dans vLLM) pour les meilleures performances GPU. Il est jusqu'à 2x plus rapide que le kernel ExLlamaV2 sur les GPU Ampere et Ada Lovelace.

4 GGUF : Le Format Universel de llama.cpp

Architecture et philosophie

GGUF (GPT-Generated Unified Format) est le format de fichier créé par Georgi Gerganov pour le projet llama.cpp. Successeur de GGML, GGUF est un format binaire auto-descriptif conçu pour être portable, extensible et autonome. Chaque fichier GGUF contient à la fois les métadonnées du modèle (architecture, vocabulaire, paramètres de tokenization) et les tenseurs quantifiés, dans un seul fichier facilement distribuable.

La philosophie de GGUF est radicalement différente de GPTQ : là où GPTQ cible l'inférence GPU pure, GGUF est conçu pour fonctionner partout — CPU pur (x86, ARM), GPU offloading partiel, Apple Silicon (Metal), et même les accélérateurs NPU. Cette universalité en fait le format de prédilection pour les déploiements locaux via Ollama, LM Studio ou directement llama.cpp.

Les types de quantization K-quant

GGUF propose un système de quantization sophistiqué appelé K-quant (k-means quantization), introduit en 2023. Contrairement à GPTQ qui applique la même précision à toutes les couches, K-quant utilise une quantization mixte : les couches les plus sensibles conservent une précision plus élevée.

TypeBits moyensTaille (7B)QualitéUsage recommandé
Q2_K2.6 bpw~2.8 GoFaibleTests uniquement
Q4_K_M4.8 bpw~4.4 GoBonneRecommandé par défaut
Q5_K_S5.5 bpw~5.0 GoTrès bonneBon compromis qualité/taille
Q6_K6.6 bpw~5.9 GoExcellenteSi mémoire disponible
Q8_08.5 bpw~7.7 GoQuasi-losslessRéférence de qualité

GPU Offloading et inférence hybride

L'une des fonctionnalités les plus puissantes de llama.cpp est le GPU offloading partiel. Vous pouvez décharger un nombre spécifique de couches sur le GPU tout en gardant le reste sur CPU. Cela permet d'exécuter des modèles qui ne tiennent pas entièrement en VRAM :

# Conversion d'un modèle HuggingFace en GGUF
python3 convert_hf_to_gguf.py ./model-dir --outtype f16 --outfile model-f16.gguf

# Quantization avec llama-quantize
./llama-quantize model-f16.gguf model-Q4_K_M.gguf Q4_K_M

# Inférence avec GPU offloading partiel (33 couches sur GPU)
./llama-cli -m model-Q4_K_M.gguf -ngl 33 -c 4096 \
    --temp 0.7 -p "Explique la quantization en IA :"

# Via Ollama (simplifié)
ollama run llama3.1:8b-instruct-q4_K_M

Point Clé

Pour un usage quotidien, Q4_K_M est le meilleur choix par défaut en GGUF. Le suffixe « M » (medium) indique que les couches d'attention utilisent Q6_K tandis que les couches feedforward utilisent Q4_K, un compromis optimal validé par la communauté.

5 AWQ : Activation-Aware Quantization

Le principe des poids saillants

AWQ (Activation-Aware Weight Quantization), publié par Lin et al. en 2024 (MIT), repose sur une observation fondamentale : seule une petite fraction des poids (environ 1%) est réellement critique pour la qualité du modèle. Ces poids « saillants » (salient weights) sont identifiés non pas par leur magnitude, mais par l'amplitude des activations qu'ils traitent.

L'intuition est la suivante : un poids qui reçoit de grandes activations en entrée a un impact disproportionné sur la sortie. Le quantifier grossièrement introduit une erreur importante. AWQ identifie ces canaux « chauds » en analysant la distribution des activations sur le dataset de calibration, puis applique un facteur de scaling optimal avant la quantization pour protéger ces poids sensibles.

Scaling optimal par canal

Contrairement à GPTQ qui compense l'erreur après quantification, AWQ agit avant : il multiplie chaque canal de poids par un facteur s optimal, puis divise les activations par le même facteur pour maintenir l'équivalence mathématique. Le facteur optimal est calculé par une recherche sur grille qui minimise l'erreur de quantization pondérée par l'amplitude des activations.

L'avantage est double : les poids saillants occupent une plus grande plage dans l'espace quantifié (meilleure résolution), et le processus est beaucoup plus rapide que GPTQ car il ne nécessite pas le calcul coûteux de la Hessienne inverse. Un modèle 70B se quantifie en 30 à 45 minutes sur un seul GPU, contre 2 à 4 heures pour GPTQ.

AutoAWQ en pratique

from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer

model_id = "meta-llama/Llama-3.1-8B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)

# Configuration AWQ
quant_config = {
    "zero_point": True,      # Asymétrique
    "q_group_size": 128,    # Taille des groupes
    "w_bit": 4,              # Quantization 4 bits
    "version": "GEMM",      # Kernel optimisé
}

# Chargement et quantization (~10 min pour un 8B)
model = AutoAWQForCausalLM.from_pretrained(model_id)
model.quantize(tokenizer, quant_config=quant_config)

# Sauvegarde
model.save_quantized("./llama-3.1-8b-awq-4bit")
tokenizer.save_pretrained("./llama-3.1-8b-awq-4bit")

Intégration avec vLLM et TGI

AWQ brille particulièrement dans les serveurs d'inférence de production. vLLM supporte nativement les modèles AWQ avec des kernels GEMM et GEMV optimisés, offrant un throughput de tokens/seconde parmi les meilleurs de l'industrie. L'intégration est transparente :

# Servir un modèle AWQ avec vLLM
python -m vllm.entrypoints.openai.api_server \
    --model ./llama-3.1-8b-awq-4bit \
    --quantization awq \
    --max-model-len 8192 \
    --gpu-memory-utilization 0.9

Point Clé

En 2026, AWQ est devenu le format de prédilection pour le déploiement GPU en production. Sa combinaison de quantization rapide, qualité supérieure et intégration native dans vLLM en fait le choix optimal pour les serveurs d'inférence à haute disponibilité.

6 Benchmarks Comparatifs : GPTQ vs GGUF vs AWQ

Tableau comparatif complet

Le tableau suivant compare les trois formats sur un modèle Llama 3.1 70B quantifié en 4 bits, testé sur un serveur équipé d'un GPU NVIDIA RTX 4090 24GB et 64 Go de RAM DDR5 :

CritèreGPTQ 4-bitGGUF Q4_K_MAWQ 4-bit
Taille fichier~37 Go~40 Go~37 Go
VRAM requise~40 Go~6-24 Go (offloading)~40 Go
Perplexité (WikiText-2)5.825.915.78
Tokens/s (GPU full)~45 t/s~38 t/s~50 t/s
Tokens/s (CPU only)N/A~8 t/sN/A
Temps de quantization2-4h~30 min30-45 min
Support CPUNonOui (natif)Non
Serveurs d'inférencevLLM, TGIllama.cpp, OllamavLLM, TGI
Apple SiliconLimitéExcellent (Metal)Limité

Analyse de la perplexité

La perplexité est la métrique standard pour évaluer la perte de qualité liée à la quantization. Plus elle est basse, meilleur est le modèle. Le modèle FP16 de référence affiche une perplexité de 5.53 sur WikiText-2. Les trois formats en 4 bits ajoutent entre 0.25 et 0.38 points de perplexité, ce qui reste remarquablement faible.

AWQ obtient la meilleure perplexité (5.78) grâce à sa protection des poids saillants. GPTQ suit de près (5.82) avec sa compensation d'erreur. GGUF Q4_K_M est légèrement derrière (5.91) mais compense par sa flexibilité CPU/GPU et sa quantization mixte qui attribue plus de bits aux couches critiques.

Impact sur les tâches réelles

Au-delà de la perplexité, les benchmarks sur des tâches concrètes révèlent des nuances importantes. Sur MMLU (compréhension multidisciplinaire), les trois formats en 4 bits perdent environ 1 à 2 points par rapport au FP16. Sur le code generation (HumanEval), la perte est plus marquée pour GGUF Q4_K_M (~3 points) car les tâches de code sont plus sensibles à la précision numérique. AWQ maintient les meilleures performances sur les tâches de raisonnement complexe grâce à sa préservation des poids saillants.

Point Clé

Les différences de qualité entre GPTQ, GGUF et AWQ en 4 bits sont souvent inférieures à la variance entre les prompts. En pratique, le choix du format devrait être dicté par votre infrastructure (GPU vs CPU) et votre stack d'inférence, pas par la qualité seule.

7 Guide de Choix pour la Production

Arbre de décision

Le choix du format de quantization dépend principalement de trois facteurs : votre matériel, votre cas d'usage et votre stack technique. Voici un arbre de décision simplifié :

Pipeline de quantization recommandé

Voici un pipeline complet pour quantifier un modèle dans les trois formats :

# 1. Télécharger le modèle source en FP16
huggingface-cli download meta-llama/Llama-3.1-8B-Instruct \
    --local-dir ./llama-3.1-8b

# 2. Quantization GGUF (le plus rapide)
python3 convert_hf_to_gguf.py ./llama-3.1-8b --outtype f16
./llama-quantize llama-3.1-8b-f16.gguf llama-3.1-8b-Q4_K_M.gguf Q4_K_M

# 3. Quantization AWQ (rapide, meilleure qualité)
python3 -c "
from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer
model = AutoAWQForCausalLM.from_pretrained('./llama-3.1-8b')
tokenizer = AutoTokenizer.from_pretrained('./llama-3.1-8b')
model.quantize(tokenizer, quant_config={'w_bit':4, 'q_group_size':128})
model.save_quantized('./llama-3.1-8b-awq')
"

# 4. Quantization GPTQ (le plus long, bonne qualité)
python3 -c "
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
config = BaseQuantizeConfig(bits=4, group_size=128, desc_act=True)
model = AutoGPTQForCausalLM.from_pretrained('./llama-3.1-8b', config)
model.quantize(calibration_data)
model.save_quantized('./llama-3.1-8b-gptq')
"

Outils et écosystème en 2026

L'écosystème de la quantization a considérablement mûri. Voici les outils de référence :

Conclusion et perspectives

La quantization est devenue un pilier incontournable du déploiement des LLM. En 2026, le paysage est mature avec trois formats complémentaires : GGUF pour la flexibilité et le déploiement local, GPTQ pour l'écosystème HuggingFace et GPU, et AWQ pour la production GPU haute performance. Les prochaines avancées — quantization 2 bits viable, quantization des activations en temps réel, et les formats spécialisés pour les NPU — promettent de repousser encore les limites de ce qui est possible avec du matériel grand public.

Point Clé

Ne sous-estimez pas l'importance de tester votre modèle quantifié sur vos données réelles avant le déploiement en production. Les benchmarks génériques ne reflètent pas toujours les performances sur votre domaine spécifique. Créez un jeu de test représentatif et comparez les réponses FP16 vs quantifiées.

Ayi NEDJIMI - Expert Cybersécurité & IA

À Propos de l'Auteur

Ayi NEDJIMI • Expert Cybersécurité & IA

Ayi NEDJIMI est un expert senior en cybersécurité offensive et intelligence artificielle avec plus de 20 ans d'expérience en développement avancé, tests d'intrusion et architecture de systèmes critiques. Spécialisé en rétro-ingénierie logicielle, forensics numériques et développement de modèles IA, il accompagne les organisations stratégiques dans la sécurisation d'infrastructures hautement sensibles.

Expert reconnu en expertises judiciaires et investigations forensiques, Ayi intervient régulièrement en tant que consultant expert auprès des plus grandes organisations françaises et européennes. Son expertise technique couvre l'audit Active Directory, le pentest cloud (AWS, Azure, GCP), la rétro-ingénierie de malwares, ainsi que l'implémentation de solutions RAG et bases vectorielles (Milvus, Qdrant, Weaviate) pour des applications IA d'entreprise.

20+Ans d'expérience
100+Missions réalisées
150+Articles & conférences

Conférencier et formateur reconnu en cybersécurité, Ayi anime régulièrement des conférences techniques et participe activement au développement de modèles d'intelligence artificielle pour la détection de menaces avancées. Auteur de plus de 150 publications techniques, il partage son expertise de haut niveau pour aider les RSSI et architectes sécurité à anticiper les cybermenaces émergentes et déployer des solutions IA de nouvelle génération.

Options de lecture

Taille du texte
Espacement
Mode de lecture
Partager