Avant de choisir un modèle à faire tourner chez soi, une question compte : tient-il en mémoire, poids et contexte compris ? Les formules sont documentées, autant les connaître avant d’acheter du matériel.
Deux postes : les poids et le contexte
La mémoire se partage entre les poids, fixes, et le cache KV, qui grossit avec le contexte. Pour des entrées de moins de 1 024 tokens, d’après Hugging Face, les poids dominent.
Les poids : paramètres × précision
La règle donnée par Hugging Face : charger un modèle de X milliards de paramètres demande environ 2 × X Go en bfloat16 ou float16, et 4 × X Go en float32. Un 70B, c’est donc 140 Go en 16 bits.
Généralisée à toute précision, c’est un ordre de grandeur :
poids (octets) ≈ nombre de paramètres × bits par poids / 8
GGUF et quantification
GGUF, conçu par l’auteur de llama.cpp, est un format binaire optimisé pour un chargement rapide, qui embarque les tenseurs et leurs métadonnées. La documentation Hugging Face donne 4,5 bits par poids pour le type Q4_K, 5,5 pour Q5_K, 6,5625 pour Q6_K.
Le README de l’outil de quantification de llama.cpp publie les tailles mesurées sur Llama 3.1 8B, en Gio :
| Type | Bits par poids | Taille (Gio) |
|---|---|---|
| Q4_K_M | 4,89 | 4,58 |
| Q5_K_M | 5,70 | 5,33 |
| Q8_0 | 8,50 | 7,95 |
| F16 | 16,00 | 14,96 |
Les variantes _M mesurées pèsent donc plus que leur type de base : 4,89 bits par poids contre 4,5 pour Q4_K, 5,70 contre 5,5 pour Q5_K.
La formule retombe sur ces valeurs : 8 milliards × 4,89 / 8 ≈ 4,9 Go, soit environ 4,6 Gio. Pour un 70B en Q4_K_M, le même README donne 43,1 GB, unité de la page.
Côté qualité, Hugging Face note que le 8 et le 4 bits se font sans perte significative, mais que le 4 bits donne souvent des résultats différents du 8 ou du 16 bits. Sur un dépôt GGUF du Hub, Ollama prend Q4_K_M par défaut s’il existe ; un suffixe en choisit un autre :
ollama run hf.co/{username}/{repository}:Q8_0
Le contexte et le cache KV
Le cache KV conserve les vecteurs clé et valeur de chaque token déjà traité, pour chaque couche et chaque tête d’attention : il croît linéairement avec le contexte. Sur l’exemple de Hugging Face, calculé sans MQA ni GQA, 16 000 tokens pèsent environ 15 Go en float16, la moitié des poids. Ces architectures le réduisent en partageant les têtes clé-valeur. Ordre de grandeur, adapté de leur formule (têtes KV, octets par valeur) :
cache KV (octets) ≈ 2 × tokens de contexte × couches × têtes KV × dimension de tête × octets par valeur
Dans Ollama, le contexte par défaut dépend de la VRAM : 4k sous 24 Gio, 32k entre 24 et 48 Gio, 256k à partir de 48 Gio. On le change avec OLLAMA_CONTEXT_LENGTH, et la doc prévient qu’un contexte plus grand augmente la mémoire nécessaire. Deux réglages pèsent lourd :
- les requêtes parallèles : la mémoire suit
OLLAMA_NUM_PARALLEL×OLLAMA_CONTEXT_LENGTH; OLLAMA_KV_CACHE_TYPE:q8_0utilise environ la moitié de la mémoire def16,q4_0environ le quart. Il faut Flash Attention actif, et le réglage s’applique à tous les modèles.
OLLAMA_FLASH_ATTENTION=1 OLLAMA_KV_CACHE_TYPE=q8_0 OLLAMA_CONTEXT_LENGTH=64000 ollama serve
CPU, GPU, Apple Silicon
llama.cpp tourne sur CPU x86 (AVX, AVX2, AVX512, AMX), sur GPU via CUDA, HIP, Vulkan ou SYCL, et sur Apple Silicon via Metal. Il peut répartir sur CPU et GPU un modèle plus gros que la VRAM.
Ollama prend en charge NVIDIA à partir de la compute capability 5.0 avec un pilote 550 ou plus récent (570 ou plus pour les compute capabilities 5.0 à 6.2), AMD avec ROCm v7 sous Linux, et Metal sur Apple. ollama ps montre la répartition dans la colonne PROCESSOR : 100% GPU, 100% CPU ou un partage CPU/GPU.
Sur Apple Silicon, Apple décrit une mémoire unifiée : un seul réservoir auquel tous les composants de la puce accèdent sans copie. Le modèle se charge donc dans ce réservoir commun.
L’appel du modèle par API fait l’objet d’un billet dédié.
Ce qu’il faut retenir
- Poids en 16 bits : environ 2 Go par milliard de paramètres. En quantifié, paramètres × bits par poids / 8.
- Sur un 8B, llama.cpp mesure 4,58 Gio en Q4_K_M et 7,95 Gio en Q8_0.
- Le cache KV s’ajoute aux poids, croît avec le contexte et se multiplie par les requêtes parallèles.
OLLAMA_KV_CACHE_TYPE=q8_0divise le cache par deux environ, Flash Attention requis.- Sur Apple Silicon, la mémoire est unifiée ; ailleurs,
ollama psdit si le modèle déborde de la VRAM vers le CPU.
In English
Weights, GGUF quantization, context and KV cache: what fills VRAM or unified RAM, rule-of-thumb formulas, and what llama.cpp, Ollama and Hugging Face say about it. In 16 bits, a model with X billion parameters needs about 2 × X GB for its weights alone, and the KV cache grows linearly with the context.
Sources & vérification
Relevé sur : Documentation Ollama / llama.cpp, relevé 2026-10
- Hugging Face, Optimizing LLMs for Speed and Memory huggingface.co
- Hugging Face Hub, GGUF huggingface.co
- Hugging Face Hub, Use Ollama with any GGUF Model huggingface.co
- llama.cpp, README github.com
- llama.cpp, quantize README github.com
- Ollama, Context length docs.ollama.com
- Ollama, FAQ docs.ollama.com
- Ollama, Hardware support docs.ollama.com
- Apple Newsroom, annonce de la puce M1 (unified memory) apple.com
