Electrosens R&D
Electrosens LLM auto hébergées · 6 November 2026

Optimiser l’inférence LLM locale en 2026 : le guide technique de la performance réelle

Les modèles open-weights de 2026 — Kimi K3, DeepSeek V4 Pro, Mistral Large 4 et ses 1 000 milliards de paramètres — tiennent désormais tête aux API propriétaires. Le vrai différenciateur n’est donc plus le choix du modèle, mais l’ingénierie de l’inférence : comment tirer réellement parti d’un GPU consumer ou d’un serveur modeste sans exploser coûts et latence. Voici le cadre mental durable pour optimiser n’importe quelle pile locale, indépendamment du matériel du moment.

Le mur du coût : pourquoi l’inférence est devenue le champ de bataille de 2026

Il y a une ironie cruelle dans l’économie de l’IA de 2026. On a passé trois ans à se disputer sur la taille des modèles, à comparer des scores de benchmarks, à guetter la sortie du prochain « frontier model ». Et voilà que la vraie question, celle qui décide si un projet tient ou s’effondre, est devenue bassement matérielle : combien coûte chaque token que l’on génère ?

Les chiffres qui circulent donnent le vertige. Selon un cabinet de conseil spécialisé, l’inférence représenterait 70 à 90 % des coûts opérationnels IA en entreprise en 2026 — une fourchette qu’il faut prendre avec précaution, car elle provient d’une source unique auto-publiée, sans méthodologie publique. Le même document avance des instances NVIDIA H100 facturées entre 2,50 et 4,50 dollars de l’heure. Ces ordres de grandeur, même non recoupés par un tarif cloud officiel, disent l’essentiel : à l’échelle, ce n’est plus l’entraînement qui ruine, c’est le service rendu au quotidien.

Face à cette facture, le basculement vers les modèles open-weights n’est plus une affaire d’idéologie mais de comptabilité. La matière est là : Kimi K3 et DeepSeek V4 Pro sont désormais comparés frontalement aux meilleurs modèles fermés ; Mistral a dévoilé le 6 octobre 2026 Mistral Large 4, alias « Le Chonk », un modèle de frontière de 1 000 milliards de paramètres dont les poids open-weight ont été publiés le 27 octobre. Les familles Qwen et Llama récentes complètent un écosystème où l’on peut, littéralement, télécharger des modèles qui valaient des millions il y a deux ans.

Mais voici la thèse de ce dossier : le différenciateur n’est plus le modèle, c’est l’ingénierie de l’inférence. Deux personnes avec le même GPU et le même fichier GGUF peuvent obtenir des débits qui varient d’un facteur trois, une latence perçue radicalement différente, et une qualité dégradée ou intacte selon les réglages. Ce n’est pas une nuance technique : c’est la ligne de partage entre une pile locale qui remplace une API et une pile locale qui la singe maladroitement.

Nous allons donc articuler théorie et pratique : comprendre la mécanique intime (prefill, decode, KV cache), passer en revue les leviers (quantification, PagedAttention, batching continu, décodage spéculatif, offloading, compilation), confronter ce que disent — et ne disent pas — les bancs d’essai, puis proposer une méthode pour mesurer plutôt que croire.

Prefill, decode, KV cache : la mécanique intime qui décide de tout

Pour optimiser quoi que ce soit, il faut d’abord comprendre où le temps passe. Et l’inférence d’un LLM n’est pas une opération unique : c’est un pipeline en deux phases aux profils matériels opposés.

Gains de débit et gaspillage mémoire VRAM : PagedAttention vs moteurs classiquesDébit tokens/s — Paged4valeur (x pour débit, % pour gaspillage)Débit tokens/s — moteu1valeur (x pour débit, % pour gaspillage)Gaspillage VRAM — mote60valeur (x pour débit, % pour gaspillage)Gaspillage VRAM — Page4valeur (x pour débit, % pour gaspillage)

La première, le prefill, traite tout le prompt d’un coup. Tous les tokens d’entrée sont projetés en parallèle à travers les couches du réseau, et l’attention calcule les relations entre eux simultanément. C’est une phase compute-bound : elle sature les cœurs de calcul (Tensor Cores sur NVIDIA), et sa durée détermine le Time To First Token (TTFT) — le délai avant que le premier mot de la réponse n’apparaisse.

La seconde, le decode, génère la réponse token par token. À chaque étape, le modèle ne produit qu’un seul token, ce qui signifie qu’il ne fait quasiment que lire des poids en mémoire pour un volume de calcul dérisoire. C’est une phase memory-bound : le goulot d’étranglement n’est plus la puissance de calcul mais la bande passante mémoire. C’est pour cela qu’un GPU avec beaucoup de VRAM mais une bande passante modeste plafonne en génération, tandis qu’un puce à bande passante élevée (les Mac Studio M-series, par exemple) peut afficher des débits honorables malgré une puissance brute inférieure.

Au cœur de cette mécanique trône le KV cache (cache clé-valeur). Pour éviter de recalculer l’attention sur tous les tokens précédents à chaque nouvelle génération, le modèle stocke les états intermédiaires de l’attention. Problème : ce cache croît linéairement avec la longueur du contexte. Un contexte de 32 000 tokens occupe une fraction de VRAM considérable, et cette consommation vient s’ajouter à celle des poids du modèle. C’est le nerf de la guerre : sur un GPU consumer de 24 Go, le KV cache peut manger la moitié de la mémoire disponible dès qu’on allonge le contexte.

D’où une conséquence pratique capitale : TTFT et débit tokens/s sont deux métriques distinctes qui ne s’optimisent pas avec les mêmes leviers. Réduire le TTFT demande d’accélérer le prefill (parallélisme, kernels efficaces, prefix caching). Augmenter le débit de génération demande de soulager la bande passante mémoire (quantification du KV cache, batching pour amortir la lecture des poids, décodage spéculatif). Confondre les deux, c’est optimiser à l’aveugle. Tout le reste de ce dossier découle de cette distinction.

Quantification : Q8, Q4, Q2… ce qu’on gagne vraiment (et ce qu’on perd)

La quantification est le levier le plus accessible — et le plus mal compris. L’idée est simple : réduire la précision des poids (et parfois des activations) pour diminuer l’empreinte mémoire. Un modèle en FP16 stocke chaque paramètre sur 16 bits ; en Q4, sur environ 4 bits, soit un facteur quatre sur la taille des poids.

Les formats se sont diversifiés. Côté GGUF (le format de llama.cpp), les K-quants (Q4_K_M, Q5_K_M…) offrent un bon compromis taille/qualité et restent le standard de facto pour l’usage local sur CPU/GPU mixte. Côté GPU, GPTQ et AWQ sont des méthodes de quantification post-entraînement orientées serveur, tandis que FP8 et INT4 sont exploités nativement par les piles comme TensorRT-LLM. La matière confirme que « les formats GGUF avec K-quants et la quantification INT4/FP8 réduisent l’empreinte mémoire sans dégradation significative de qualité » — mais attention, cette affirmation provient d’une source unique et ne précise pas ce qu’on entend par « significative ».

Les ordres de grandeur VRAM pour des modèles quantifiés Q4 à contexte 4K, tels que rapportés par un guide tiers d’avril 2026 (à recouper, car non vérifiés indépendamment) :

Taille du modèle VRAM approximative (Q4, contexte 4K) Note
3B ≈ 2,5 Go tient sur iGPU
7–8B ≈ 5 Go point d’entrée 12 Go
14–24B ≈ 12–16 Go GPU consumer milieu de gamme
32–70B ≈ 40–48 Go (ou 64 Go RAM en CPU) multi-GPU ou offloading
Contexte 32K+ +50 à 80 % de mémoire effet KV cache

Ces chiffres illustrent un point crucial : la quantification des poids et celle du KV cache sont deux choses distinctes. On peut avoir des poids en Q4 et un KV cache en FP16 qui explose en contexte long. Quantifier le KV cache (en Q8 ou Q4) est souvent le levier décisif pour les usages à long contexte — mais c’est aussi celui qui dégrade le plus vite la qualité sur les tâches de raisonnement.

Car c’est là que le bât blesse : les seuils de dégradation perceptible dépendent de l’usage. Pour du chat conversationnel, un Q4_K_M est généralement invisible. Pour du code, où une seule erreur de syntaxe casse tout, la prudence s’impose. Pour des agents enchaînant des appels d’outils, une légère dérive qualitative se cumule et peut faire dérailler une tâche entière. La seule attitude raisonnable : mesurer par perplexité ou sur des tâches ciblées plutôt que de croire aux recettes. Un Q2 peut sembler acceptable en bavardage et s’effondrer sur un raisonnement à étapes.

PagedAttention et continuous batching : l’ère des moteurs qui ne gaspillent plus

Si la quantification est le levier le plus accessible, le moteur d’inférence est le plus sous-estimé. Et c’est vLLM qui a changé la donne avec PagedAttention, dont le mécanisme s’inspire directement de la gestion de mémoire virtuelle des systèmes d’exploitation : le KV cache est découpé en pages physiques non contiguës, éliminant la fragmentation de la VRAM.

Source : larousse.fr

L’enjeu est massif. Sur les moteurs classiques, le gaspillage mémoire dû à la fragmentation et aux réservations statiques peut dépasser 60 % de la VRAM allouée au KV cache. PagedAttention ramènerait ce gaspillage sous les 4 % selon une source technique secondaire — chiffres plausibles au regard du papier original vLLM, mais non recoupés ici par une source primaire. Résultat : plus de place pour des séquences longues ou pour plus de requêtes simultanées.

Le second pilier est le continuous batching. Plutôt que d’attendre qu’une requête entière soit terminée pour en insérer une nouvelle (batching statique), le moteur insère de nouvelles requêtes à chaque token généré. Les Tensor Cores restent saturés, le TTFT chute, et le débit global grimpe. C’est ce mécanisme, popularisé par Orca puis généralisé par vLLM, qui explique pourquoi un serveur bien réglé traite beaucoup plus de requêtes qu’un simple script de génération.

Les chiffres de gains souvent cités — 2x à 4x sur le débit de génération, voire « division par trois des coûts d’infrastructure » — doivent être maniés avec précaution. Ils proviennent de sources marketing ou secondaires, sans méthodologie ni charge de travail précisée. Un gain de 2x sur un workload de décodage court n’a rien à voir avec un gain sur du prefill massif. La réalité : PagedAttention et le continuous batching sont devenus le standard de facto en 2026, non pas parce qu’ils multiplient magiquement les performances, mais parce qu’ils éliminent un gaspillage structurel que tout le monde subissait.

Speculative decoding, offloading, compilation : les leviers qui font sauter les plafonds

Au-delà des fondamentaux, trois familles d’optimisations avancées permettent de franchir des plafonds que la quantification seule ne lève pas.

Le décodage spéculatif est sans doute le plus élégant. Le principe : un petit modèle « draft » génère plusieurs tokens candidats à la volée ; le grand modèle les vérifie ensuite en une seule passe parallèle. Si le draft a vu juste, on gagne plusieurs tokens pour le prix d’un. Le gain est totalement sans perte — c’est sa grande force — mais il dépend d’un paramètre critique : le taux d’acceptation. Si le draft se trompe souvent, on paie le coût de vérification sans bénéfice. Il faut aussi loger le modèle draft en VRAM, ce qui n’est pas gratuit. C’est un levier idéal pour les charges stables et prévisibles (code, agents), moins pertinent pour une génération créative imprévisible.

L’offloading CPU/GPU consiste à placer une partie des couches du modèle en RAM système quand la VRAM ne suffit pas. Des outils comme accelerate ou llama.cpp le permettent, et des projets ambitieux comme AirLLM promettent de faire tourner un modèle 70B avec 4 Go de VRAM, ou un 405B avec 8 Go. Mais le diable est dans la bande passante : chaque couche offloadée doit transiter par le bus PCIe, bien plus lent que la VRAM. Le débit s’effondre souvent à des niveaux inutilisables pour du chat interactif. L’offloading est un levier de dernier recours, pas une solution de performance.

Enfin, la compilation et les kernels. torch.compile, TensorRT-LLM, FlashAttention : ces outils réécrivent les opérations pour mieux exploiter le matériel. FlashAttention, en particulier, réduit la complexité mémoire de l’attention (de O(N²) à O(N) en mémoire) en la calculant par blocs. TensorRT-LLM, la pile NVIDIA, compile les graphes pour générer des kernels optimisés. Le piège ici est le surrengineering : la compilation paie sur des charges stables et répétées, mais peut introduire des incompatibilités, des temps de compilation prohibitifs et des régressions subtiles. Pour un usage occasionnel, le jeu n’en vaut souvent pas la chandelle.

Ce que disent les bancs d’essai (et ce qu’ils ne disent pas)

C’est ici qu’il faut être honnête : la matière chiffrée disponible est fragile. Les benchmarks officiels vLLM/llama.cpp/MLPerf sont absents de notre collecte, et les chiffres de débit tokens/s par GPU consumer (RTX 3090/4090/5090, Mac Studio M-series) ne sont pas recoupés. Les seules données tangibles concernent des configurations modestes : un iGPU AMD Radeon 780M affiche environ 10-12 tokens/s sur Llama 3 8B Q4 en Vulkan, 8-11 tokens/s sur Mistral 7B Q4_K_M, avec un gain de +50 % apporté par le backend Vulkan et +12,9 % via un réglage MMVQ. Mixtral 8x7B, lui, ne tient pas en mémoire partagée.

Source : dictionnaire.lerobert.com

Ces chiffres, bien que limités, enseignent une leçon : le backend et les réglages comptent autant que le matériel. Passer de CPU à Vulkan sur un iGPU, c’est +50 % de débit sans changer de puce.

Face à cette pénurie de données fiables, adoptons une grille de lecture critique. Tout benchmark d’inférence locale doit préciser : la méthodologie (comment le débit est mesuré, sur combien de tokens, avec quel warm-up), la charge de travail (prefill vs decode, longueur de prompt et de réponse), la longueur de contexte (un débit à 4K n’a rien à voir avec un débit à 32K), et la version du moteur (llama.cpp v0.5.0, sorti en septembre 2026 selon nos sources, n’a plus rien à voir avec les versions antérieures). Sans ces quatre paramètres, un chiffre de tokens/s est un slogan, pas une mesure.

La reproductibilité est la seule discipline qui vaille. Un benchmark qu’on ne peut pas refaire sur sa propre machine, avec son propre modèle et son propre prompt, ne dit rien d’utile.

Chat, code, agents : trois usages, trois recettes d’optimisation

Les leviers ne se valent pas selon ce qu’on fait tourner. Voici comment les articuler par profil de charge.

Le chat privilégie le TTFT et la réactivité perçue. La recette : batching agressif (continuous batching activé), prefix caching pour ne pas recalculer un system prompt stable, quantification modérée (Q4_K_M suffit généralement), et surtout un contexte raisonnable — inutile de charger 32K de contexte pour une conversation. Le décodage spéculatif aide peu ici car la génération est créative ; mieux vaut soigner le prefill.

Le code exige de longues fenêtres de contexte et une qualité irréprochable. La recette : quantification des poids prudente (Q5 ou Q8 plutôt que Q4 sur les modèles sensibles), quantification du KV cache à manier avec précaution (FP16 ou Q8, jamais Q4 sur du raisonnement complexe), offloading maîtrisé (mieux vaut un modèle plus petit entièrement en VRAM qu’un gros modèle à moitié offloadé), et un moteur capable de gérer proprement les longs contextes (vLLM avec PagedAttention). Le décodage spéculatif est ici très efficace car le code est prévisible.

Les agents enchaînent des appels courts et nombreux. C’est le terrain de jeu du continuous batching et du décodage spéculatif : chaque appel est bref, le TTFT domine, et la prévisibilité des sorties (appels d’outils structurés) rend le draft model très efficace. La recette : batching maximal, speculative decoding activé, prefix caching pour les instructions système répétées, et une attention particulière à la stabilité qualitative — une dérive légère se cumule sur des centaines d’appels.

Un arbre de décision simple : si votre goulot est le TTFT, travaillez le prefill (prefix caching, batching, kernels). Si c’est le débit de génération, travaillez la bande passante (quantification du KV cache, speculative decoding, batching). Si c’est la VRAM, travaillez la quantification des poids et la gestion du contexte — l’offloading en dernier recours.

Mesurer plutôt que croire : construire son propre banc d’essai

La tentation, face à la complexité, est de suivre des recettes trouvées en ligne. C’est le meilleur moyen de passer des heures à optimiser des choses qui ne comptent pas pour votre charge. La méthode inverse — mesurer d’abord — est plus lente mais infiniment plus rentable.

Source : societe.com

Définir les métriques. Quatre suffisent : le TTFT (temps jusqu’au premier token), le débit en prefill (tokens/s sur le prompt), le débit en decode (tokens/s sur la génération), et la VRAM pic. Ajoutez une mesure de qualité : perplexité sur un corpus de référence, ou mieux, taux de réussite sur une dizaine de tâches ciblées représentatives de votre usage.

Utiliser les bons outils. Les logs de vLLM et de llama.cpp exposent déjà ces métriques. Pour aller plus loin, torch profiler et Nsight Systems permettent de voir où le temps passe réellement (prefill, decode, synchronisations). Sur llama.cpp, l’option de verbosité et les logs de llama-server donnent accès aux timings par phase.

Comparer avant/après chaque changement. Un seul paramètre à la fois. C’est fastidieux, mais c’est la seule façon de savoir ce qui a réellement produit un gain — et d’éviter de créditer une amélioration à un réglage qui n’y est pour rien.

Se méfier des benchmarks marketing. Les chiffres de gains « 2x à 8x » et de « division par trois des coûts » circulent sans méthodologie. Un chiffre sans protocole n’est pas une donnée, c’est une promesse commerciale.

Un protocole minimal reproductible : un prompt de 2 000 tokens, une génération de 500 tokens, un modèle fixé, un contexte fixé, trois exécutions, on retient la médiane. On note la version exacte du moteur (llama.cpp v0.5.0, vLLM version X), le backend (CUDA, Vulkan, ROCm), la quantification, et les réglages. On recommence en changeant une seule variable. Le seuil de décision : une optimisation n’en vaut une autre que si le gain dépasse la variance de mesure — typiquement, en dessous de 5 % de gain, on ne peut pas conclure.

Le cadre mental durable : ce qui restera vrai quand les modèles auront changé

Les modèles vont changer. Kimi K3, DeepSeek V4 Pro, Mistral Large 4 et ses 1 000 milliards de paramètres seront un jour des ancêtres. Les GPU aussi. Mais les principes d’optimisation, eux, resteront. Voici ce qu’il faut retenir.

La mémoire est le nerf de la guerre. Le decode est memory-bound, le KV cache croît avec le contexte, et la VRAM est la ressource la plus contrainte. Toute optimisation qui ne soulage pas la pression mémoire finit par plafonner.

Le batching est roi. Le continuous batching et PagedAttention ne sont pas des astuces : ce sont les fondations de tout moteur sérieux. Un débit sans batching est un débit gaspillé.

La quantification est un compromis à géométrie variable. Q4 est souvent invisible en chat, risqué en code, dangereux en agents. Et la quantification des poids n’est pas celle du KV cache. Mesurez par usage, pas par dogme.

La compilation paie sur les charges stables. torch.compile et TensorRT-LLM récompensent la répétition et la prévisibilité. Sur un usage occasionnel, le surrengineering coûte plus qu’il ne rapporte.

La mesure prime sur l’intuition. Le seul juge, c’est votre banc d’essai sur votre charge de travail. Un chiffre sans protocole est un slogan.

Anticiper les évolutions sans parier sur un modèle ou un GPU précis : les kernels matériels progressent (TorchTPU, annoncé en octobre 2026, ouvre PyTorch aux TPU de Google), les architectures MoE se généralisent (avec leurs activations à ~100× la médiane, qui compliquent la quantification), et les contextes longs deviennent la norme. Mais la logique reste : soulager la mémoire, amortir les lectures, mesurer.

En arrière-plan, un enjeu stratégique. L’optimisation locale n’est pas qu’une compétence technique : c’est une compétence de souveraineté. Face à la dépendance aux API, maîtriser sa pile d’inférence, c’est maîtriser ses coûts, ses données et sa continuité de service. Les déploiements on-premise et les architectures comme Blackwell sont cités comme facteurs de souveraineté numérique — un arrière-plan économique et politique qui donne à ce dossier une portée qui dépasse largement les tokens par seconde.

Sources

Article recherché et rédigé automatiquement · Magazine Electrosens
📬 Restez à la pointe
Recevez chaque semaine les nouveautés de ce magazine par email.
💬 Une remarque, une correction ?
Aidez-nous à améliorer cet article. Nous prenons en compte vos retours.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *