Publié le · Lecture : 18 min
Benchmark Ollama 2026 : quel LLM local choisir selon votre GPU ? RTX 3060, 4070, 4090, 5090 et Apple M4
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.
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.
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.
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.
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.
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.
llama3.2:3b
llama3.2:3b Q4
qwen3:32b Q4
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:3b | 58.7 | Meta Llama 3.2 Report |
| gemma3:4b | 59.6 | Google Gemma 3 Report |
| qwen3:4b | 62.3 | Qwen3 Technical Report |
| mistral:7b | 64.2 | Mistral AI Blog |
| llama3.1:8b | 73.0 | Meta Llama 3.1 Report |
| qwen3:8b | 74.1 | Qwen3 Technical Report |
| gemma3:12b | 72.8 | Google Gemma 3 Report |
| phi4:14b | 84.8 | Microsoft Phi-4 Report |
| qwen3:14b | 82.4 | Qwen3 Technical Report |
| gemma3:27b | 81.9 | Google Gemma 3 Report |
| qwen3:32b | 87.0 | Qwen3 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:3b | 38.4 | Meta Llama 3.2 Report |
| gemma3:4b | 46.3 | Google Gemma 3 Report |
| mistral:7b | 40.2 | Mistral AI Blog |
| llama3.1:8b | 62.0 | Meta Llama 3.1 Report |
| qwen3:8b | 73.2 | Qwen3 Technical Report |
| gemma3:12b | 67.1 | Google Gemma 3 Report |
| phi4:14b | 82.6 | Microsoft Phi-4 Report |
| qwen3:14b | 79.8 | Qwen3 Technical Report |
| gemma3:27b | 75.3 | Google Gemma 3 Report |
| qwen3:32b | 86.5 | Qwen3 Technical Report |
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.
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.
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.
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.
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.
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 8GB | 8 GB | llama3.2:3b, qwen3:4b | 25–40 |
| M3 / M4 16GB | 16 GB | llama3.1:8b, qwen3:8b, gemma3:12b | 30–50 |
| M4 Pro 24GB ⭐ | 24 GB | qwen3:14b, phi4:14b, gemma3:12b Q8 | 35–55 |
| M4 Pro 48GB | 48 GB | gemma3:27b, qwen3:32b, 70B Q4 | 20–40 |
| M4 Max 128GB | 128 GB | 70B Q8, 70B FP16 | 15–30 |
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_0 | 4 bits | ÷4 | 3–5% | À éviter sauf contrainte VRAM extrême |
| Q4_K_M ⭐ | 4 bits (KM) | ÷4 | 1–2% | Défaut Ollama — meilleur compromis général |
| Q4_K_S | 4 bits (KS) | ÷4 | 1.5–3% | Légèrement plus petit que K_M, qualité ↓ |
| Q5_K_M | 5 bits | ÷3.2 | <1% | Bon si VRAM disponible, qualité quasi-Q8 |
| Q8_0 | 8 bits | ÷2 | ~0% | Quasi-FP16, si VRAM suffisante |
| FP16 | 16 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.
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()
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:8b | 110 | 85 | 65 | −41% |
| qwen3:8b | 95 | 75 | 55 | −42% |
| qwen3:14b | 60 | 45 | 32 | −47% |
| gemma3:12b | 65 | 50 | 38 | −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–5 | 1–2 | 8 GB |
| Core i7 / Ryzen 7 (8 cœurs) | 6–10 | 2–4 | 16 GB |
| Core i9 / Ryzen 9 (16+ cœurs) | 10–18 | 4–7 | 16 GB |
| Threadripper / EPYC (32+ cœurs) | 18–30 | 8–14 | 32 GB |
# 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.
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.
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.
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.
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.
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.