Intermédiaire 10 minOutils

Ollama vs llama.cpp : lequel choisir en 2026 ?

Poser la question llama cpp vs ollama, c'est comparer un moteur et la voiture construite autour. Ollama embarque llama.cpp comme cœur d'inférence : les tokens sont calculés par le même code dans les deux cas. La vraie différence est ailleurs — dans ce qu'Ollama automatise pour vous, et dans le contrôle fin qu'il vous cache. Ce guide tranche : ce qu'Ollama ajoute réellement, un benchmark des deux sur le même fichier GGUF, les réglages accessibles uniquement en llama.cpp nu, et un verdict clair selon que vous débutez, développez ou gérez un homelab.

Par Mohamed Meguedmi·Màj 2026-09-07·Testé sur Windows, macOS, Linux

#Le lien réel entre Ollama et llama.cpp

llama.cpp est le projet C/C++ de Georgi Gerganov qui exécute des modèles de langage au format GGUF sur CPU et GPU, sans dépendance à Python ni à PyTorch. C'est la brique d'inférence de référence de tout l'écosystème local : LM Studio, KoboldCpp, Jan et Ollama s'appuient dessus, directement ou via un fork.

Ollama n'est donc pas un concurrent de llama.cpp au sens strict : c'est une surcouche. Il embarque son propre moteur dérivé de llama.cpp, y ajoute un gestionnaire de modèles, un daemon en arrière-plan et une API. Quand vous tapez `ollama run qwen3`, c'est du code issu de llama.cpp qui produit les tokens. La question n'est pas « lequel est le plus rapide » — à quantization et matériel égaux, les performances sont très proches — mais « quel niveau d'abstraction vous convient ».

i
Même moteur, deux philosophies
Ollama vise le zéro-configuration : il décide pour vous du nombre de couches à envoyer sur le GPU, du format de cache, du contexte. llama.cpp vous expose chacun de ces leviers en ligne de commande. L'un optimise le temps avant le premier token ; l'autre optimise le contrôle.

#Ce qu'Ollama ajoute réellement au-dessus de llama.cpp

Le kit IA Locale

Ton ChatGPT privé et gratuit sur ta machine en 1 heure — LM Studio, Ollama, Open WebUI, tes documents, sans cloud.

  • Espace en ligne à vie
  • PDF + fichiers
  • Remboursé 30 j

Compiler et lancer llama.cpp à la main, c'est gérer soi-même le téléchargement des GGUF, les chemins de fichiers et une longue ligne de flags. Ollama absorbe tout cela. Voici concrètement ce qu'il apporte en plus du moteur nu :

Registre et pull
`ollama pull qwen3:8b` télécharge le modèle depuis ollama.com, choisit une quantization par défaut (souvent Q4_K_M) et le range dans un magasin de blobs. Pas de chasse au bon fichier sur Hugging Face.
Daemon persistant
Un service tourne en fond et écoute sur http://localhost:11434. Le modèle reste chargé en mémoire entre deux requêtes (keep-alive) et se décharge tout seul après inactivité.
Offload GPU automatique
Ollama estime la VRAM disponible et répartit les couches entre GPU et CPU sans que vous ayez à régler `-ngl`. Pratique, mais parfois trop prudent.
Modelfile
Un fichier déclaratif (à la Dockerfile) qui fige un modèle de base, un system prompt, une température et un template de chat sous un nom réutilisable.
API OpenAI-compatible
Un endpoint /v1/chat/completions prêt à l'emploi, en plus de l'API native /api/generate. N'importe quel client OpenAI se branche dessus en changeant l'URL de base.

En face, llama.cpp vous laisse tout faire — mais vous devez tout faire. Vous récupérez le GGUF vous-même, vous écrivez la ligne de commande, et vous gérez le cycle de vie du processus. C'est le prix du contrôle total, que la suite de ce comparatif llama cpp vs ollama va détailler.

#Prérequis

Le seul facteur qui décide vraiment de ce que vous pourrez faire tourner, c'est la mémoire (RAM, ou VRAM sur GPU dédié). Ces repères en Q4_K_M valent pour les deux outils, puisque le moteur est le même :

3B ≈ 2 Go
Tient sur presque tout, y compris une RTX 3060 12 Go avec une marge énorme.
7B ≈ 5 Go
Confortable dès 8 Go de VRAM (RTX 3060, 4060).
14B ≈ 9 Go
Passe entièrement sur une RTX 3060 12 Go ou une 4070 12 Go.
32B ≈ 19 Go
Demande une RTX 4090 24 Go, ou un offload partiel CPU/GPU sur 16 Go.
70B ≈ 40 Go
Nécessite du multi-GPU, un Mac à mémoire unifiée (M4 Pro 48 Go) ou un offload agressif.
Un GGUF, deux outils
Vous n'avez pas besoin de télécharger deux fois le modèle. Un même fichier .gguf récupéré sur Hugging Face se lance directement avec llama.cpp, et s'importe dans Ollama via un Modelfile `FROM ./modele.gguf`. C'est ce qui rend le benchmark plus bas parfaitement comparable.

#Installer et lancer les deux

  1. 01
    Installer Ollama
    Le script officiel installe le daemon et la CLI en une commande sur Linux ; sur macOS et Windows, un installeur graphique est fourni sur ollama.com. Une fois en place, le service écoute sur http://localhost:11434.
  2. 02
    Lancer un modèle avec Ollama
    `ollama run qwen3:8b` télécharge le modèle au premier appel puis ouvre une session de chat. Rien d'autre à configurer : offload GPU, contexte et template sont gérés automatiquement.
  3. 03
    Compiler llama.cpp
    On clone le dépôt ggml-org/llama.cpp et on compile avec CMake. L'option de backend GPU dépend de votre matériel : CUDA pour NVIDIA, Metal (activé par défaut) sur Mac, ROCm ou Vulkan pour AMD.
  4. 04
    Lancer un GGUF avec llama.cpp
    `llama-cli` charge un fichier .gguf explicite avec tous ses réglages sur la ligne de commande : nombre de couches GPU (`-ngl`), taille de contexte (`-c`), threads CPU (`-t`). Rien n'est deviné à votre place.
Ollama — démarrage immédiat
# Installer (Linux) puis lancer un modèle
curl -fsSL https://ollama.com/install.sh | sh
ollama run qwen3:8b

# Vérifier le daemon et lister les modèles
curl http://localhost:11434/api/tags
ollama list
llama.cpp — compilation et lancement
# Cloner et compiler avec le backend CUDA (NVIDIA)
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j

# Lancer un GGUF avec 35 couches sur le GPU et 8192 de contexte
./build/bin/llama-cli -m ./qwen3-8b-Q4_K_M.gguf -ngl 35 -c 8192 -p "Bonjour"
!
Le piège de la compilation GPU
Compiler sans le bon flag de backend (`-DGGML_CUDA=ON`, `-DGGML_HIPBLAS=ON` pour ROCm, `-DGGML_VULKAN=ON`) produit un binaire CPU-only, silencieusement. Si llama.cpp vous semble dix fois plus lent qu'Ollama, c'est presque toujours ça : votre build n'utilise pas le GPU. Vérifiez le message « offloaded 35/35 layers to GPU » au chargement.

#Benchmark simple des deux sur le même GGUF

Le meilleur moyen de couper court aux débats : mesurer les deux sur le même fichier, sur la même machine. llama.cpp fournit `llama-bench`, un outil dédié qui isole le débit de génération (tokens/seconde) et le traitement du prompt (prompt processing).

Mesurer llama.cpp
# Débit brut du moteur sur le GGUF, tout GPU
./build/bin/llama-bench -m ./qwen3-8b-Q4_K_M.gguf -ngl 99
# Sortie : colonnes pp (prompt) et tg (génération) en tok/s
Mesurer Ollama sur le MÊME fichier
# Importer le GGUF dans Ollama sans le re-télécharger
printf 'FROM ./qwen3-8b-Q4_K_M.gguf\n' > Modelfile
ollama create qwen3-local -f Modelfile

# Chronométrer une génération (--verbose affiche les tok/s)
ollama run qwen3-local --verbose "Explique la photosynthèse en 200 mots"

Le résultat typique en 2026, GGUF identique et couches entièrement sur le GPU : le débit de génération est quasi identique, à quelques pour cent près. C'est logique, c'est le même noyau de calcul. Les écarts que l'on observe viennent presque toujours de réglages implicites différents, pas du moteur :

Couches offloadées
Ollama peut laisser quelques couches sur le CPU par prudence VRAM, là où `llama-bench -ngl 99` pousse tout sur le GPU. Résultat : Ollama paraît plus lent alors que c'est un choix de répartition.
Taille de contexte
Un contexte plus grand réserve plus de VRAM pour le cache KV et réduit la place pour les poids. Comparez à contexte égal.
Flash attention et cache KV
Activés ou non, quantifiés ou non, ces réglages changent le débit. En llama.cpp vous les fixez ; dans Ollama ils dépendent de la version et de variables d'environnement.
i
La vraie conclusion du benchmark
À configuration strictement identique, Ollama et llama.cpp délivrent le même nombre de tokens par seconde. Choisir entre les deux n'est donc jamais une question de vitesse pure — c'est une question de contrôle et de confort.

#Réglages fins accessibles seulement dans llama.cpp

C'est ici que la comparaison llama cpp vs ollama penche franchement d'un côté. En exposant directement les flags du moteur, llama.cpp donne accès à des leviers qu'Ollama masque ou n'expose que partiellement. Pour un usage avancé, ces réglages changent tout :

Offload chirurgical (-ngl)
Vous décidez au layer près combien de couches vont sur le GPU. Sur une VRAM juste suffisante, gagner 2 ou 3 couches contre Ollama peut faire passer un modèle de « lent » à « fluide ».
Cache KV quantifié (-ctk/-ctv)
Quantifier le cache KV en q8_0 divise presque par deux la mémoire du contexte, permettant des fenêtres beaucoup plus longues à VRAM constante — un levier peu accessible côté Ollama.
Flash attention (--flash-attn)
Activation explicite de l'attention optimisée, avec un impact direct sur la vitesse et la mémoire des longs contextes.
Décodage spéculatif (--model-draft)
Brancher un petit modèle « brouillon » pour accélérer un gros modèle. Le gain peut être considérable sur du code, et c'est natif en llama.cpp.
Grammaires GBNF (--grammar)
Contraindre la sortie à une grammaire formelle (JSON strict, énumération, format maison). Indispensable pour du structured output fiable, et bien plus granulaire que le mode JSON d'Ollama.
RoPE et échelle de contexte
Ajuster `--rope-freq-base` et `--rope-freq-scale` pour étendre le contexte au-delà de l'entraînement d'origine, en maîtrisant la dégradation.

Ollama expose une partie de ces réglages via les paramètres du Modelfile ou des variables d'environnement, mais rarement avec la même granularité, et souvent avec un temps de retard sur les nouveautés de llama.cpp. Si votre besoin est « le contexte le plus long possible sur ma VRAM » ou « du JSON garanti valide », le moteur nu vous donne des vis que la surcouche a soudées.

#Serveur API : Ollama vs llama-server

Les deux savent servir un modèle en HTTP. Ollama expose son daemon sur http://localhost:11434 avec une API native (/api/generate, /api/chat) et un endpoint OpenAI-compatible (/v1/chat/completions). De son côté, llama.cpp fournit `llama-server`, un binaire qui lance une API OpenAI-compatible et une petite interface web incluse.

Servir avec llama-server
# API OpenAI-compatible sur le port 8080, tout GPU
./build/bin/llama-server -m ./qwen3-8b-Q4_K_M.gguf -ngl 99 -c 8192 --port 8080
# Interface web : http://localhost:8080  ·  API : /v1/chat/completions
Multi-modèles à la demande
Ollama charge/décharge automatiquement plusieurs modèles selon les requêtes. `llama-server` sert un modèle par processus — plus simple à raisonner, moins magique.
Contrôle des flags
Avec llama-server, chaque réglage moteur (contexte, cache KV, flash attention) est un flag de lancement explicite. Idéal pour figer une config de production reproductible.
Écosystème
L'API 11434 d'Ollama est devenue un standard de fait : Open WebUI, éditeurs de code et intégrations la ciblent directement. C'est un vrai argument de confort.
On peut mélanger
Rien n'oblige à choisir un camp définitif. Beaucoup gardent Ollama pour l'usage quotidien et le branchement à Open WebUI, et sortent llama-server pour une charge précise qui exige un contexte étiré ou un cache KV quantifié. Même GGUF, deux points d'entrée.

#Verdict par profil : débutant, dev, homelab

Puisque le moteur est commun, le verdict ne porte pas sur la performance mais sur votre profil et votre tolérance à la ligne de commande.

Débutant → Ollama
Une commande pour installer, une pour lancer, un modèle qui « marche » sans régler quoi que ce soit. Aucune raison de compiler du C++ pour discuter avec un LLM. Restez sur Ollama, éventuellement avec Open WebUI par-dessus.
Développeur → les deux
Ollama pour prototyper vite et pour l'API OpenAI immédiate ; llama.cpp quand vous avez besoin de grammaires GBNF, de décodage spéculatif ou d'un contrôle exact du cache KV. Le passage de l'un à l'autre est indolore, le GGUF est partagé.
Homelab / self-host → llama.cpp (llama-server)
Pour presser la dernière goutte d'une VRAM comptée, figer une config reproductible et étirer le contexte, le moteur nu gagne. La contrepartie — compiler, écrire les flags, gérer les processus — est justement ce que vous cherchez à maîtriser.

En une phrase : Ollama est le meilleur point de départ et suffit à l'immense majorité des usages ; on passe à llama.cpp nu le jour où un réglage précis — contexte, cache KV, grammaire, offload au layer près — devient le facteur limitant. Ce n'est pas un remplacement, c'est une montée en contrôle.


#Pour aller plus loin

Ces guides prolongent ce comparatif, de l'installation au réglage fin :

Démarrer avec Ollama
« Installer Ollama en 5 minutes (Windows, macOS, Linux) » couvre l'installation du daemon et le premier modèle, côté simplicité.
Servir sans Ollama
« llama-server : une API OpenAI locale avec llama.cpp » détaille l'offloading fin des layers et l'interface web incluse, côté contrôle.
Choisir sa quantization
« Quantization GGUF en 2026 : Q4_K_M vs Q5_K_M vs Q6_K » aide à sélectionner le bon fichier .gguf, commun aux deux outils.
Ce guide vous a aidé ?

Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.