DEV-AI
Ollama Benchmark GPU Python Performance

Publié le · Lecture : 18 min

Benchmark Ollama 2026 : quel LLM local choisir selon votre GPU ? RTX 3060, 4070, 4090, 5090 et Apple M4

Ce que vous allez trouver ici : un tableau de référence VRAM + tokens/s pour 11 modèles populaires (llama3, qwen3, gemma3, phi4, mistral) en Q4_K_M, des benchmarks de qualité sourcés (MMLU, HumanEval), un guide de sélection par GPU (RTX 3060 12 GB jusqu'aux RTX 5090 et Apple M4), l'explication des quantizations Q4/Q8, la configuration avancée Ollama, et du code Python pour mesurer vous-même.
11 modèles comparés · Q4_K_M RTX 3060 → RTX 5090 · Apple M4 100% local · open source

1. Méthodologie du benchmark

Comparer des LLMs locaux requiert une rigueur méthodologique stricte : les chiffres publiés sur des forums varient souvent du simple au double selon le matériel, le driver, la taille du contexte et la quantization. Voici les conventions utilisées dans cet article.

Matériel de référence pour les tokens/s
RTX 4090 24 GB VRAM, CUDA 12.6, driver 560+, Ollama version récente. Les chiffres sont des intervalles (ex : 75–95 tok/s) représentant la variabilité observée selon la longueur du prompt et du contexte actif.
Quantization par défaut : Q4_K_M
Sauf mention contraire, tous les modèles sont mesurés en quantization Q4_K_M (4 bits, calibration K-means Mixed), qui est la quantization par défaut proposée par Ollama. C'est le meilleur compromis VRAM/qualité pour un usage général.
Contexte fixé à 4 096 tokens
Les mesures de vitesse sont effectuées avec num_ctx=4096. Un contexte plus long réduit mécaniquement les tokens/s (le KV cache grossit). Pour des contextes de 32K ou 128K, comptez une réduction de 15 à 40% selon le modèle.
Sources des données VRAM
Les tailles VRAM proviennent des fiches Ollama Hub, des rapports techniques officiels (Meta, Google, Alibaba, Microsoft) et de mesures communautaires vérifiées (Reddit r/LocalLLaMA, Open LLM Leaderboard HuggingFace). Les benchmarks qualité (MMLU, HumanEval) sont tirés des rapports techniques officiels.
Avertissement : les tokens/s varient de ±20% selon les conditions réelles (autre charge GPU, contexte, driver). Les chiffres ci-dessous sont des ordres de grandeur orientants, pas des benchmarks certifiés. Utilisez le script Python fourni en section 8 pour mesurer sur votre propre matériel.

2. Tableau principal : VRAM + tokens/s (RTX 4090)

Ce tableau couvre les 11 modèles les plus utilisés sur Ollama en 2026, classés par taille croissante. Les tokens/s sont mesurés sur RTX 4090 24 GB avec Q4_K_M et num_ctx=4096.

Modèle (Q4_K_M) VRAM Tok/s RTX 4090 Contexte Usage recommandé
llama3.2:3b 2 GB 180–220 128K Prototypage rapide, edge
qwen3:4b 2.6 GB 140–180 128K Petit GPU, réponses rapides
gemma3:4b 3.3 GB 120–150 128K Multimodal, vision
mistral:7b 4.1 GB 95–120 32K Usage général, stable
llama3.1:8b ⭐ 4.9 GB 85–110 128K Meilleur équilibre 8B
qwen3:8b 5.2 GB 75–95 128K Code, raisonnement
gemma3:12b 8.1 GB 50–65 128K Qualité ↑, vitesse correcte
phi4:14b 9.3 GB 45–55 16K Raisonnement STEM
qwen3:14b 9.3 GB 45–60 128K Thinking mode, code avancé
gemma3:27b 17 GB 25–35 128K Haute qualité, 24 GB GPU
qwen3:32b 20 GB 20–28 128K Meilleure qualité 24 GB

Mesures indicatives — à reproduire localement. Tok/s sur RTX 4090 24 GB, Q4_K_M, num_ctx=4096, Ollama version récente. Intervalle ±20% selon système, pilotes et longueur de prompt. Sources : Ollama Hub, rapports techniques officiels, r/LocalLLaMA.

180–220
tok/s max
llama3.2:3b
2 GB
VRAM min
llama3.2:3b Q4
20 GB
VRAM max
qwen3:32b Q4
11
modèles
comparés

3. Benchmarks de qualité — MMLU et HumanEval

La vitesse ne dit rien de la qualité. Un modèle 3× plus lent peut valoir la peine s'il réduit les erreurs sur votre tâche. Voici les chiffres de qualité issus des rapports techniques officiels.

3.1 MMLU — connaissances académiques multidisciplinaires

Le Massive Multitask Language Understanding (MMLU) couvre 57 matières académiques (droit, médecine, mathématiques, histoire...) via des QCM à 4 choix. Un score de 50% correspond au hasard, 100% à la perfection. Les LLMs grand public se situent entre 60% et 90%.

Modèle MMLU (%) Source
llama3.2:3b58.7Meta Llama 3.2 Report
gemma3:4b59.6Google Gemma 3 Report
qwen3:4b62.3Qwen3 Technical Report
mistral:7b64.2Mistral AI Blog
llama3.1:8b73.0Meta Llama 3.1 Report
qwen3:8b74.1Qwen3 Technical Report
gemma3:12b72.8Google Gemma 3 Report
phi4:14b84.8Microsoft Phi-4 Report
qwen3:14b82.4Qwen3 Technical Report
gemma3:27b81.9Google Gemma 3 Report
qwen3:32b87.0Qwen3 Technical Report

3.2 HumanEval — génération de code Python

HumanEval (OpenAI) teste la capacité à compléter des fonctions Python à partir d'une docstring et de tests unitaires. Le score pass@1 indique le pourcentage de problèmes résolus correctement du premier coup.

Modèle HumanEval pass@1 (%) Source
llama3.2:3b38.4Meta Llama 3.2 Report
gemma3:4b46.3Google Gemma 3 Report
mistral:7b40.2Mistral AI Blog
llama3.1:8b62.0Meta Llama 3.1 Report
qwen3:8b73.2Qwen3 Technical Report
gemma3:12b67.1Google Gemma 3 Report
phi4:14b82.6Microsoft Phi-4 Report
qwen3:14b79.8Qwen3 Technical Report
gemma3:27b75.3Google Gemma 3 Report
qwen3:32b86.5Qwen3 Technical Report
Lecture des données : phi4:14b obtient le meilleur score MMLU (84.8%) de sa catégorie de taille malgré seulement 14B paramètres, grâce à un entraînement intensif sur données de qualité (Microsoft Research). Qwen3:8b domine HumanEval parmi les 8B. Ces chiffres sont issus des évaluations officielles sur les modèles instruct complets — les quantizations Q4 introduisent une dégradation de 1 à 3 points. Les scores peuvent varier selon la variante base/instruct, la taille exacte du modèle, le mode thinking/non-thinking et le protocole d'évaluation.

4. Guide de sélection par GPU

En pratique, le choix du modèle se fait d'abord par contrainte VRAM. Voici les recommandations concrètes par GPU.

6–8 GB VRAM GTX 1080, RTX 3060 6GB, RTX 2060

Meilleur choix : llama3.2:3b (2 GB, 180–220 tok/s) ou qwen3:4b (2.6 GB, 140–180 tok/s). mistral:7b (4.1 GB) est jouable mais laisse peu de marge. Évitez tout modèle 8B+ — le déchargement CPU dégrade fortement la vitesse.

12 GB VRAM RTX 3060 12GB, RTX 3080 12GB, RX 6700 XT

Meilleur choix : llama3.1:8b (4.9 GB, 85–110 tok/s) ou qwen3:8b (5.2 GB, 75–95 tok/s). gemma3:12b (8.1 GB) tient confortablement et offre une qualité nettement supérieure. Évitez les 14B — ils débordent sur le CPU.

16 GB VRAM ⭐ RTX 3080 Ti, RTX 4070, RTX 4070 Super, RTX 4080

Meilleur choix : qwen3:14b (9.3 GB, 45–60 tok/s) ou phi4:14b (9.3 GB, 45–55 tok/s). gemma3:12b est aussi excellent avec plus de marge mémoire. Sur 16 GB, vous pouvez aussi utiliser du Q8_0 sur les 8B pour une qualité quasi-FP16.

24 GB VRAM RTX 3090, RTX 4090, RTX 4080 Super

Meilleur choix : qwen3:32b (20 GB, 20–28 tok/s) — la meilleure qualité disponible sur un seul GPU grand public. gemma3:27b (17 GB, 25–35 tok/s) est plus rapide avec une qualité proche. Les deux restent pleinement en VRAM avec marge pour un contexte de 16K.

32 GB+ VRAM RTX 5090 (32 GB), RTX 4090 × 2, A100, RTX 6000 Ada

Meilleur choix : qwen3:32b en Q8_0 (~34 GB, déborde légèrement sur la RTX 5090 seule) ou en Q6_K (~26 GB) pour tenir dans les 32 GB. llama3.1:70b en Q4_K_M (~40 GB) nécessite 2 GPUs ou une carte professionnelle (A100/H100).

5. Apple Silicon — M3 et M4

L'Apple Silicon (M3, M4, M4 Pro, M4 Max) représente une alternative sérieuse aux GPU NVIDIA pour l'inférence locale. La mémoire unifiée (shared entre CPU et GPU) permet d'utiliser toute la RAM comme VRAM effective, sans les pénalités de transfert PCIe.

Puce RAM unifiée Modèles recommandés Tok/s estimé (8B Q4)
M3 8GB8 GBllama3.2:3b, qwen3:4b25–40
M3 / M4 16GB16 GBllama3.1:8b, qwen3:8b, gemma3:12b30–50
M4 Pro 24GB ⭐24 GBqwen3:14b, phi4:14b, gemma3:12b Q835–55
M4 Pro 48GB48 GBgemma3:27b, qwen3:32b, 70B Q420–40
M4 Max 128GB128 GB70B Q8, 70B FP1615–30
Apple Silicon vs NVIDIA : Sur un 14B Q4, un M4 Pro 24 GB (~40 tok/s) est comparable à une RTX 4070 16 GB (~50 tok/s), mais avec l'avantage de la silenciosité et de la consommation (~20W vs ~200W). La RTX 4090 reste 2 à 3× plus rapide sur les grands modèles. Pour un usage nomade ou silencieux, l'Apple Silicon est imbattable.

6. Quantization : Q4, Q5, Q8 — que choisir ?

La quantization réduit la précision numérique des poids du modèle pour diminuer la VRAM nécessaire. Comprendre les formats disponibles permet de choisir le bon compromis pour votre usage.

Format Bits/poids VRAM vs FP16 Perte qualité Recommandation
Q4_04 bits÷43–5%À éviter sauf contrainte VRAM extrême
Q4_K_M ⭐4 bits (KM)÷41–2%Défaut Ollama — meilleur compromis général
Q4_K_S4 bits (KS)÷41.5–3%Légèrement plus petit que K_M, qualité ↓
Q5_K_M5 bits÷3.2<1%Bon si VRAM disponible, qualité quasi-Q8
Q8_08 bits÷2~0%Quasi-FP16, si VRAM suffisante
FP1616 bits×1 (référence)0%Référence — rarement nécessaire en pratique

6.1 Comprendre K_M vs K_S

Les formats K_M (Medium) et K_S (Small) sont des variantes de la quantization Q-K (K-means calibration). La différence est dans les couches qui reçoivent un traitement spécial : K_M applique une quantization 6 bits aux couches d'attention (les plus sensibles à la précision) et 4 bits aux couches feedforward. K_S utilise du 4 bits partout. Résultat : K_M est légèrement plus grand (~5%) mais nettement meilleur sur les tâches de raisonnement.

Règle pratique : Si vous avez la VRAM, préférez dans cet ordre : Q8_0 > Q5_K_M > Q4_K_M > Q4_K_S > Q4_0. Pour la plupart des usages quotidiens, Q4_K_M (le défaut Ollama) donne des résultats indiscernables de Q8_0.

6.2 Passer d'une quantization à l'autre avec Ollama

# Télécharger une quantization spécifique
ollama pull qwen3:8b:q8_0      # Q8 — qualité maximale
ollama pull qwen3:8b:q4_k_m   # Q4_K_M — défaut (identique à qwen3:8b)
ollama pull qwen3:8b:q5_k_m   # Q5_K_M — bon compromis

# Vérifier la quantization d'un modèle chargé
ollama show qwen3:8b --verbose

7. Configuration avancée Ollama

Les performances par défaut d'Ollama sont loin d'être optimales. Ces paramètres permettent d'extraire le maximum de votre matériel.

7.1 Variables d'environnement clés

# Linux / macOS — à ajouter dans ~/.bashrc ou ~/.zshrc

# Nombre de layers GPU — défaut : auto (toutes si VRAM suffisante)
export OLLAMA_NUM_GPU=99       # Force tout en GPU, pas de déchargement CPU

# Threads CPU pour les layers déchargées sur CPU
export OLLAMA_NUM_THREAD=8    # Égal au nombre de cœurs physiques P-cores

# Timeout avant déchargement du modèle de la VRAM (défaut : 5min)
export OLLAMA_KEEP_ALIVE=-1   # -1 = garder en VRAM indéfiniment

# Flash Attention — accélère l'attention sur les longs contextes
export OLLAMA_FLASH_ATTENTION=1

# KV cache en FP16 (défaut FP32) — divise par 2 la mémoire du cache
export OLLAMA_KV_CACHE_TYPE=f16  # si supporté par votre version

7.2 Options par requête (num_ctx, temperature)

import ollama

response = ollama.chat(
    model="qwen3:8b",
    messages=[{"role": "user", "content": "Explique les transformers en 3 points."}],
    options={
        "num_ctx": 4096,      # Contexte : plus petit = plus rapide
        "num_gpu": 99,        # Forcer tout sur GPU
        "temperature": 0.7,   # 0.7 pour usage général, 0.6 pour code/raisonnement
        "top_p": 0.9,
        "repeat_penalty": 1.1,
        "num_predict": 512,  # Limite la longueur de réponse
        "seed": 42,           # Reproductibilité pour les benchmarks
    }
)

7.3 Modelfile pour une configuration persistante

# Créer un Modelfile
# cat Modelfile
FROM qwen3:8b

# Paramètres fixes pour ce déploiement
PARAMETER num_ctx 8192
PARAMETER temperature 0.6
PARAMETER repeat_penalty 1.1

SYSTEM """Tu es un assistant expert en Python. Réponds en français, concisément."""

# Créer le modèle personnalisé
ollama create mon-qwen3-python -f Modelfile
ollama run mon-qwen3-python

8. Code Python pour benchmarker soi-même

Le script ci-dessous mesure les tokens/s de façon reproductible sur votre propre configuration. Il tourne plusieurs modèles en séquence et exporte les résultats.

"""
benchmark_ollama.py — Mesure tokens/s pour plusieurs modèles Ollama
pip install ollama
"""
import ollama
import time
import json
from statistics import mean, stdev

# Modèles à benchmarker — ajustez selon vos modèles téléchargés
MODELS = [
    "llama3.2:3b",
    "qwen3:4b",
    "llama3.1:8b",
    "qwen3:8b",
    "qwen3:14b",
]

# Prompt de test standard (longueur fixe pour comparabilité)
PROMPT = """Explique en détail le principe de l'attention multi-têtes dans les transformers. 
Décris le mécanisme mathématique, les queries, keys et values, 
et pourquoi l'attention scaled dot-product est préférable à l'attention simple."""

NUM_RUNS = 3          # Runs par modèle pour la moyenne
NUM_CTX = 4096        # Contexte fixe pour comparabilité


def benchmark_model(model: str, n_runs: int = 3) -> dict:
    """Mesure les tokens/s d'un modèle sur plusieurs runs."""
    results = []
    
    # Warm-up : premier run non compté (chargement du modèle)
    try:
        ollama.generate(
            model=model,
            prompt="test",
            options={"num_predict": 5, "num_ctx": 512}
        )
    except Exception as e:
        return {"model": model, "error": str(e)}
    
    for i in range(n_runs):
        start = time.perf_counter()
        
        resp = ollama.generate(
            model=model,
            prompt=PROMPT,
            options={
                "num_ctx": NUM_CTX,
                "num_predict": 256,
                "temperature": 0.0,  # Deterministe
                "seed": 42,
            }
        )
        
        elapsed = time.perf_counter() - start
        
        # Ollama fournit aussi eval_count et eval_duration dans la réponse
        eval_count = resp.get("eval_count", 0)
        eval_duration_ns = resp.get("eval_duration", 1)
        
        # Tokens/s depuis les métadonnées Ollama (plus précis)
        toks_per_s = eval_count / (eval_duration_ns / 1e9) if eval_duration_ns > 0 else 0
        
        results.append({
            "run": i + 1,
            "tokens_generated": eval_count,
            "elapsed_s": round(elapsed, 2),
            "tokens_per_s": round(toks_per_s, 1),
        })
        print(f"  Run {i+1}/{n_runs}: {toks_per_s:.1f} tok/s ({eval_count} tokens, {elapsed:.2f}s)")
    
    tps_values = [r["tokens_per_s"] for r in results]
    return {
        "model": model,
        "runs": results,
        "mean_tps": round(mean(tps_values), 1),
        "std_tps": round(stdev(tps_values), 1) if len(tps_values) > 1 else 0,
        "min_tps": round(min(tps_values), 1),
        "max_tps": round(max(tps_values), 1),
    }


def run_benchmark():
    all_results = []
    
    print(f"Benchmark Ollama — {len(MODELS)} modèles, {NUM_RUNS} runs chacun\n")
    
    for model in MODELS:
        print(f"\n{'='*50}\nModèle : {model}")
        result = benchmark_model(model, NUM_RUNS)
        all_results.append(result)
        
        if "error" not in result:
            print(f"  --> Moyenne : {result['mean_tps']} ± {result['std_tps']} tok/s")
    
    # Résumé trié par vitesse
    print("\n\n=== RÉSULTATS TRIÉS PAR VITESSE ===")
    valid = [r for r in all_results if "error" not in r]
    valid.sort(key=lambda x: x["mean_tps"], reverse=True)
    
    for r in valid:
        print(f"  {r['model']:25s} {r['mean_tps']:6.1f} tok/s  (min:{r['min_tps']} max:{r['max_tps']})")
    
    # Export JSON
    with open("benchmark_results.json", "w") as f:
        json.dump(all_results, f, indent=2, ensure_ascii=False)
    print("\nRésultats exportés dans benchmark_results.json")


if __name__ == "__main__":
    run_benchmark()
Astuce : Ollama fournit eval_count (tokens générés) et eval_duration (nanosecondes) dans chaque réponse. Ces métriques internes sont plus fiables que time.perf_counter() car elles excluent les latences réseau et d'I/O. Utilisez-les de préférence pour comparer des modèles.

9. Benchmarks en contexte RAG

Les benchmarks tokens/s sur des prompts courts ne reflètent pas les performances réelles dans un pipeline RAG, où les contextes sont typiquement de 2 000 à 8 000 tokens. La vitesse décroît avec la taille du KV cache.

Modèle Tok/s ctx=512 Tok/s ctx=4K Tok/s ctx=16K Dégradation
llama3.1:8b1108565−41%
qwen3:8b957555−42%
qwen3:14b604532−47%
gemma3:12b655038−42%

Estimations sur RTX 4090, Q4_K_M. La dégradation avec le contexte est liée à la croissance linéaire du KV cache. OLLAMA_FLASH_ATTENTION=1 réduit cette dégradation de 15 à 25%.

"""Pipeline RAG minimal avec Ollama — mesure des performances"""
import ollama
import time

def rag_query(model: str, documents: list[str], question: str) -> dict:
    """Requête RAG avec mesure de performance."""
    context = "\n\n".join(documents)
    
    prompt = f"""Réponds uniquement à partir des documents suivants.

Documents :
{context}

Question : {question}

Réponse :"""
    
    start = time.perf_counter()
    resp = ollama.generate(
        model=model,
        prompt=prompt,
        options={
            "num_ctx": 8192,
            "temperature": 0.1,
            "num_predict": 512,
        }
    )
    elapsed = time.perf_counter() - start
    
    tps = resp.get("eval_count", 0) / (resp.get("eval_duration", 1) / 1e9)
    
    return {
        "response": resp["response"],
        "tokens_per_s": round(tps, 1),
        "total_time_s": round(elapsed, 2),
        "context_tokens": resp.get("prompt_eval_count", 0),
    }

10. Analyse modèle par modèle

10.1 llama3.1:8b — la référence équilibrée

Le llama3.1:8b de Meta reste la valeur sûre de la catégorie 8B. Avec 4.9 GB en Q4_K_M, il tient dans presque tous les GPU récents. Son point fort est la constance : bonnes performances en anglais et en français, excellent support tool use, intégration native dans LangChain et LlamaIndex. MMLU à 73.0% et HumanEval à 62.0%. Contexte de 128K tokens.

10.2 qwen3:8b — meilleur sur le code

Le qwen3:8b (Alibaba) dépasse le llama3.1:8b sur les tâches de code (HumanEval 73.2% vs 62.0%) et de raisonnement, au prix d'une VRAM légèrement supérieure (5.2 GB). Selon le modèle et le template Ollama utilisé, le mode thinking peut être activé via le format attendu par le modèle. Son vocabulaire de 151K tokens le rend aussi plus efficace sur les langues non-latines.

10.3 gemma3:12b — multimodal unique dans sa catégorie

Le gemma3:12b (Google DeepMind) est le seul modèle de cette liste avec des capacités de vision (analyse d'images) sous Ollama. Avec 8.1 GB VRAM et 50–65 tok/s sur RTX 4090, c'est le meilleur choix si vous avez besoin de traiter des images localement. Ses benchmarks texte (MMLU 72.8%) sont solides mais légèrement inférieurs à qwen3:8b.

10.4 phi4:14b — champion MMLU de sa taille

Microsoft phi4:14b atteint 84.8% MMLU et 82.6% HumanEval — des scores proches de modèles deux fois plus grands. Son secret : un entraînement intensif sur des données synthétiques de haute qualité (textbooks, exercices STEM). Attention : fenêtre de contexte limitée à 16K tokens (vs 128K pour qwen3:14b).

10.5 qwen3:32b — roi du 24 GB

Sur une RTX 4090 ou RTX 3090, le qwen3:32b (20 GB Q4_K_M) est le meilleur choix absolu. MMLU à 87.0%, HumanEval à 86.5%, contexte 128K. Avec thinking mode, il rivalise avec des API cloud pour les tâches de raisonnement complexe. La vitesse de 20–28 tok/s est acceptable pour un usage interactif.

10.6 mistral:7b — choix legacy encore valide

Le mistral:7b est un modèle mature (2023) qui reste pertinent pour les intégrations existantes. Il est légèrement en retrait sur MMLU (64.2%) et HumanEval (40.2%) comparé aux 8B récents, mais très rapide (95–120 tok/s) et bien supporté par tous les frameworks. À utiliser si votre code est déjà écrit pour Mistral.

11. Inférence CPU seule : ce qu'il faut savoir

Sans GPU dédié, Ollama utilise llama.cpp en mode CPU. Les performances sont drastiquement inférieures mais restent fonctionnelles pour les petits modèles.

Configuration CPU Tok/s (3B Q4) Tok/s (7B Q4) RAM min
Core i5 (4 cœurs)3–51–28 GB
Core i7 / Ryzen 7 (8 cœurs)6–102–416 GB
Core i9 / Ryzen 9 (16+ cœurs)10–184–716 GB
Threadripper / EPYC (32+ cœurs)18–308–1432 GB
Conseil pratique CPU : En mode CPU pur, limitez-vous aux modèles 3B–4B pour une expérience interactive. Le qwen3:4b (2.6 GB RAM) à 6–10 tok/s sur un i7 reste utilisable. Pour des traitements en batch (non temps-réel), les modèles 7B–8B sont envisageables.
# Forcer l'inférence CPU uniquement (même si GPU présent)
export OLLAMA_NUM_GPU=0

# Optimiser le nombre de threads CPU
export OLLAMA_NUM_THREAD=16    # Mettre le nombre de cœurs physiques

# Sous Windows PowerShell
$env:OLLAMA_NUM_GPU="0"
$env:OLLAMA_NUM_THREAD="16"

12. Évolutions attendues en 2026

Le paysage des LLMs locaux évolue rapidement. Plusieurs tendances se dessinent pour la deuxième moitié de 2026.

Quantization 2 bits et 3 bits (Q2_K, Q3_K_M)
Des travaux récents (BitNet, 1.58-bit LLMs de Microsoft) suggèrent que des quantizations agressives à 1.58 ou 2 bits sont possibles si les modèles sont entraînés spécifiquement pour. On peut s'attendre à davantage d'expérimentations autour de Q2/Q3 dans l'écosystème llama.cpp/Ollama, mais aucun calendrier officiel n'est communiqué à ce jour.
Spéculative decoding et EAGLE
Le décodage spéculatif (utiliser un petit modèle "draft" pour proposer des tokens validés par le grand modèle) peut doubler la vitesse d'inférence. Des approches comme EAGLE et le speculative decoding pourraient améliorer les vitesses d'inférence dans l'écosystème local.
Multi-GPU natif et inférence distribuée
Ollama améliore progressivement son support multi-GPU. Avec deux RTX 4090, un qwen3:32b en Q8 (34 GB) devient faisable en 2026. Les outils comme llama.cpp-rpc et vLLM progressent également sur la distribution de tenseurs entre GPUs et même entre machines en réseau local.
Modèles 1B–3B de plus en plus capables
La distillation et les méthodes d'entraînement synthétique (Phi-4 Mini, Gemma 3 1B) permettent à des modèles sous 3B de dépasser des modèles 7B d'il y a deux ans. En 2026, des 3B spécialisés (code, SQL, extraction) seront compétitifs avec les 7B généralistes pour des tâches ciblées.

FAQ

Quel LLM local choisir avec une RTX 3060 12 GB ?

Avec une RTX 3060 12 GB, les meilleurs choix sont llama3.1:8b (Q4_K_M, 4.9 GB, ~45 tok/s) pour l'équilibre général, ou qwen3:8b (5.2 GB, ~40 tok/s) pour le code et le raisonnement. Le gemma3:12b (8.1 GB) tient aussi confortablement et offre les capacités vision. Évitez les 14B+ qui débordent sur le CPU.

Quelle est la différence entre Q4_K_M et Q8_0 pour les LLMs ?

Q4_K_M utilise 4 bits avec calibration K-means Mixed — VRAM divisée par ~4 vs FP16, perte de qualité de 1–2% sur les benchmarks. Q8_0 utilise 8 bits — VRAM divisée par ~2, perte quasi nulle. Pour la plupart des usages quotidiens, Q4_K_M est indiscernable de Q8_0. Préférez Q8_0 si vous avez la VRAM disponible et que la précision est critique (génération de code complexe, calculs STEM).

Comment mesurer les tokens par seconde d'un LLM Ollama ?

Trois méthodes : (1) ollama run modele --verbose affiche eval_rate en tok/s à la fin de chaque réponse ; (2) l'API ollama.generate() en Python retourne eval_count et eval_duration dans la réponse ; (3) le script Python complet de la section 8 de cet article donne des mesures reproductibles avec moyennes et intervalles.

Qwen3 ou Gemma 3 : lequel choisir en 2026 ?

Dépend de l'usage. Qwen3 (Alibaba) excelle en code (HumanEval 73.2% vs 67.1% pour gemma3:12b) et raisonnement avec thinking mode. Il très bon support multilingue et a une licence Apache 2.0 complète. Gemma 3 (Google) est le seul à offrir la vision (images) dans cette gamme de tailles, et sa génération de texte est très fluide. Pour du code ou du raisonnement : Qwen3. Pour du multimodal : Gemma 3.

Peut-on faire tourner un LLM 14B sans GPU dédié ?

Oui, mais lentement : 1 à 7 tok/s selon le CPU, contre 45–60 tok/s sur GPU. Ollama utilise llama.cpp qui supporte l'inférence CPU pure. Pour un 14B Q4_K_M (~9 GB), il faut au minimum 16 GB de RAM. L'Apple Silicon (M3/M4) est une excellente alternative : la mémoire unifiée permet des vitesses de 35–55 tok/s sur un 14B avec un M4 Pro 24 GB — comparable à une RTX 4070.

Les LLMs locaux sont-ils aussi bons que ChatGPT ou Claude ?

Sur les tâches générales, les meilleurs LLMs locaux (qwen3:32b, gemma3:27b) sont proches mais légèrement en retrait des APIs propriétaires frontier (GPT-4o, Claude 3.5 Sonnet). L'écart se comble rapidement. En revanche, les LLMs locaux ont un avantage décisif : confidentialité totale, pas de coût par token, latence locale, et personnalisation via Modelfile ou fine-tuning.

Conclusion

Le choix du bon LLM local dépend avant tout de votre GPU. Avec 12 GB de VRAM (RTX 3060), le llama3.1:8b ou qwen3:8b offrent un excellent point d'entrée à 40–85 tok/s. Avec 16 GB (RTX 4070), le qwen3:14b ou phi4:14b franchissent un palier qualitatif significatif. Avec 24 GB (RTX 4090), le qwen3:32b rivalise sérieusement avec les APIs cloud pour les tâches de code et de raisonnement.

La quantization Q4_K_M reste le meilleur compromis par défaut — une perte de 1 à 2% sur les benchmarks pour une réduction de VRAM par 4. Activez OLLAMA_FLASH_ATTENTION=1 et OLLAMA_KEEP_ALIVE=-1 pour optimiser les performances sans effort.

Pour démarrer : téléchargez ollama pull llama3.1:8b (4.9 GB), lancez le script de benchmark de la section 8 sur votre machine, puis comparez avec qwen3:8b. En 10 minutes vous aurez vos propres chiffres de référence adaptés à votre matériel.
Pour aller plus loin, commencez par le guide Qwen3 pour le code, puis le tutoriel RAG local avec Ollama.

Articles liés

QWEN3
Qwen3 avec Ollama en Python
Architecture MoE, thinking mode, benchmarks et API Python complète.
GEMMA 3
Gemma 3 avec Ollama et Python
Multimodal, 128K tokens, vision et API Python — guide complet.
RAG
RAG avec Ollama en Python
Pipeline complet RAG local — LangChain, Chroma, embeddings.