Mistral AI a publié l'ensemble de ses modèles en open-weight. Ça signifie que vous pouvez les télécharger, les héberger sur votre infrastructure, et faire circuler vos données sans qu'elles quittent votre périmètre. C'est l'argument de souveraineté central. Mais héberger un LLM en production n'est pas anodin. Ce guide couvre les décisions pratiques, dans l'ordre où vous les prendrez.

01 / Dimensionner son GPU : la règle simple

La règle de départ est brutale dans sa simplicité : VRAM nécessaire ≈ nombre de paramètres × bytes par paramètre. Un modèle 7B en float16 (2 bytes par paramètre) nécessite environ 14 Go de VRAM pour le modèle seul — sans compter le KV cache, les activations et les buffers d'inférence qui s'y ajoutent en production.

La quantification réduit ce coût. En int8 (1 byte), on divise par 2. En int4 (~0.5 byte), on divise par 4, avec une légère dégradation de qualité. Le tableau ci-dessous donne les chiffres pour les trois modèles Mistral open-weight principaux.

Modèle fp16 (2B/param) int8 (1B/param) int4 (~0.5B/param) GPU recommandé (int4)
Mistral 7B ~14 GB ~7 GB ~4 GB RTX 3090 / 4090
Mistral 22B ~44 GB ~22 GB ~12 GB A10G 24 GB
Mistral 123B ~246 GB ~123 GB ~62 GB 2× A100 80 GB
Attention au KV cache Ces chiffres concernent le modèle seul. En production avec plusieurs utilisateurs simultanés, le KV cache peut représenter autant de VRAM que le modèle lui-même. Prévoyez toujours 30 à 50% de marge sur la VRAM totale disponible.

Pour la VRAM disponible sur les clouds principaux : une A100 80 Go (AWS p4d) coûte environ 3,50 $/h. Une A10G 24 Go (AWS g5) environ 1,05 $/h. Pour du multi-GPU, le tensor parallelism de vLLM vous permet de distribuer un modèle sur plusieurs cartes — un Mistral 123B en fp16 tiendra sur 4× A100 80 Go avec --tensor-parallel-size 4.

02 / Choisir son moteur de serving

Il existe trois moteurs sérieux pour héberger Mistral en production. Le choix dépend de votre cas d'usage — pas de vos préférences esthétiques.

vLLM — le standard production

vLLM est la référence pour les déploiements multi-utilisateurs en production. Son innovation centrale est le PagedAttention : une gestion du KV cache inspirée de la pagination mémoire des OS, qui élimine la fragmentation et permet un batching continu (continuous batching). Résultat : un throughput 2 à 10× supérieur aux implémentations naïves. L'API est compatible OpenAI — tous vos clients qui appellent GPT-4 peuvent pointer vers vLLM sans modification.

SGLang — pour les agents et les sorties structurées

SGLang excelle sur les workloads agentiques et les requêtes structurées (JSON mode, grammaires contraintes). Son RadixAttention permet un cache de préfixe efficace — particulièrement utile quand beaucoup de requêtes partagent le même prompt système. Sur les benchmarks de génération structurée, SGLang dépasse vLLM de 20 à 40%.

llama.cpp / Ollama — développement et CPU

llama.cpp est optimisé pour CPU et GPU grand public. Avec Ollama qui l'encapsule dans une interface conviviale, c'est la solution idéale pour le développement local et les déploiements sur machines sans GPU datacenter. Les performances en production multi-utilisateurs ne soutiennent pas la comparaison avec vLLM, mais pour un poste de développeur ou un usage mono-utilisateur, c'est parfait.

vLLM SGLang llama.cpp THROUGHPUT (tokens/s) LATENCE (P99) FACILITÉ DE SETUP MULTI-UTILISATEURS 95% 80% 55% 95% 88% 88% 60% 82% 30% 40% 95% 25% * scores relatifs indicatifs — GPU Nvidia, charge multi-utilisateurs

Fig. 1 — Comparatif des moteurs de serving sur 4 critères. vLLM domine en production multi-utilisateurs ; llama.cpp gagne sur la simplicité.

03 / Lancer vLLM en production

vLLM expose une API REST compatible OpenAI. Une fois lancé, n'importe quel SDK OpenAI peut pointer dessus en changeant simplement le base_url. Voici la configuration minimale pour un déploiement production de Mistral 7B Instruct.

// vLLM — commande de démarrage production
# Installation
pip install vllm

# Lancement — Mistral 7B Instruct en AWQ 4-bit, single GPU
python -m vllm.entrypoints.openai.api_server \
  --model mistralai/Mistral-7B-Instruct-v0.3 \
  --quantization awq \            # awq | gptq | fp8 | None
  --max-model-len 8192 \          # context window max
  --max-num-seqs 256 \            # requêtes simultanées max
  --gpu-memory-utilization 0.90 \ # % VRAM alloué à vLLM
  --host 0.0.0.0 \
  --port 8000 \
  --api-key ${VLLM_API_KEY}       # auth basique

# Multi-GPU (ex: Mistral 22B sur 2× A100)
python -m vllm.entrypoints.openai.api_server \
  --model mistralai/Mistral-Small-3.1-22B-Instruct-2503 \
  --tensor-parallel-size 2 \      # distribue le modèle sur 2 GPU
  --pipeline-parallel-size 1 \
  --max-model-len 32768 \
  --host 0.0.0.0 --port 8000

# Test rapide de l'API (compatible OpenAI)
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${VLLM_API_KEY}" \
  -d '{
    "model": "mistralai/Mistral-7B-Instruct-v0.3",
    "messages": [{"role": "user", "content": "Bonjour"}],
    "max_tokens": 256,
    "temperature": 0.7
  }'
// docker-compose.yml — déploiement complet avec Nginx
version: '3.8'

services:
  vllm:
    image: vllm/vllm-openai:latest
    runtime: nvidia
    environment:
      - HUGGING_FACE_HUB_TOKEN=${HF_TOKEN}
      - VLLM_API_KEY=${VLLM_API_KEY}
    volumes:
      - ~/.cache/huggingface:/root/.cache/huggingface
    command: >
      --model mistralai/Mistral-7B-Instruct-v0.3
      --quantization awq
      --max-model-len 8192
      --gpu-memory-utilization 0.90
      --host 0.0.0.0 --port 8000
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  nginx:
    image: nginx:alpine
    ports:
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./ssl:/etc/ssl/certs:ro
    depends_on:
      vllm:
        condition: service_healthy
Nginx en reverse proxy Placez toujours vLLM derrière un reverse proxy (Nginx, Caddy, Traefik). Il gère le TLS, le rate limiting, et vous permet de faire du load balancing entre plusieurs instances vLLM pour la haute disponibilité.

04 / Quantization : AWQ, GPTQ, GGUF

La quantization réduit la précision des poids du modèle pour économiser VRAM et accélérer l'inférence, au prix d'une légère dégradation de qualité. Il existe trois formats majeurs, chacun avec ses cas d'usage.

AWQ (Activation-aware Weight Quantization)

AWQ est le format recommandé pour la production GPU. Il quantize les poids en 4-bit en identifiant et préservant les poids les plus importants (ceux activés par les features saillantes). Résultat : meilleur rapport qualité/vitesse que GPTQ à précision équivalente. Compatible nativement avec vLLM et SGLang via --quantization awq.

GPTQ

GPTQ est le format le plus répandu sur HuggingFace. Large choix de modèles quantisés à différents niveaux (2-bit à 8-bit). Légèrement moins performant qu'AWQ en throughput, mais excellent pour les cas où un modèle GPTQ pré-quantisé est disponible et qu'on ne veut pas requantizer.

GGUF (llama.cpp)

GGUF est le format natif de llama.cpp et Ollama. Optimisé pour CPU et GPU grand public, il supporte des quantizations de 2 à 8 bits avec plusieurs niveaux de qualité intermédiaires (Q4_K_M, Q5_K_S, etc.). Excellent pour le développement local, inadapté à la production GPU haute performance.

Pour trouver les modèles Mistral pré-quantisés : cherchez bartowski sur HuggingFace (successeur de TheBloke pour les GGUF récents) pour GGUF, et solidrust ou TheBloke pour AWQ/GPTQ.

Format Vitesse GPU Qualité Compatibilité Cas d'usage recommandé
AWQ Excellente Très bonne vLLM, SGLang Production GPU, priorité perf
GPTQ Bonne Bonne vLLM, HuggingFace Large choix de modèles dispo
GGUF Limitée GPU Variable llama.cpp, Ollama Dev local, CPU, GPU modeste
fp8 Excellente Quasi-fp16 vLLM (H100/A100 uniquement) Production haut de gamme

05 / Monitoring en production

Un LLM en production est une boîte noire si vous ne le monitorez pas. vLLM expose nativement un endpoint /metrics au format Prometheus. Branchez-y Grafana pour les métriques système, et Langfuse pour les traces LLM (inputs, outputs, latences, coûts, évaluations).

Les 4 KPI critiques

Latence P99
1.8s
première réponse (TTFT)
Throughput
3.2k
tokens / seconde
GPU Utilization
87%
↑ bien chargé
KV Cache Hit
64%
prefix cache ratio

Latence P99 (Time To First Token, TTFT) : le temps que met le modèle à générer le premier token. Critique pour les interfaces utilisateur. Un P99 > 3s commence à être perceptible. Agissez sur la taille du batch ou la taille du modèle si ce chiffre dérive.

Throughput (tokens/s) : le débit de génération. Surveiller en tendance — une chute soudaine signale une surcharge, un changement de configuration, ou une régression après mise à jour.

GPU Utilization : entre 70% et 90%, c'est l'idéal. En dessous de 50%, vous surprovisionnez. Au-dessus de 95% en continu, vous risquez des timeout et des erreurs OOM (Out of Memory).

KV Cache Hit Rate : le pourcentage de requêtes qui bénéficient du cache de préfixe. Plus c'est élevé, moins de calcul redondant. Si vous avez beaucoup de requêtes avec le même prompt système, ce chiffre devrait être > 70%.

Outils recommandés

vLLM /metrics expose directement les métriques Prometheus : vllm:e2e_request_latency_seconds, vllm:gpu_cache_usage_perc, vllm:num_requests_running, etc. Un dashboard Grafana communautaire est disponible directement dans le repo vLLM.

Langfuse (open-source, auto-hébergeable) est le choix de référence pour les traces LLM. Il capture chaque requête avec son input, output, latence, et les éventuels coûts. Indispensable pour détecter les dérives de qualité, les prompts qui échouent, et les usages inattendus.

Checklist déploiement production Reverse proxy avec TLS · API key + rate limiting · Health check et restart automatique · Alertes sur P99 latence et GPU OOM · Langfuse ou équivalent pour les traces · Backup des poids du modèle (ne dépendez pas uniquement de HuggingFace Hub).

Déployer Mistral dans votre infrastructure ?

DEEP-5 pilote le dimensionnement, l'installation et le monitoring de modèles Mistral open-weight en production souveraine. Du POC à la mise en prod.

Prendre contact →