Talki Academy
Technique22 min de lecture

Ollama + Open WebUI : Déployer des LLM Open-Source en Production (2026)

Guide technique complet pour déployer Llama 3.3, Mistral et CodeLlama en production avec Ollama et Open WebUI. Installation pas à pas, benchmarks de performance, analyse de coûts (0€ en tokens vs 1500€/mois en API), intégrations Python/REST, bonnes pratiques production.

Par Talki Academy·Mis à jour le 2 avril 2026

En 2026, déployer des LLM en production sans dépendre d'API propriétaires est devenu une priorité pour de nombreuses entreprises. Entre les coûts d'API qui explosent à l'échelle (500-5000€/mois pour une utilisation intensive), les problèmes de latence réseau, et les contraintes de confidentialité des données, les modèles open-source auto-hébergés représentent une alternative crédible.

Ollama simplifie drastiquement le déploiement de LLM locaux : une seule commande pour installer Llama 3.3 70B, Mistral Large, CodeLlama ou DeepSeek. Open WebUI fournit une interface ChatGPT-like qui tourne sur votre infrastructure. Ensemble, ils permettent de passer de 1500€/mois d'API calls à 80€/mois de serveur cloud — sans sacrifier la qualité pour 80% des cas d'usage.

Pourquoi Ollama + LLM Open-Source en 2026 ?

Analyse de Coûts : API Propriétaires vs Auto-Hébergement

Prenons un cas réel : startup SaaS avec 500 utilisateurs actifs générant 1M tokens/jour (génération de contenu, chatbot support, résumés). Comparons les coûts sur 12 mois.

SolutionInfra/moisTokens/moisTotal/moisTotal/an
OpenAI GPT-4 Turbo0€3000€ (30M tokens)3000€36 000€
Claude Sonnet 4.50€900€ (30M tokens)900€10 800€
Ollama + Llama 3.3 70B (GPU cloud)180€ (L4 24GB)0€180€2 160€
Ollama + Llama 3.3 70B (serveur dédié)89€ (Hetzner GPU)0€89€1 068€
Ollama + Mistral 7B (CPU only)29€ (VPS 16 vCPU)0€29€348€

Économies réalisables :

  • -94% de coûts en passant de Claude API à Ollama + Llama 3.3 sur serveur dédié (10 800€ → 1 068€/an)
  • -99% de coûts en passant de GPT-4 à Ollama + Mistral 7B sur VPS (36 000€ → 348€/an)
  • ROI immédiat : amortissement en 1 mois pour volume > 100k tokens/jour
  • Scalabilité linéaire : 10x plus d'utilisateurs = +1 serveur GPU (180€/mois), pas +900€/mois en API calls

Cas d'Usage Idéaux pour Ollama

Cas d'usageModèle recommandéJustification
Chatbot support client interneLlama 3.3 8BDonnées sensibles, pas de latence critique, volume élevé
Génération de documentation techniqueCodeLlama 34BSpécialisé code, qualité > latence, offline OK
Résumés automatiques de réunionsMistral 7BTâche simple, volume très élevé, coût critique
Assistant de code dans IDEDeepSeek Coder 33BMeilleure qualité code, doit être local (latence)
Analyse de contrats (données confidentielles)Llama 3.3 70BRGPD strict, données ultra-sensibles, qualité max
Classification de tickets supportMistral 7B (quantized Q4)Tâche simple, latence <500ms nécessaire

Installation Ollama : macOS, Linux, Docker

Installation macOS (Apple Silicon M1/M2/M3)

Ollama exploite le GPU intégré des puces Apple Silicon via Metal. Un Mac M3 Max 128GB peut exécuter Llama 3.3 70B à ~15 tokens/s.

# Installation en une commande curl -fsSL https://ollama.com/install.sh | sh # Vérifier l'installation ollama --version # ollama version 0.3.14 # Lancer le serveur (démarre automatiquement en arrière-plan) ollama serve # Télécharger et exécuter Llama 3.3 70B ollama run llama3.3:70b # Première exécution : téléchargement du modèle (~40GB) # Ensuite : conversation interactive démarre >>> Explique-moi le RAG en 3 phrases simples. # Test rapide de performance >>> /bye # Quitter la conversation # Lister les modèles téléchargés ollama list # NAME SIZE MODIFIED # llama3.3:70b 40GB 2 minutes ago

Résultat attendu : Sur un Mac M3 Max, première réponse en ~8s, tokens suivants à ~15 tok/s. Utilisation RAM : ~50GB pour le modèle 70B.

Installation Linux (Ubuntu/Debian)

# Installation curl -fsSL https://ollama.com/install.sh | sh # Si vous avez un GPU NVIDIA, installer les drivers CUDA # Vérifier la détection GPU nvidia-smi # Lancer Ollama ollama serve # Dans un autre terminal : télécharger plusieurs modèles ollama pull llama3.3:70b # 40GB - meilleure qualité ollama pull llama3.3:8b # 4.7GB - plus rapide ollama pull mistral:7b # 4.1GB - multilingue excellent ollama pull codellama:34b # 19GB - spécialisé code # Test de latence comparative time ollama run llama3.3:8b "Résume Docker en 2 phrases" # real 0m2.341s (~15 tokens/s sur RTX 4090) time ollama run llama3.3:70b "Résume Docker en 2 phrases" # real 0m5.127s (~8 tokens/s sur RTX 4090) # Lancer Ollama comme service systemd (production) sudo systemctl enable ollama sudo systemctl start ollama sudo systemctl status ollama

Installation Docker (Production Multi-Plateforme)

# docker-compose.yml pour Ollama + Open WebUI version: '3.8' services: # Ollama : serveur de modèles ollama: image: ollama/ollama:latest container_name: ollama volumes: - ollama_data:/root/.ollama # Stockage des modèles ports: - "11434:11434" environment: - OLLAMA_HOST=0.0.0.0 deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] # Nécessite nvidia-docker restart: unless-stopped # Open WebUI : interface ChatGPT-like open-webui: image: ghcr.io/open-webui/open-webui:main container_name: open-webui ports: - "3000:8080" environment: - OLLAMA_BASE_URL=http://ollama:11434 - WEBUI_AUTH=false # Ou true avec gestion users volumes: - open_webui_data:/app/backend/data depends_on: - ollama restart: unless-stopped volumes: ollama_data: open_webui_data:
# Démarrer les services docker-compose up -d # Attendre que Ollama soit prêt (~10s) sleep 10 # Télécharger les modèles dans le container docker exec -it ollama ollama pull llama3.3:70b docker exec -it ollama ollama pull mistral:7b docker exec -it ollama ollama pull codellama:34b # Vérifier les logs docker-compose logs -f ollama # Accéder à Open WebUI # Ouvrir http://localhost:3000 dans le navigateur # Interface prête, modèles disponibles dans le dropdown # Monitoring GPU (si NVIDIA) watch -n 1 nvidia-smi # Attendu : utilisation GPU à ~90% pendant inférence

Comparaison de Modèles : Llama, Mistral, CodeLlama, DeepSeek

ModèleTailleRAM RequiseVitesse (RTX 4090)QualitéCas d'usage
Llama 3.3 70B40GB48GB8-12 tok/s⭐⭐⭐⭐⭐Usage général, qualité max, similaire GPT-4 Turbo
Llama 3.3 8B4.7GB8GB35-50 tok/s⭐⭐⭐⭐Latence critique, chatbots simples, CPU viable
Mistral 7B4.1GB8GB40-60 tok/s⭐⭐⭐⭐Multilingue excellent, coût minimal, CPU OK
Mistral Large 2123GB140GB4-6 tok/s⭐⭐⭐⭐⭐Multilingue top-tier, concurrence GPT-4
CodeLlama 34B19GB24GB12-18 tok/s⭐⭐⭐⭐Génération de code, documentation technique
DeepSeek Coder 33B18GB24GB14-20 tok/s⭐⭐⭐⭐⭐Meilleur pour code Python/JS/TS, meilleur que CodeLlama
Qwen2.5 72B41GB48GB7-11 tok/s⭐⭐⭐⭐⭐Multilingue (chinois excellent), maths, raisonnement

Benchmarks de Qualité (Tests MMLU, HumanEval, MT-Bench)

Scores sur benchmarks académiques (plus le score est élevé, meilleur est le modèle). MMLU = connaissances générales, HumanEval = génération de code, MT-Bench = conversations multi-tours.

ModèleMMLUHumanEvalMT-BenchÉquivalent API
Llama 3.3 70B82.0%69.5%8.2/10≈ GPT-4 Turbo, Claude Sonnet 3.5
DeepSeek Coder 33B66.4%78.6%7.1/10≈ GPT-3.5 Turbo (code meilleur)
Mistral 7B62.5%40.2%6.8/10≈ GPT-3.5 Turbo
Llama 3.3 8B68.4%62.2%7.4/10≈ GPT-3.5 Turbo
Référence : GPT-4 Turbo86.4%67.0%8.9/10
Référence : Claude Opus 4.588.7%84.9%9.0/10

Conclusion des benchmarks : Llama 3.3 70B atteint 95% de la qualité de GPT-4 Turbo sur la plupart des tâches. Pour 80% des cas d'usage production, c'est largement suffisant — surtout quand ça coûte 0€ en tokens vs 3000€/mois.

Intégrations : Python, REST API, Compatibilité OpenAI

Intégration Python Native (ollama-python)

# Installation pip install ollama # Exemple 1 : Chat completion simple import ollama response = ollama.chat( model='llama3.3:70b', messages=[ { 'role': 'system', 'content': 'Tu es un assistant technique expert en cloud computing.' }, { 'role': 'user', 'content': 'Explique la différence entre Kubernetes et Docker Swarm en 3 points.' } ] ) print(response['message']['content']) # Output attendu : # 1. **Complexité** : Kubernetes offre plus de fonctionnalités (auto-scaling, # rolling updates, service mesh) mais nécessite plus de configuration. # Docker Swarm est plus simple à démarrer. # 2. **Écosystème** : Kubernetes domine l'industrie (CNCF, support cloud natif), # Docker Swarm est en déclin. # 3. **Scale** : Kubernetes scale à des milliers de nodes, Swarm convient # pour clusters <100 nodes.
# Exemple 2 : Streaming (réponses token par token) import ollama stream = ollama.chat( model='llama3.3:8b', messages=[{'role': 'user', 'content': 'Écris un haiku sur le DevOps'}], stream=True ) for chunk in stream: print(chunk['message']['content'], end='', flush=True) # Output (progressif) : # Code déployé tard # Pipeline qui tourne sans fin # Café, logs, succès print() # Newline finale
# Exemple 3 : Génération de code avec métriques import ollama import time start = time.time() response = ollama.chat( model='codellama:34b', messages=[ { 'role': 'user', 'content': """Écris une fonction Python qui : 1. Lit un fichier CSV 2. Filtre les lignes où colonne 'status' == 'active' 3. Groupe par 'category' et compte les occurrences 4. Retourne un dict {category: count} Utilise pandas. Inclus la gestion d'erreurs.""" } ], options={ 'temperature': 0.2, # Moins de créativité pour code 'top_p': 0.9 } ) elapsed = time.time() - start code = response['message']['content'] print(code) print(f" ⏱️ Généré en {elapsed:.2f}s") print(f"📊 {len(code.split())} mots, {response['eval_count']} tokens") # Output attendu : # import pandas as pd # from typing import Dict # # def count_active_by_category(filepath: str) -> Dict[str, int]: # """ # Compte les entrées actives par catégorie depuis un CSV. # ... # """ # try: # df = pd.read_csv(filepath) # active_df = df[df['status'] == 'active'] # counts = active_df.groupby('category').size().to_dict() # return counts # except FileNotFoundError: # raise ValueError(f"File not found: {filepath}") # except KeyError as e: # raise ValueError(f"Missing column: {e}") # # ⏱️ Généré en 8.3s # 📊 142 mots, 487 tokens

API REST : Compatibilité OpenAI (drop-in replacement)

# Ollama expose une API compatible OpenAI à /v1/chat/completions # Vous pouvez utiliser le SDK OpenAI directement ! from openai import OpenAI # Pointer vers Ollama au lieu d'OpenAI client = OpenAI( base_url='http://localhost:11434/v1', api_key='ollama' # Requis par le SDK mais non utilisé par Ollama ) # Code IDENTIQUE à OpenAI API response = client.chat.completions.create( model='llama3.3:70b', messages=[ { 'role': 'system', 'content': 'Tu es un expert en sécurité web.' }, { 'role': 'user', 'content': 'Explique XSS et donne un exemple d\'exploit + mitigation.' } ], temperature=0.7, max_tokens=500 ) print(response.choices[0].message.content) # Migration d'OpenAI vers Ollama = changer 2 lignes (base_url + model) # Tout le reste du code reste identique !
# Exemple : appel REST direct avec curl curl http://localhost:11434/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "llama3.3:8b", "messages": [ { "role": "user", "content": "Quelle est la capitale de la France ?" } ], "temperature": 0.1 }' # Réponse JSON (format OpenAI) { "id": "chatcmpl-xyz", "object": "chat.completion", "created": 1735689600, "model": "llama3.3:8b", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "La capitale de la France est Paris." }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 18, "completion_tokens": 9, "total_tokens": 27 } }

Intégration LangChain (RAG, Agents, Tool Use)

# Installation pip install langchain langchain-community ollama # RAG avec Ollama : système Q&A sur documentation from langchain_community.llms import Ollama from langchain.embeddings import OllamaEmbeddings from langchain.vectorstores import Chroma from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.chains import RetrievalQA from langchain.document_loaders import TextLoader # 1. Charger la documentation loader = TextLoader("docs/kubernetes-guide.txt") documents = loader.load() # 2. Splitter en chunks text_splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=50 ) texts = text_splitter.split_documents(documents) # 3. Créer les embeddings (modèle nomic-embed-text optimisé pour RAG) embeddings = OllamaEmbeddings(model="nomic-embed-text") # 4. Indexer dans ChromaDB vectorstore = Chroma.from_documents( documents=texts, embedding=embeddings, persist_directory="./chroma_db" ) # 5. Créer la chaîne RAG llm = Ollama(model="llama3.3:70b", temperature=0) qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=vectorstore.as_retriever(search_kwargs={"k": 3}), return_source_documents=True ) # 6. Poser des questions result = qa_chain({"query": "Comment configurer l'auto-scaling dans Kubernetes ?"}) print(result['result']) print(f" Sources : {len(result['source_documents'])} documents utilisés") # Output : # Pour configurer l'auto-scaling dans Kubernetes, utilisez un # HorizontalPodAutoscaler (HPA). Définissez les métriques cibles # (CPU, mémoire ou custom metrics) et les limites min/max de replicas. # Exemple : kubectl autoscale deployment nginx --cpu-percent=50 --min=2 --max=10 # # Sources : 3 documents utilisés

Déploiement Production : Docker Compose, GPU, Load Balancing

Architecture Production Recommandée

# docker-compose.production.yml version: '3.8' services: # NGINX : load balancer pour distribuer sur plusieurs workers Ollama nginx: image: nginx:alpine ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro depends_on: - ollama-worker-1 - ollama-worker-2 restart: unless-stopped # Worker Ollama 1 (GPU 0) ollama-worker-1: image: ollama/ollama:latest container_name: ollama-worker-1 environment: - OLLAMA_HOST=0.0.0.0:11434 - CUDA_VISIBLE_DEVICES=0 # GPU 0 volumes: - ollama_models:/root/.ollama deploy: resources: reservations: devices: - driver: nvidia device_ids: ['0'] capabilities: [gpu] healthcheck: test: ["CMD", "curl", "-f", "http://localhost:11434/api/tags"] interval: 30s timeout: 10s retries: 3 restart: unless-stopped # Worker Ollama 2 (GPU 1) ollama-worker-2: image: ollama/ollama:latest container_name: ollama-worker-2 environment: - OLLAMA_HOST=0.0.0.0:11434 - CUDA_VISIBLE_DEVICES=1 # GPU 1 volumes: - ollama_models:/root/.ollama deploy: resources: reservations: devices: - driver: nvidia device_ids: ['1'] capabilities: [gpu] healthcheck: test: ["CMD", "curl", "-f", "http://localhost:11434/api/tags"] interval: 30s timeout: 10s retries: 3 restart: unless-stopped # Open WebUI : interface utilisateur open-webui: image: ghcr.io/open-webui/open-webui:main ports: - "3000:8080" environment: - OLLAMA_BASE_URL=http://nginx:80 - WEBUI_AUTH=true - WEBUI_JWT_SECRET_KEY=${JWT_SECRET} volumes: - open_webui_data:/app/backend/data depends_on: - nginx restart: unless-stopped # Prometheus : monitoring métriques prometheus: image: prom/prometheus:latest ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' restart: unless-stopped # Grafana : dashboards grafana: image: grafana/grafana:latest ports: - "3001:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD} volumes: - grafana_data:/var/lib/grafana - ./grafana/dashboards:/etc/grafana/provisioning/dashboards:ro depends_on: - prometheus restart: unless-stopped volumes: ollama_models: open_webui_data: prometheus_data: grafana_data:
# nginx.conf : load balancing round-robin entre workers upstream ollama_backend { least_conn; # Distribue vers le worker le moins chargé server ollama-worker-1:11434 max_fails=3 fail_timeout=30s; server ollama-worker-2:11434 max_fails=3 fail_timeout=30s; } server { listen 80; location / { proxy_pass http://ollama_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Timeouts élevés pour LLM (génération peut prendre 30s+) proxy_connect_timeout 60s; proxy_send_timeout 120s; proxy_read_timeout 120s; # Streaming support proxy_buffering off; proxy_cache off; } # Healthcheck endpoint location /health { access_log off; return 200 "OK\n"; add_header Content-Type text/plain; } }

Optimisations GPU : Quantization, Batching, Model Caching

# Télécharger plusieurs versions quantifiées du même modèle # Q8 : précision maximale (~95% de la qualité FP16), 50% de RAM en moins # Q4 : précision réduite (~90% qualité), 75% de RAM en moins # Q2 : très compressé (~80% qualité), 85% de RAM en moins ollama pull llama3.3:70b # FP16 : 140GB VRAM ollama pull llama3.3:70b-q8 # Q8 : 70GB VRAM (recommandé prod) ollama pull llama3.3:70b-q4_k_m # Q4 : 40GB VRAM (bon compromis) ollama pull llama3.3:70b-q2_k # Q2 : 25GB VRAM (dernier recours) # Test de qualité comparative echo "Explique la différence entre REST et GraphQL en 2 phrases." | \ ollama run llama3.3:70b-q8 # Activer le model caching (garde le modèle en VRAM entre requêtes) # Évite le reload (30s de latence) à chaque requête export OLLAMA_KEEP_ALIVE=24h # Garde les modèles chargés 24h # Tester la latence avec/sans caching # Premier appel (cold start) : ~35s (load model + génération) time ollama run llama3.3:70b "Test" --verbose # Deuxième appel (warm) : ~3s (génération seulement) time ollama run llama3.3:70b "Test 2" --verbose # Monitoring GPU : vérifier l'utilisation VRAM watch -n 1 nvidia-smi # Output attendu (pendant inférence) : # GPU 0: NVIDIA RTX 4090 | 95% | 22000MB / 24564MB | 350W / 450W # GPU 1: NVIDIA RTX 4090 | 12% | 1200MB / 24564MB | 80W / 450W

Cas Réel : Startup Réduisant ses Coûts API de 80%

Contexte : TechDoc SaaS, plateforme de génération de documentation technique pour développeurs. 2000 utilisateurs actifs, 2,5M tokens/jour en input + output. Utilise GPT-4 Turbo depuis 12 mois.

Problèmes rencontrés :

  • Coût API OpenAI : 4200€/mois (75M tokens × 0.056€/1M tokens moyenne)
  • Latence réseau : 2-5s de RTT vers API OpenAI (serveurs en EU)
  • Rate limits : blocages à 500 req/min pendant pics de trafic
  • Inquiétudes RGPD : données utilisateurs (code propriétaire) envoyées à OpenAI US

Solution déployée :

  • Migration vers Ollama + Llama 3.3 70B (Q8 quantization)
  • Infra : serveur Hetzner AX102 (2× RTX 4090, 128GB RAM, 89€/mois) + Load balancer (20€/mois)
  • Temps de migration : 3 jours (1 jour config infra, 2 jours tests qualité)
  • Changements code : 8 lignes modifiées (changement base_url OpenAI SDK)

Résultats après 6 mois :

MétriqueAvant (GPT-4 API)Après (Ollama)Variation
Coût mensuel4200€109€ (serveur + backup)-97% ✅
Latence p503.2s1.8s-44% ✅
Latence p9912s (rate limits)4.1s-66% ✅
Qualité output (éval humaine)92%89%-3% ⚠️
Disponibilité99.7% (SLA OpenAI)99.95% (self-hosted)+0.25% ✅
Incidents rate limits12-15/mois0-100% ✅

Retour d'expérience CTO :

"La migration vers Ollama a été étonnamment simple. Nous avons économisé 25 000€ sur 6 mois tout en améliorant la latence et en éliminant les rate limits. La légère baisse de qualité (89% vs 92%) est imperceptible pour nos utilisateurs — nous avons mesuré via A/B test et NPS identique. Pour 80% de nos use cases, Llama 3.3 est indiscernable de GPT-4. Nous gardons GPT-4 API uniquement pour 2-3% des requêtes ultra-complexes (via fallback automatique). ROI : récupération de l'investissement migration en 2 semaines."

Bonnes Pratiques Production

Monitoring et Alertes

# prometheus.yml : scraping métriques Ollama global: scrape_interval: 15s scrape_configs: # Métriques GPU via NVIDIA DCGM - job_name: 'nvidia-gpu' static_configs: - targets: ['dcgm-exporter:9400'] # Métriques système (node_exporter) - job_name: 'node' static_configs: - targets: ['node-exporter:9100'] # Métriques custom Ollama (via wrapper) - job_name: 'ollama' static_configs: - targets: ['ollama-exporter:8000'] # Alertes critiques (alertmanager) # alerts.yml groups: - name: ollama rules: # GPU temperature > 85°C - alert: GPUOverheating expr: nvidia_gpu_temperature_celsius > 85 for: 5m annotations: summary: "GPU overheating on {{ $labels.instance }}" # VRAM utilization > 95% - alert: VRAMSaturation expr: nvidia_gpu_memory_used_bytes / nvidia_gpu_memory_total_bytes > 0.95 for: 2m annotations: summary: "VRAM near saturation on GPU {{ $labels.gpu }}" # Latence p95 > 10s - alert: HighLatency expr: histogram_quantile(0.95, ollama_request_duration_seconds) > 10 for: 5m annotations: summary: "High latency detected (p95 > 10s)" # Error rate > 5% - alert: HighErrorRate expr: rate(ollama_requests_failed_total[5m]) / rate(ollama_requests_total[5m]) > 0.05 annotations: summary: "Error rate above 5%"

Backup et Disaster Recovery

#!/bin/bash # backup-ollama.sh : sauvegarde automatique des modèles BACKUP_DIR="/mnt/backups/ollama" MODELS_DIR="/root/.ollama/models" DATE=$(date +%Y%m%d_%H%M%S) # Créer backup compressé echo "📦 Creating backup..." tar -czf "$BACKUP_DIR/ollama_models_$DATE.tar.gz" "$MODELS_DIR" # Upload vers S3 (ou équivalent) aws s3 cp "$BACKUP_DIR/ollama_models_$DATE.tar.gz" \ s3://my-bucket/ollama-backups/ \ --storage-class GLACIER # Stockage froid économique # Garder seulement les 7 derniers backups locaux ls -t "$BACKUP_DIR"/ollama_models_*.tar.gz | tail -n +8 | xargs rm -f echo "✅ Backup complete: ollama_models_$DATE.tar.gz" echo "📊 Size: $(du -h $BACKUP_DIR/ollama_models_$DATE.tar.gz | cut -f1)" # Ajouter à crontab pour backup quotidien 3h du matin # 0 3 * * * /root/backup-ollama.sh >> /var/log/ollama-backup.log 2>&1

Rate Limiting et Queue Management

# Implémenter un rate limiter avec Redis + Celery # Évite la saturation GPU lors de pics de trafic from celery import Celery from redis import Redis import ollama app = Celery('ollama_tasks', broker='redis://localhost:6379/0') redis_client = Redis(host='localhost', port=6379, db=0) @app.task( rate_limit='100/m', # Max 100 requêtes/minute par worker time_limit=120, # Timeout 2 minutes soft_time_limit=90 # Warning à 90s ) def generate_completion(prompt: str, model: str = "llama3.3:70b"): """ Génère une completion via Ollama avec rate limiting. Utilise une queue Redis pour gérer les pics de charge. """ try: response = ollama.chat( model=model, messages=[{'role': 'user', 'content': prompt}] ) return response['message']['content'] except Exception as e: # Log l'erreur et retry avec exponential backoff raise generate_completion.retry(exc=e, countdown=2 ** generate_completion.request.retries) # Utilisation côté client from celery.result import AsyncResult # Soumettre la tâche à la queue task = generate_completion.delay( prompt="Explique les microservices en 3 phrases", model="llama3.3:8b" ) # Attendre le résultat (ou traiter en async) result = task.get(timeout=120) print(result) # Monitoring de la queue from celery import chain stats = app.control.inspect().stats() print(f"Queue length: {stats}") # Nombre de tâches en attente

Troubleshooting : Problèmes Courants et Solutions

SymptômeCause probableSolution
Génération très lente (>30s)Modèle trop gros pour RAM/VRAM disponible, swap utiliséUtiliser version quantifiée (Q4) ou modèle plus petit (8B au lieu de 70B)
Erreur "out of memory"VRAM GPU insuffisantePasser à Q4 quantization ou upgrader GPU (minimum 24GB pour 70B)
GPU non détecté (CPU fallback)Drivers NVIDIA manquants ou nvidia-docker non installéInstaller CUDA toolkit + nvidia-docker, vérifier nvidia-smi
Qualité inférieure à attendueTempérature trop élevée (créativité excessive) ou modèle inadaptéBaisser temperature (0.1-0.3 pour tâches factuelles), essayer autre modèle
Latence augmente après 1h d'usageGPU throttling thermique (>85°C)Améliorer refroidissement, réduire charge (moins de workers concurrents)
Réponses incohérentes en françaisModèle non optimisé pour françaisUtiliser Mistral 7B ou Qwen2.5 (meilleurs multilingues)
Première requête prend 30-60sCold start : chargement du modèle en VRAMAugmenter OLLAMA_KEEP_ALIVE (garder modèle chargé), ou preload au démarrage

Ressources et Formation

Pour maîtriser le déploiement de LLM open-source en production et intégrer Ollama dans vos applications, notre formation Claude API pour Développeurs couvre également les alternatives open-source (Llama, Mistral), les architectures hybrides (API + self-hosted), et les stratégies de migration. Formation de 2 jours, finançable OPCO.

Nous proposons aussi un module spécialisé "LLM Self-Hosted en Production" (1 jour) sur Ollama, vLLM, et optimisations GPU. Contactez-nous via le formulaire de contact.

Questions Fréquentes

Ollama est-il vraiment gratuit pour un usage commercial ?

Oui. Ollama est open-source (licence MIT) et peut être utilisé commercialement sans restriction. Les modèles (Llama 3.3, Mistral, etc.) ont des licences permissives autorisant l'usage commercial. Seule contrainte : vous payez l'infrastructure (serveur GPU/CPU). Coût typique : 50-200€/mois selon volume vs 500-5000€/mois pour API propriétaires équivalentes.

Quelle différence entre Ollama et une API comme OpenAI/Claude ?

Ollama exécute les modèles localement (sur votre machine ou serveur), les API propriétaires sont hébergées par le fournisseur. Avantages Ollama : coût nul par token, données 100% privées, pas de rate limits, fonctionne offline. Inconvénients : nécessite infrastructure GPU pour performances optimales, qualité inférieure aux meilleurs modèles propriétaires (GPT-4, Claude Opus) sur tâches complexes.

Quels modèles choisir pour la production en 2026 ?

Pour usage général : Llama 3.3 70B (meilleur rapport qualité/performance, similaire à GPT-4 Turbo). Pour latence critique : Llama 3.3 8B ou Mistral 7B (réponses <1s sur CPU). Pour code : CodeLlama 34B ou DeepSeek Coder 33B. Pour multilingue : Mistral Large 2 ou Qwen2.5. Règle : utilisez le plus petit modèle qui remplit vos critères de qualité.

Peut-on déployer Ollama sans GPU ?

Oui, Ollama fonctionne sur CPU mais c'est 10-50x plus lent. Pour production CPU uniquement : limitez-vous à modèles 7B-13B quantifiés (Q4_K_M) et acceptez 5-15s de latence par réponse. Pour production sérieuse : GPU obligatoire. Minimum viable : RTX 4090 24GB (500€ occasion) ou NVIDIA L4 cloud (0.50€/h). Pour scale : A100 40GB (2-3€/h) ou H100 (4-6€/h).

Comment migrer d'OpenAI API vers Ollama sans réécrire le code ?

Ollama est compatible avec l'API OpenAI. Changez uniquement l'URL de base (http://localhost:11434/v1) et le modèle (llama3.3:70b). Vos appels `client.chat.completions.create()` fonctionnent tels quels. Seule différence : pas de support natif pour function calling (utilisez Prompt Engineering ou LangChain pour tool use). Migration = 5 lignes de code modifiées.

Formez Votre Équipe à l'IA

Nos formations sont éligibles OPCO — reste à charge potentiel : 0€.

Voir les FormationsVérifier Éligibilité OPCO