DEV-AI
Ollama LLM Local Open Source Python GPU · CPU

Publié le · Lecture : 15 min

Ollama : héberger un LLM localement en 2026 — guide complet

Ce que vous allez apprendre : installer Ollama sur n'importe quel OS, choisir le bon modèle selon votre GPU, utiliser l'API Python et REST, intégrer Ollama dans vos applications via la compatibilité OpenAI, et identifier les cas d'usage où un LLM local bat le cloud.
macOS · Linux · Windows Llama · Mistral · Gemma · Qwen · DeepSeek API OpenAI compatible

1. Pourquoi faire tourner un LLM en local ?

La question revient souvent : pourquoi se compliquer la vie avec une installation locale quand ChatGPT, Claude ou Mistral Le Chat sont accessibles en un clic ? La réponse tient en quatre raisons concrètes.

Données d'inférence locales

Les données que vous soumettez au modèle restent sur votre machine — hors téléchargement initial des poids. Idéal pour les données médicales, juridiques, financières ou propriétaires.

Zéro latence réseau

Pas d'aller-retour internet. Sur une RTX 4070, vous obtenez 60-80 tokens/s (selon le modèle, la quantisation et le contexte actif) — ce qui peut être plus rapide que certaines APIs cloud, notamment face à la latence réseau incompressible.

Coût marginal quasi nul

Après l'investissement hardware (GPU + électricité + maintenance), le coût marginal par token tend vers zéro. Pour un usage intensif (millions de tokens/jour), l'économie est significative.

Contrôle total

Pas de rate limits, pas de downtime cloud, pas de changements de modèle imposés. Vous choisissez la version exacte.

Ollama est aujourd'hui l'outil le plus simple pour y parvenir. En une commande, vous téléchargez et lancez Llama 3, Mistral, Gemma, Qwen, DeepSeek ou des dizaines d'autres modèles open source. Il expose automatiquement une API REST locale compatible avec l'interface OpenAI.

Comment fonctionne Ollama ? — Pipeline complet

Application Script Python / curl HTTP POST /api/chat :11434 Ollama API localhost:11434 Scheduler Gestion mémoire Modèle en VRAM Warm — ~10-50ms Inférence GPU immédiate Stockage disque Modèle GGUF (~4-42 Go) Cold start 3-15 secondes Chargement VRAM Quantisation Q4/Q6/Q8 GPU / CPU split Layers VRAM + RAM Réponse en streaming tokens/s selon GPU KV Cache Grandit avec le contexte WARM PATH Modèle déjà en VRAM COLD PATH Chargement depuis disque

Pipeline complet Ollama — warm path (modèle déjà en VRAM) vs cold start (chargement depuis disque)

2. Installation d'Ollama

Ollama supporte officiellement macOS (Apple Silicon et Intel), Linux et Windows. L'installation est conçue pour être aussi simple que possible.

2.1 macOS

Téléchargez le fichier .dmg depuis ollama.com/download et glissez l'application dans votre dossier Applications. Sur Apple Silicon (M1/M2/M3/M4), Ollama peut utiliser le moteur MLX d'Apple et profite de la mémoire unifiée — vous n'avez pas besoin de GPU discret, la RAM fait office de VRAM. Le backend effectif (MLX, Metal, llama.cpp) dépend de la version d'Ollama et de la configuration.

# Vérifier que le service tourne
ollama --version

# Premier modèle : Llama 3.2 3B (léger, ~2 Go)
ollama run llama3.2:3b

2.2 Linux

Une seule commande suffit pour installer Ollama et l'enregistrer comme service systemd :

curl -fsSL https://ollama.com/install.sh | sh

# Vérifier le service
systemctl status ollama

# Le service démarre automatiquement avec le système
# API disponible sur http://localhost:11434

Pour le support GPU NVIDIA, Ollama détecte automatiquement CUDA si les drivers NVIDIA sont installés. Pour AMD, Ollama utilise ROCm sur Linux — la compatibilité dépend du GPU et de la version de ROCm installée, vérifiez la matrice de compatibilité officielle AMD avant de vous lancer.

2.3 Windows

Téléchargez le fichier OllamaSetup.exe depuis ollama.com/download/windows. L'installation configure automatiquement le service en arrière-plan. Support GPU NVIDIA via CUDA. Note : le support GPU AMD sous Windows est très limité — ROCm est principalement développé pour Linux. Pour les GPU AMD, préférez Linux.

Après installation : Ollama tourne en arrière-plan et expose l'API sur http://localhost:11434. Vous pouvez vérifier avec curl http://localhost:11434 — la réponse doit être Ollama is running.

3. Premiers pas : télécharger et lancer un modèle

Tout Ollama se contrôle via la commande ollama. Voici les commandes essentielles :

# Télécharger et lancer un modèle (mode interactif)
ollama run mistral

# Télécharger sans lancer
ollama pull llama3.1:8b

# Lister les modèles installés
ollama list

# Supprimer un modèle
ollama rm mistral

# Utiliser depuis la ligne de commande (non interactif)
ollama run llama3.1:8b "Résume ce texte en 3 points : ..."

# Voir les modèles en cours d'exécution
ollama ps

# Informations sur un modèle
ollama show mistral

La première commande ollama run télécharge le modèle si absent, puis ouvre un chat interactif. Pour quitter, tapez /bye.

3.1 Le format des noms de modèles

Les modèles Ollama suivent le format nom:tag. Le tag désigne la variante (taille + quantisation) :

# Tag "latest" par défaut (version recommandée)
ollama pull mistral

# Tag explicite : version 8B, quantisation Q4_K_M
ollama pull llama3.1:8b-instruct-q4_K_M

# Version plus grande
ollama pull llama3.1:70b

# Modèle de code
ollama pull qwen2.5-coder:7b

4. Quels modèles choisir ? Comparatif 2026

La bibliothèque Ollama (ollama.com/library) recense des centaines de modèles. Voici les plus utilisés en 2026, organisés par cas d'usage :

4.1 Usage général — conversation, raisonnement, résumé

Modèle Taille VRAM (Q4_K_M) Points forts
Llama 3.1 8B 8B ~5 Go Polyvalent, excellent rapport qualité/taille, jusqu'à 128K contexte (selon config et VRAM)
Mistral 7B 7B ~4,5 Go Très rapide, excellent en français, sliding window attention
Gemma 3 12B 12B ~7 Go Multimodal (texte + image), bon équilibre performances
Qwen3 8B 8B ~5 Go Dense + MoE, excellent multilingue, mode "thinking" intégré
Llama 3.3 70B 70B ~42 Go Peut approcher GPT-4o sur certains benchmarks spécifiques, nécessite GPU haut de gamme
Phi-4 14B 14B ~8 Go Microsoft, excellentes performances pour sa taille, raisonnement STEM

4.2 Code — génération et complétion

Modèle Taille VRAM (Q4) Spécialité
Qwen2.5-Coder 7B 7B ~4,5 Go Meilleur modèle code open source dans sa catégorie de taille
DeepSeek-Coder-V2 16B 16B ~10 Go MoE architecture, code multi-langage, complétion longue
CodeLlama 13B 13B ~8 Go Fill-in-the-middle (FIM), infilling de code, Python/C++/Java

4.3 Raisonnement — DeepSeek-R1

DeepSeek-R1 est disponible dans plusieurs tailles sur Ollama et constitue l'option open source la plus performante pour les tâches de raisonnement complexe (mathématiques, logique, code avancé). Certaines variantes exposent une trace de raisonnement entre balises <think> — ce comportement dépend du modèle, de sa version et du prompt utilisé. Les versions récentes ont tendance à masquer ce raisonnement par défaut.

# Version 7B — accessible avec 8 Go VRAM
ollama pull deepseek-r1:7b

# Version 32B — pour GPU haut de gamme
ollama pull deepseek-r1:32b

5. VRAM et RAM requis par modèle

La règle fondamentale : le modèle doit tenir entièrement en VRAM pour tourner à pleine vitesse GPU. Si la VRAM est insuffisante, Ollama bascule automatiquement une partie des couches sur le CPU (RAM système), ce qui dégrade significativement les performances.

5.1 Tableau de référence par palier hardware

GPU / Setup VRAM / RAM Modèles accessibles (Q4_K_M)
RTX 3060 / 4060 Ti 8 Go VRAM Llama 3.1 8B, Mistral 7B, Gemma 2 9B, Phi-4-mini
RTX 4070 / 3080 10-12 Go VRAM + Gemma 3 12B, Qwen3 8B Q6, DeepSeek-R1 8B
RTX 4080 / 3090 16-24 Go VRAM + Phi-4 14B, Gemma 3 27B, DeepSeek-R1 32B (Q4)
RTX 4090 / A100 40Go 24-40 Go VRAM + Llama 3.3 70B Q4, Qwen2.5 32B
Apple M3 Max / M4 Pro 36-48 Go mémoire unifiée Tous les modèles jusqu'à 32B — la mémoire unifiée est très efficace avec MLX
CPU seul (PC/Mac Intel) RAM système Modèles 1-3B uniquement pour des performances acceptables (Llama 3.2 3B, Phi-4-mini)

5.2 Estimer la VRAM nécessaire

La formule approximative pour un modèle en Q4_K_M :

VRAM (Go) ≈ (Paramètres en milliards × 0,5) + 1 Go overhead

Exemples : 7B × 0,5 + 1 = ~4,5 Go · 13B × 0,5 + 1 = ~7,5 Go · 70B × 0,5 + 1 = ~36 Go

Conseil : Visez toujours un modèle qui laisse 1-2 Go de VRAM libre. Un GPU saturé à 100% provoque des crashs et des ralentissements. Préférez un modèle 7B bien calibré à un 13B qui déborde sur le CPU.
Note expert : les performances réelles dépendent fortement du KV cache (qui grossit avec la longueur du contexte), du warm state du modèle (déjà chargé en VRAM vs cold start qui prend 2-15 secondes) et du mode CPU/GPU split si la VRAM est insuffisante. Un modèle "chaud" en VRAM répond quasi instantanément ; un cold start sur un 7B prend 3-5 secondes.

5.3 Benchmarks tokens/s par GPU — indicatif

Les chiffres ci-dessous sont des mesures représentatives relevées par la communauté sur des modèles en quantisation Q4_K_M, contexte court (≤2K tokens). Les performances varient selon le prompt, le KV cache et la charge système.

GPU / Setup Llama 3.2 3B Mistral 7B / Llama 3.1 8B Llama 3.3 70B CPU seul
RTX 4090 (24 Go) ~200 t/s ~110-130 t/s ~25-35 t/s
RTX 4070 (12 Go) ~130 t/s ~60-80 t/s Dépasse VRAM
RTX 3060 / 4060 (8 Go) ~90 t/s ~35-50 t/s Dépasse VRAM
Apple M3 Max (48 Go unifiés) ~120 t/s ~50-70 t/s ~15-20 t/s
Apple M2 Pro (16 Go unifiés) ~80 t/s ~25-35 t/s Dépasse RAM
CPU moderne seul (i9 / Ryzen 9) ~8-15 t/s ~3-6 t/s Inutilisable Référence
Méthodologie : mesures Q4_K_M, contexte ≤2K tokens, modèle warm (déjà chargé en VRAM), requête séquentielle unique. Les chiffres sont issus de mesures communautaires (Reddit r/LocalLLaMA, discussions GitHub Ollama) — ils varient selon le driver, l'OS et la charge. Considérez-les comme ordre de grandeur, pas comme garanties constructeur.

6. API Python : intégration dans vos applications

Ollama propose une bibliothèque Python officielle (ollama) qui simplifie l'intégration dans vos scripts et applications.

6.1 Installation

pip install ollama

6.2 Chat simple

from ollama import chat

response = chat(
    model='mistral',
    messages=[
        {'role': 'user', 'content': 'Explique la quantisation des LLM en 3 points.'}
    ]
)

print(response.message.content)

6.3 Streaming (tokens en temps réel)

from ollama import chat

stream = chat(
    model='llama3.1:8b',
    messages=[{'role': 'user', 'content': 'Écris une fonction Python pour trier une liste.'}],
    stream=True
)

for chunk in stream:
    print(chunk['message']['content'], end='', flush=True)

6.4 Conversation multi-tours (historique)

from ollama import chat

messages = []

def ask(user_input: str) -> str:
    messages.append({'role': 'user', 'content': user_input})
    response = chat(model='mistral', messages=messages)
    reply = response.message.content
    messages.append({'role': 'assistant', 'content': reply})
    return reply

print(ask("Bonjour, quel est ton rôle ?"))
print(ask("Rappelle-moi ce que tu m'as dit."))  # Garde le contexte

6.5 Génération d'embeddings

Ollama supporte également les embeddings vectoriels, utiles pour la recherche sémantique et les pipelines RAG :

import ollama

# nomic-embed-text : modèle dédié aux embeddings
response = ollama.embed(
    model='nomic-embed-text',
    input='Paris est la capitale de la France.'
)

embedding = response['embeddings'][0]
print(len(embedding))  # 768 dimensions pour nomic-embed-text

6.6 Client asynchrone (asyncio)

import asyncio
from ollama import AsyncClient

async def main():
    client = AsyncClient()
    response = await client.chat(
        model='llama3.1:8b',
        messages=[{'role': 'user', 'content': 'Qu'est-ce que l'asyncio en Python ?'}]
    )
    print(response.message.content)

asyncio.run(main())

7. Compatibilité OpenAI : migrer sans changer le code

L'un des atouts majeurs d'Ollama est son endpoint compatible avec l'API OpenAI. Si vous avez déjà du code qui utilise le SDK openai, vous pouvez basculer sur un modèle local en changeant deux lignes.

7.1 Via le SDK Python OpenAI

from openai import OpenAI

# Deux changements seulement par rapport à l'API OpenAI classique :
client = OpenAI(
    base_url='http://localhost:11434/v1',  # ← Ollama local
    api_key='ollama'                      # ← Valeur arbitraire, non vérifiée
)

response = client.chat.completions.create(
    model='llama3.1:8b',
    messages=[
        {'role': 'system', 'content': 'Tu es un assistant expert en Python.'},
        {'role': 'user', 'content': 'Comment fonctionne un décorateur ?'}
    ]
)

print(response.choices[0].message.content)

7.2 Via curl (API REST brute)

curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "mistral",
    "messages": [
      {"role": "user", "content": "Résume en 2 phrases : quest-ce que le RAG ?"}
    ]
  }'
Compatibilité : Les endpoints /v1/chat/completions et /v1/completions sont disponibles. Les outils (function calling), le streaming et les structured outputs sont supportés selon les modèles. L'endpoint /v1/models liste les modèles installés.

8. Quantisation : Q4, Q6, Q8 — laquelle choisir ?

La quantisation compresse les poids du modèle de 16 bits (FP16) vers moins de bits, réduisant la VRAM nécessaire au prix d'une légère perte de qualité. Ollama utilise le format GGUF avec plusieurs niveaux de quantisation.

Format Bits/poids VRAM vs FP16 Perte qualité Usage recommandé
Q4_K_M ~4 bits −75% Faible Recommandé par défaut — meilleur compromis taille/qualité
Q6_K ~6 bits −62% Très faible Quand la VRAM le permet, qualité proche de Q8
Q8_0 8 bits −50% Quasi nulle Qualité maximale quantisée, applications critiques
Q2_K ~2 bits −87% Significative Appareils très contraints, prototypage rapide uniquement
FP16 16 bits Référence Aucune Fine-tuning, recherche — rarement nécessaire en inférence

Pour spécifier un format de quantisation dans Ollama, ajoutez-le au nom du tag :

# Q4_K_M (par défaut pour la plupart des modèles)
ollama pull llama3.1:8b-instruct-q4_K_M

# Q8 pour meilleure qualité si VRAM disponible
ollama pull llama3.1:8b-instruct-q8_0

9. Cas d'usage : quand local > cloud ?

Un LLM local n'est pas toujours la meilleure solution — GPT-4o ou Claude 3.5 Sonnet restent supérieurs sur les tâches de raisonnement complexe. Mais il existe des contextes où le local est objectivement meilleur :

9.1 Données sensibles et conformité RGPD

Dossiers médicaux, contrats juridiques, données clients, communications internes — tout ce qui ne peut pas transiter par des serveurs tiers. Avec Ollama, le traitement reste sur votre infrastructure. C'est la principale raison d'adoption en entreprise.

9.2 Volume élevé de tokens

Si vous traitez des millions de tokens par jour (analyse de documents, batch processing, génération de contenu à grande échelle), le coût API cloud devient prohibitif. Le seuil de rentabilité dépend de votre GPU, mais pour une RTX 4090 amortie, chaque token après ~6 mois est gratuit.

9.3 Latence et temps réel

Pour les applications nécessitant une réponse en <200ms — chatbots embarqués, complétion de code en temps réel, assistants vocaux — le réseau introduit une latence incompressible. En local sur GPU performant, le time-to-first-token est de l'ordre de 10-50ms.

9.4 Environnements hors ligne

Usines, sites isolés, avions, sous-marins, installations militaires — partout où la connectivité est absente ou non fiable. Un LLM local tourne sans internet.

9.5 Exemple concret : pipeline de classification locale

import ollama
import json

def classify_document(text: str) -> dict:
    """Classifie un document en local — zéro donnée envoyée en externe."""
    prompt = f"""Classifie ce document dans une des catégories suivantes :
    [contrat, facture, email, rapport, autre]

    Document : {text[:500]}

    Réponds uniquement en JSON : {{"categorie": "...", "confiance": 0.0-1.0, "raison": "..."}}"""

    response = ollama.generate(
        model='mistral',
        prompt=prompt,
        format='json'  # Structured output
    )

    return json.loads(response['response'])

# Usage
result = classify_document("Facture n°2024-001 — Prestation de conseil IA — 5 000 €")
print(result)
# {"categorie": "facture", "confiance": 0.97, "raison": "Présence de numéro de facture et montant"}

10. Limites et points de vigilance

Limite Détail Contournement
Qualité plafonnée Les meilleurs modèles locaux (Llama 3.3 70B, Qwen3 32B) restent en dessous de GPT-4o / Claude 3.5 Sonnet sur les tâches complexes Hybride : local pour le bulk, cloud pour les cas critiques
Investissement GPU Une RTX 4090 coûte ~1 500-2 000 €. Rentable après ~6-12 mois d'usage intensif Apple Silicon M3/M4 Pro : bon compromis prix/performance sans GPU discret
Un modèle par défaut en mémoire Ollama charge généralement un modèle à la fois, mais peut en maintenir plusieurs si la VRAM le permet. Changer de modèle prend 2-10 secondes (cold start) Variable d'env OLLAMA_MAX_LOADED_MODELS=2 si VRAM suffisante
Pas de multi-GPU natif Ollama supporte le multi-GPU pour les grands modèles, mais la configuration est plus complexe vLLM ou llama.cpp pour les setups multi-GPU avancés
Pas de fine-tuning Ollama est uniquement un moteur d'inférence — pas de fine-tuning intégré Fine-tunez avec Unsloth/PEFT, exportez en GGUF, importez dans Ollama
Longueur de contexte variable Le contexte par défaut est 2048 tokens. La valeur maximale (ex : 128K) dépend du modèle, de la VRAM et de la config — chaque token de contexte supplémentaire consomme du KV cache en VRAM ollama run llama3.1 --num-ctx 32768 ou via Modelfile
Batching limité Ollama dispose d'un scheduling interne basique, mais pas de batching explicite configurable pour des requêtes concurrentes. Sous charge multi-utilisateurs, les requêtes se mettent en file d'attente vLLM ou llama.cpp server pour du vrai batching en production multi-utilisateurs

FAQ

Ollama est-il open source ?

Oui, Ollama est publié sous licence MIT sur GitHub (github.com/ollama/ollama). Le code source est entièrement disponible et les contributions sont ouvertes. Les modèles qu'il fait tourner ont leurs propres licences (Apache 2.0 pour Llama 3, Mistral, Gemma, etc.).

Ollama vs LM Studio : lequel choisir ?

LM Studio propose une interface graphique conviviale, idéale pour les non-développeurs et l'exploration de modèles. Ollama est orienté développeurs et ligne de commande : plus léger, plus facile à scripter, parfait pour l'intégration dans des applications. Pour un usage en production ou dans des pipelines Python, Ollama est recommandé. Pour explorer des modèles sans coder, LM Studio est plus accessible.

Comment changer le contexte par défaut (2048 tokens) ?

Créez un Modelfile personnalisé ou passez le paramètre directement. Exemple avec un contexte de 32K tokens :

ollama run llama3.1:8b --num-ctx 32768

Attention : un contexte plus long consomme plus de VRAM (KV cache).

Peut-on exposer l'API Ollama sur le réseau local ?

Par défaut, Ollama écoute uniquement sur 127.0.0.1:11434 (localhost). Pour l'exposer sur le réseau :

OLLAMA_HOST=0.0.0.0 ollama serve

Attention : n'exposez jamais Ollama directement sur internet sans authentification. Utilisez un reverse proxy (nginx) avec HTTPS et authentification si nécessaire.

Comment importer un modèle GGUF custom dans Ollama ?

Créez un Modelfile qui pointe vers le fichier GGUF :

# Modelfile
FROM /chemin/vers/mon-modele.gguf
SYSTEM "Tu es un assistant expert en IA."

# Créer le modèle
ollama create mon-modele -f Modelfile

# Utiliser
ollama run mon-modele

Conclusion

Ollama a démocratisé l'hébergement local de LLM. Ce qui nécessitait une expertise approfondie en 2023 (compiler llama.cpp, gérer les dépendances CUDA, écrire des serveurs d'inférence) se fait maintenant en une commande. En 2026, l'écosystème est mature : des dizaines de modèles de qualité, une API compatible OpenAI, une bibliothèque Python officielle, et un support multi-plateforme solide.

Le local ne remplace pas le cloud pour tous les cas d'usage — GPT-4o et Claude conservent une longueur d'avance sur les tâches de raisonnement très complexe. Mais pour la confidentialité des données, les volumes élevés, la latence zéro et le travail hors ligne, un LLM local avec Ollama est souvent la meilleure solution technique et économique.

Par où commencer : installez Ollama, lancez ollama run mistral et testez avec votre cas d'usage réel. Si les performances sont suffisantes avec Mistral 7B sur votre hardware, vous n'avez besoin de rien de plus. Si vous travaillez sur du code, passez à qwen2.5-coder:7b. Pour du raisonnement avancé, essayez deepseek-r1:7b.

Articles liés

AUDIO IA
Voxtral : le modèle audio open source de Mistral
Architecture, benchmarks vs Whisper, code Python et pricing.
TRANSCRIPTION
Whisper en Python pour le français
Guide complet pour la transcription audio en français avec OpenAI Whisper.
AGENTS IA
Agents IA en 2026 : état de l'art
LLM + outils + mémoire : comment construire des agents autonomes.