GGUF et quantification : Q4_K_M vs Q6_K vs Q8_0 mesurés
Le format GGUF et le choix du palier de compression déterminent directement la VRAM requise et la vitesse d'exécution. Voici mes mesures concrètes sur RTX 4090 pour choisir entre Q4_K_M, Q6_K et Q8_0.
👁 121 lectures
Le format GGUF et la quantification GGUF déterminent le compromis direct entre empreinte mémoire, vitesse d’inférence et fidélité du modèle. En pratique, le palier Q4_K_M représente le seuil d’efficacité idéal au quotidien, tandis que Q5_K_M et Q6_K offrent une précision quasi indiscernable de la référence sans saturer votre matériel. Pour explorer le déploiement de ces architectures chez vous, consultez mon dossier complet sur l’IA locale et les modèles de texte, image et vidéo.
Au 17 octobre 2026
- Les fichiers GGUF officiels de Bielik v3.0 sont publiés par l’organisation SpeakLeash sur Hugging Face sous licence Apache 2.0 (usage commercial autorisé).
- Le dépôt pour le modèle 1.5B propose F16 et Q8_0, celui de 4.5B F16 et Q8_0, et la variante 11B fournit Q4_K_M, Q5_K_M, Q6_K, Q8_0, BF16 et F16.
- Mes mesures ont été réalisées avec llama.cpp avec accélération CUDA (build 11194 du 26 septembre 2026). La version la plus récente de llama.cpp est la 0.7.0 du 15 octobre 2026 (licence MIT).
- Dans Ollama, Bielik 11B v3.0 n’a pas de tag par défaut automatique : il est nécessaire de préciser la variante comme
:Q4_K_M.
Synthèse : que choisir selon vos besoins
- Q4_K_M - le format le plus compact recommandable. Sur Bielik 11B, le fichier pèse 6,72 Go et reproduit le token le plus probable de Q8_0 dans 94,1 % des situations.
- Q5_K_M et Q6_K - le compromis optimal si votre VRAM le permet. L’écart de perplexité par rapport à Q8_0 reste confiné dans la marge d’erreur de mesure.
- Q8_0 - quasiment identique au fichier non quantifié (96,7 % d’alignement avec F16 sur le modèle 1.5B), mais il est presque deux fois plus lourd que Q4_K_M et sensiblement plus lent.
- Q3_K_M et inférieurs - à réserver exclusivement aux grands modèles en cas de contrainte extrême. Un modèle 1.5B en Q2_K perd toute cohérence (0 tâche réussie sur 12).
- Un modèle plus imposant en Q4 surpasse systématiquement un modèle plus petit conservé en Q8 : Bielik 11B en Q3_K_M (5,40 Go) valide 11 tests sur 12, contre 5 sur 12 pour Bielik 4.5B en Q8_0 (5,06 Go).
Qu’est-ce que le format GGUF ?
GGUF est un format binaire conçu par l’équipe ggml-org (à l’origine de llama.cpp) introduit en août 2023. Un unique fichier rassemble les poids du modèle ainsi que l’ensemble des métadonnées indispensables à son exécution : architecture, tokenizer, template de discussion et fenêtre de contexte maximale. Cette structure unifiée permet de charger exactement le même fichier dans llama.cpp, dans LM Studio ou Ollama.
La spécification suit une nomenclature standardisée de type Nom-Taille-Ajustement-Version-Encodage.gguf. Dans le nom de fichier Bielik-11B-v3.0-Instruct.Q4_K_M.gguf, le dernier segment détaille précisément le schéma de quantification appliqué.
Comprendre la quantification GGUF : Q4_K_M, Q6_K, Q8_0, F16 et IQ
Quantifier un modèle consiste à stocker ses poids numériques sur un nombre réduit de bits. Les versions d’origine conservent chaque poids sur 16 bits (F16 ou BF16). Q8_0 le compresse sur environ 8,5 bits et Q4_K_M sur un peu moins de 5 bits. Le fichier devient plus léger, tient sur une carte graphique plus modeste et génère du texte plus vite, la bande passante mémoire étant le principal facteur limitant lors de l’inférence.
| Désignation | Bits par poids | Description technique |
|---|---|---|
| F16 / BF16 | 16 | Sans quantification, référence de base |
| Q8_0 | 8,5 | Blocs de 32 poids, échelle linéaire simple |
| Q6_K | 6,56 | k-quant, super-blocs de 256 poids |
| Q5_K_M | 5,70 | Q5_K, tenseurs critiques préservés en Q6_K |
| Q4_K_M | 4,89 | Q4_K, moitié de attn_v et ffn_down en Q6_K |
| Q3_K_M | 4,00 | Q3_K, certains tenseurs alloués en Q4_K |
| IQ4_XS, IQ3, IQ2 | 2,4-4,5 | i-quants, grilles non linéaires via imatrix |
Ces densités de bits proviennent de la documentation officielle de llama-quantize mesurée sur Llama 3.1 8B. Le suffixe K désigne les k-quants, où les poids sont regroupés par super-blocs de 256 éléments dont les échelles sont elles-mêmes quantifiées. Les déclinaisons _S, _M, _L appliquent des précisions hybrides : Q4_K_M conserve les tenseurs les plus sensibles en Q6_K, tandis que Q4_K_S traite l’intégralité en 4 bits. La famille IQ repose sur des distributions de quantification non linéaires optimisées par une matrice d’importance (imatrix), calculée à partir d’un échantillon textuel pour minimiser les erreurs sur les zones clés.
Mesures sur banc d’essai : Bielik sur RTX 4090
J’ai réalisé l’ensemble de ces mesures le 17 octobre 2026 sur ma machine personnelle équipée d’une carte RTX 4090 24 Go, d’un processeur i9-14900KF et de 64 Go de RAM sous Windows 11, en exécutant llama.cpp CUDA avec l’intégralité des couches déchargée sur le GPU.
- Fichiers testés : versions officielles F16 et Q8_0 de Bielik 1.5B v3.0, ainsi que Q8_0 de Bielik 4.5B et 11B issues de l’organisation speakleash sur Hugging Face. Les autres variantes ont été quantifiées via llama-quantize (depuis F16 pour 1.5B, et depuis Q8_0 pour 4.5B et 11B). J’ai également inclus le fichier officiel Q4_K_M pour le 11B récupéré via Ollama.
- Perpexité et conformité : calculées avec llama-perplexity sur un contexte de 2048 jetons sur un extrait en langue polonaise du roman de Zofia Nałkowska (environ 7 900 mots). La conformité indique le pourcentage de jetons où le token le plus probable coïncide exactement avec la base F16 (ou Q8_0 pour 11B).
- Vitesse : mesurée via llama-bench sur une génération de 128 jetons (moyenne de 3 répétitions).
- VRAM : relèvement de l’allocation via nvidia-smi sur llama-server avec un contexte fixé à 4096 jetons.
- Évaluation pratique : série de 12 tâches courtes avec réponse univoque (conjugaison, logique, pourcentages, formatage JSON), exécutées à température 0.
Bielik 1.5B : échelle complète de F16 à Q2_K
| Variante | Taille | Perplexité | Alignement F16 |
|---|---|---|---|
| F16 | 3,20 Go | 51,04 | Référence |
| Q8_0 | 1,70 Go | 51,08 | 96,7 % |
| Q6_K | 1,31 Go | 50,86 | 93,2 % |
| Q5_K_M | 1,14 Go | 51,64 | 90,1 % |
| Q4_K_M | 0,97 Go | 54,27 | 83,6 % |
| Q4_K_M + imatrix | 0,97 Go | 52,21 | 88,1 % |
| IQ4_XS + imatrix | 0,87 Go | 53,44 | 85,8 % |
| Q3_K_M | 0,78 Go | 68,20 | 67,0 % |
| Q2_K | 0,61 Go | 401,80 | 30,9 % |
| Variante | Débit | VRAM | Tâches réussies |
|---|---|---|---|
| F16 | 216,9 tok/s | 3,5 Go | 5 / 12 |
| Q8_0 | 327,4 tok/s | 2,1 Go | 4 / 12 |
| Q6_K | 368,9 tok/s | 1,8 Go | 6 / 12 |
| Q5_K_M | 365,7 tok/s | 1,6 Go | 7 / 12 |
| Q4_K_M | 422,1 tok/s | 1,4 Go | 6 / 12 |
| Q3_K_M | 376,6 tok/s | 1,3 Go | 3 / 12 |
| Q2_K | 464,0 tok/s | 1,1 Go | 0 / 12 |
Un modèle de 1,5 milliard de paramètres demeure intrinsèquement limité : même en version brute F16, il échoue sur des attributions d’auteurs élémentaires. En Q3_K_M les erreurs factuelles explosent, et la quantification Q2_K provoque des répétitions infinies sans lien avec la consigne.
Bielik 11B : comportement de Q8_0 à Q3_K_M
| Variante | Taille | Perplexité | Alignement Q8_0 |
|---|---|---|---|
| Q8_0 (officiel) | 11,87 Go | 4,74 | Référence |
| Q6_K | 9,16 Go | 4,74 | 97,2 % |
| Q5_K_M | 7,91 Go | 4,75 | 96,0 % |
| Q4_K_M (officiel) | 6,72 Go | 4,76 | 94,1 % |
| Q4_K_M (quantifié Q8_0) | 6,72 Go | 4,77 | 94,1 % |
| Q3_K_M | 5,40 Go | 4,89 | 89,9 % |
| Variante | Débit | VRAM (4k / 32k) | Tâches réussies |
|---|---|---|---|
| Q8_0 | 67,0 tok/s | 12,2 / 17,7 Go | 9 / 12 |
| Q6_K | 84,0 tok/s | 9,7 / 15,2 Go | 10 / 12 |
| Q5_K_M | 94,9 tok/s | 8,6 / 14,1 Go | 10 / 12 |
| Q4_K_M | 108,0 tok/s | 7,5 / 13,0 Go | 10 / 12 |
| Q3_K_M | 127,3 tok/s | 6,3 / 11,7 Go | 11 / 12 |
La version Q4_K_M créée manuellement à partir de Q8_0 affiche des scores strictement comparables au fichier officiel (109,1 tok/s et 10/12 tâches). Sur des modèles plus imposants comme Gemma 4 31B sur RTX 4090, la gestion de cette empreinte mémoire devient encore plus déterminante.
Enseignements clés des mesures
- Jusqu’au palier Q5_K_M, l’évolution de la perplexité est inférieure à la marge d’erreur expérimentale (environ ±0,10 sur le modèle 11B). La première dégradation notable apparaît à Q4_K_M sur le petit modèle, mais seulement à Q3_K_M sur le grand.
- Plus l’architecture d’un modèle compte de paramètres, mieux elle tolère la compression : Q4_K_M préserve 94,1 % d’alignement sur 11B, contre 83,6 % sur 1.5B et 82,7 % sur 4.5B.
- L’emploi d’une imatrix améliore la fidélité sans surcoût de stockage : sur 1.5B, la conformité passe de 83,6 % à 88,1 % à taille rigoureusement identique.
- Sur un texte mémorisé lors de l’entraînement, la perplexité mesurée s’effondre (1,20 sur le roman classique de Prus pour 11B). C’est pourquoi un texte littéraire non surreprésenté est nécessaire pour obtenir un banc d’essai objectif. Les valeurs absolues ne doivent pas être comparées entre 1.5B et 11B car leurs tokenizers segmentent un même passage en 14 767 contre 23 760 jetons.
Recommandations pratiques pour 8, 12, 16 et 24 Go de VRAM
Les consommations indiquées correspondent à l’empreinte de llama-server sans inclure l’environnement de bureau de Windows et le navigateur, qui mobilisent couramment 1 à 2 Go supplémentaires en arrière-plan.
- 8 Go de VRAM : privilégiez Bielik 11B en Q3_K_M (6,3 Go avec un contexte de 4096) ou Bielik 4.5B en Q8_0 (5,3 Go). Le palier Q4_K_M du modèle 11B requiert 7,5 Go et risque d’entraîner des débordements mémoire.
- 12 Go de VRAM : Bielik 11B en Q4_K_M ou Q5_K_M (7,5 à 8,6 Go) permet de conserver une marge confortable pour étendre la taille de contexte.
- 16 Go de VRAM : Bielik 11B en Q6_K (9,7 Go), ou la version Q4_K_M configurée avec son contexte intégral de 32 768 jetons (13,0 Go).
- 24 Go de VRAM : vous pouvez faire tourner Bielik 11B en Q8_0 sur son contexte complet de 32 768 jetons (17,7 Go), ou opter pour un modèle de gabarit supérieur quantifié en Q4_K_M pour maximiser les capacités de raisonnement. Vous pouvez facilement interfacer ce type d’instance avec une interface locale via Open WebUI et Ollama.
Script PowerShell pour mesurer vos fichiers GGUF
Pour reproduire ces tests sur votre configuration :
- Récupérez l’archive de llama.cpp avec prise en charge CUDA depuis le dépôt GitHub ggml-org et décompressez-la dans un répertoire dédié, par exemple
D:\llama-cuda. - Téléchargez les variantes GGUF d’un modèle depuis son dépôt officiel vers un dossier local (par exemple
D:\modele). - Vérifiez l’intégrité de vos fichiers via la commande
Get-FileHash D:\modele\*.ggufen comparant avec l’empreinte SHA256 indiquée sur Hugging Face. - Préparez un fichier texte de test en encodage UTF-8 (plusieurs milliers de mots).
- Exécutez le script suivant dans PowerShell pour collecter automatiquement débits, tailles et perplexités dans un fichier CSV.
# porownaj-kwantyzacje.ps1 - comparaison de quantifications GGUF sous llama.cpp
# Usage:
# powershell -ExecutionPolicy Bypass -File .\porownaj-kwantyzacje.ps1 -Modele D:\modele -Llama D:\llama-cuda -Tekst D:\texte.txt
param(
[Parameter(Mandatory = $true)][string]$Modele,
[Parameter(Mandatory = $true)][string]$Llama,
[string]$Tekst = "",
[int]$Warstwy = 99
)
$ErrorActionPreference = "Continue"
$bench = Join-Path $Llama "llama-bench.exe"
$ppl = Join-Path $Llama "llama-perplexity.exe"
if (-not (Test-Path $bench)) { throw "Outil $bench introuvable" }
$pliki = Get-ChildItem -Path $Modele -Filter *.gguf | Sort-Object Length -Descending
if ($pliki.Count -eq 0) { throw "Aucun fichier .gguf dans $Modele" }
if ($Tekst -and -not (Test-Path $Tekst)) { throw "Fichier texte $Tekst introuvable" }
$wyniki = @()
foreach ($p in $pliki) {
Write-Host "== $($p.Name)" -ForegroundColor Cyan
$w = [ordered]@{ Plik = $p.Name; GB = [math]::Round($p.Length / 1e9, 2); Prompt_tok_s = ""; Generowanie_tok_s = ""; Perplexity = "" }
$json = & $bench -m $p.FullName -p 512 -n 128 -r 3 -ngl $Warstwy -o json 2>$null | Out-String
$start = $json.IndexOf("[")
if ($start -ge 0) {
foreach ($e in ($json.Substring($start) | ConvertFrom-Json)) {
if ($e.n_prompt -gt 0) { $w.Prompt_tok_s = [math]::Round($e.avg_ts, 1) } else { $w.Generowanie_tok_s = [math]::Round($e.avg_ts, 1) }
}
}
if ($Tekst) {
$log = & $ppl -m $p.FullName -f $Tekst -c 2048 -ngl $Warstwy 2>&1 | Out-String
$m = [regex]::Match($log, "Final estimate: PPL = ([\d.]+)")
if ($m.Success) { $w.Perplexity = [double]::Parse($m.Groups[1].Value, [Globalization.CultureInfo]::InvariantCulture) }
}
$wyniki += [pscustomobject]$w
}
$wyniki | Format-Table -AutoSize
$wyniki | Export-Csv -Path ".\resultats_gguf.csv" -NoTypeInformation -Encoding utf8
Si vous utilisez l’écosystème Ollama, la commande ollama run SpeakLeash/bielik-11b-v3.0-instruct:Q4_K_M télécharge exactement le même binaire que le fichier publié sur Hugging Face (vérification effectuée via l’empreinte sha256 de la couche modèle stockée dans le registre Ollama).
Foire aux questions
Qu’est-ce que le format de fichier GGUF ?
GGUF est le format de fichier binaire de référence conçu pour llama.cpp et ses interfaces clientes. Il intègre directement l’ensemble des poids quantifiés, l’architecture, le tokenizer et le template de prompt dans un conteneur unique sans dépendre de scripts externes.
Qu’est-ce que la quantification d’un modèle ?
Il s’agit d’une méthode de compression réduisant le nombre de bits alloués à chaque paramètre du réseau de neurones. En passant de 16 bits à environ 4 ou 5 bits, le fichier devient nettement moins volumineux, requiert moins de VRAM et accélère le débit d’inférence.
Faut-il privilégier Q4_K_M ou Q8_0 en utilisation réelle ?
Si votre carte graphique dispose d’assez de mémoire pour accueillir Q8_0 avec votre contexte applicatif maximal, ce palier garantit une fidélité intégrale. En cas d’arbitrage budgétaire ou matériel, faire tourner un grand modèle en Q4_K_M produit des résultats bien supérieurs à un modèle compact maintenu en Q8_0.
La quantification nuit-elle à la précision de traitement ?
Sur un modèle de 11 milliards de paramètres, le passage à Q4_K_M n’entraîne aucune dégradation notable des résultats pratiques et n’augmente la perplexité que dans la marge d’erreur. Les modèles très légers de 1,5 milliard de paramètres décrochent en revanche sévèrement dès le palier Q3_K_M.
Où télécharger des fichiers GGUF en toute sécurité ?
Téléchargez vos modèles uniquement auprès des dépôts certifiés de leurs créateurs sur Hugging Face ou depuis la bibliothèque officielle d’Ollama. Pensez à vérifier l’empreinte SHA256 des fichiers téléchargés face aux références du dépôt pour vous prémunir des altérations.
Sources
- Spécification technique du format GGUF (ggml-org)
- Documentation llama-quantize : types et bits par poids
- Pull Request llama.cpp 1684 : implémentation des k-quants
- Dépôt Hugging Face speakleash/Bielik-11B-v3.0-Instruct-GGUF
- Dépôt Hugging Face speakleash/Bielik-4.5B-v3.0-Instruct-GGUF
- Dépôt Hugging Face speakleash/Bielik-1.5B-v3.0-Instruct-GGUF
- Bibliothèque Ollama : SpeakLeash/bielik-11b-v3.0-instruct
- Notes de version de llama.cpp sur GitHub
Vérifié le 17 octobre 2026.
More on this from PROMPTIF
actualités·Kling 4.0 : prix et abonnements de la nouvelle version (2026)Kling 4.0 est accessible à tous depuis le 15 octobre 2026 sans surcoût unitaire : les générations consomment directement les crédits de votre compte.

