Module 6 — Quantification et empreinte mémoire
Nous avons manipulé jusqu'ici des étiquettes comme llama3.1:8b-instruct-q4_K_M sans nous arrêter sur la partie q4_K_M. C'est précisément ce suffixe qui décide si un modèle de 8 milliards de paramètres tient sur un MacBook à 16 Go ou fait planter le poste du secrétariat. Ce module explique ce que représente réellement la quantification, comment estimer la RAM nécessaire, et quelle dégradation de qualité elle induit sur les questions réelles du cabinet.
Ce qu'est la quantification
Un modèle est un empilement de matrices de nombres. En pleine précision (fp16 ou fp32), chaque poids occupe 2 ou 4 octets. Pour un modèle de 8 milliards de paramètres, cela donne 16 à 32 Go — hors du budget mémoire d'un ordinateur bureautique. La quantification consiste à représenter ces poids sur moins de bits : 8, 5, 4, voire 3, en acceptant de perdre en précision numérique. Elle divise la taille en mémoire par un facteur 2 à 8, ouvre la porte à l'inférence sur CPU et sur cartes graphiques modestes, et n'ajoute pratiquement aucun coût à l'exécution.
Le format universel utilisé par Ollama et llama.cpp s'appelle GGUF. Il regroupe dans un seul fichier les poids quantifiés, le vocabulaire et les métadonnées du modèle. Les étiquettes de la bibliothèque Ollama désignent avant tout des variantes GGUF prêtes à servir.
Décoder une étiquette
L'étiquette q4_K_M se lit en trois morceaux. Le q4 désigne la précision de base — 4 bits par poids. Le K désigne le schéma de quantification par blocs (introduit fin 2023) qui découpe les tenseurs en petits blocs quantifiés indépendamment, ce qui préserve mieux la précision locale que les schémas historiques. Le M (« Medium ») indique le niveau intermédiaire entre S (Small, plus agressif) et L (Large, plus conservateur).
Les cinq variantes qu'on croise en pratique :
| Étiquette | Bits effectifs | Taille pour un 8B | Usage |
|---|---|---|---|
q8_0 | 8 | ~8,5 Go | Qualité proche de fp16, référence si la RAM le permet |
q6_K | 6 | ~6,6 Go | Excellent compromis, souvent indistinguable de q8_0 |
q5_K_M | 5 | ~5,7 Go | Compromis avancé, sensible sur les tâches de raisonnement |
q4_K_M | 4 | ~4,7 Go | Défaut Ollama, qualité acceptable pour la plupart des usages |
q3_K_S | 3 | ~3,4 Go | Dégradation visible ; à réserver aux cas de RAM très contrainte |
Sous 4 bits, la dégradation devient franchement mesurable sur les tâches de raisonnement en plusieurs étapes — le cabinet évite donc q3 et q2, quitte à s'en tenir à un modèle plus petit en q4.
Estimer la RAM nécessaire, honnêtement
La formule mentale à retenir : RAM = taille du fichier GGUF + cache d'attention. Le fichier GGUF est facile à connaître, il apparaît dans ollama list. Le cache d'attention (le fameux « KV-cache ») est proportionnel à num_ctx et à la taille du modèle. Pour un 8B, il faut compter environ 500 Mo par tranche de 2 048 jetons de contexte.
Pour llama3.1:8b-instruct-q4_K_M avec num_ctx=4096 : 4,7 Go de poids + 1 Go de cache ≈ 5,7 Go effectivement occupés. Sur un poste à 16 Go de RAM totale, il reste largement de quoi laisser tourner le système, un navigateur et une suite bureautique. Pour un 70B en q4 : 40 Go de poids + 4 Go de cache ≈ 44 Go — inaccessible sur un poste bureautique ordinaire, mais réaliste sur le serveur commun du cabinet équipé de 64 Go.
Une conséquence de cette formule à laquelle il faut se préparer : passer num_ctx de 4 096 à 16 384 quadruple le cache. Un modèle qui tenait confortablement en RAM peut alors basculer vers un mode partiel où une partie des poids est déchargée sur le disque, avec une chute de la vitesse de génération d'un facteur dix ou plus. C'est le piège du « je veux juste plus de contexte » qui rend l'assistant inutilisable.
Mesurer la dégradation sur les questions du cabinet
Les benchmarks publics sont utiles mais imparfaits : ils testent des tâches génériques, pas les vôtres. Le cabinet a monté un mini-banc d'essai de 30 questions représentatives (procédure civile, baux d'habitation, droit du travail simple, rédaction de mise en demeure). Chaque question est passée dans chaque variante quantifiée du même modèle, à temperature=0 et seed=42, et un avocat évalue les réponses selon une grille en trois niveaux : correcte, imprécise, fausse.
Les tendances observées sur ce petit banc, qui correspondent à ce qu'on lit dans la littérature :
- Entre
fp16etq8_0, aucune différence détectable — 30/30 identiques. - Entre
q8_0etq6_K, une réponse sur trente se dégrade d'un cran (correcte → imprécise). - Entre
q6_Ketq4_K_M, trois à quatre réponses se dégradent, essentiellement sur des questions à chaîne de raisonnement longue (calcul d'un délai composé, hiérarchisation de deux exceptions concurrentes). - Entre
q4_K_Metq3_K_S, huit réponses se dégradent, dont deux passent en franchement fausses. C'est le seuil de rupture.
Autrement dit : q4_K_M est un excellent compromis pour un usage bureautique, mais quand la question exige un raisonnement rigoureux, remonter à q6_K fait souvent une vraie différence — si la RAM le permet.
Choisir : la matrice de décision
Pour un poste à 8 Go de RAM, la seule option raisonnable est un modèle 3B en q4_K_M (~2 Go de poids), ou un 7B en q3_K_S — de préférence la première. Pour un poste à 16 Go, un 7B ou 8B en q4_K_M est le standard, avec q6_K possible si l'on garde num_ctx modeste. Pour 32 Go, un 13B ou 14B en q4_K_M, ou un 8B en q8_0 pour la qualité maximale. Pour 64 Go et plus, un 70B en q4_K_M devient jouable — la marche qualitative avec un 8B est franche sur les raisonnements complexes.
Les benchmarks publics font apparaître les modèles q2 et q3 comme « à peine dégradés ». En pratique, cette dégradation se concentre sur les tâches longues à raisonnement multiple — exactement celles qu'on demande à un assistant juridique, comptable ou médical. Autrement dit, la quantification agressive économise de la RAM au moment précis où elle coûte le plus cher en qualité perçue. Pour un usage professionnel, q4_K_M est un plancher pratique.
En résumé
- La quantification représente les poids sur moins de bits (4 à 8) : elle divise la taille par 2 à 8 sans coût d'exécution ;
q4_K_Mest le défaut Ollama. - RAM totale ≈ taille du fichier GGUF + cache d'attention ; le cache croît linéairement avec
num_ctxet coûte environ 500 Mo par tranche de 2 048 jetons pour un 8B. - Sous 4 bits, la dégradation devient visible sur les raisonnements longs ; entre
q4_K_Metq8_0, la différence est mesurable mais souvent acceptable. - Choisir la variante en fonction du couple RAM / longueur de contexte, jamais en fonction du seul nombre de paramètres du modèle.
Module suivant : la même question vue côté matériel — GPU, Apple Silicon, CPU seul, et déchargement partiel des couches.