Aller au contenu

FaireNiveau 3, Construire20 minutes

Modèles en local : Ollama, vLLM et quantification

Servir un modèle open weight sur votre machine ou sur un serveur à carte graphique, pour une application ou pour une équipe. Le choix entre Ollama et vLLM, la quantification et ce qu'elle coûte en qualité, l'installation de vLLM, la mémoire de la carte, l'appel par l'API ; et la sécurité, que vLLM laisse ouverte par défaut.

Écrit le 9 octobre 2026 · Vérifié le 9 octobre 2026

Vous saurez

  • Choisir entre Ollama et vLLM selon le nombre de personnes servies
  • Choisir une quantification, en sachant ce qu'elle fait perdre
  • Installer vLLM, régler sa mémoire et l'appeler
  • Fermer le serveur au réseau et protéger ses routes
Sur cette page
  1. Rappel
  2. L'essentiel
  3. Prérequis
  4. Étapes
  5. Contrôle du résultat
  6. Problèmes fréquents
  7. Retour en arrière
  8. Variantes par outil
  9. Vérification
  10. Lectures suivantes
Rappel de la page précédente

Répondez de tête, puis ouvrez. Faire tourner un modèle chez soi

1Qu'est-ce qui décide qu'un modèle tient sur une machine ?

Sa taille à la quantification choisie, plus le cache de la fenêtre de contexte et des demandes simultanées, plus le système : la mémoire graphique ou unifiée doit contenir le tout.

2Une PME veut résumer des dossiers clients qui ne doivent pas sortir, pour trois personnes. Que proposez-vous ?

Essayer d'abord un modèle ouvert sur dix dossiers, par un serveur loué à l'heure ; puis un poste à grande mémoire avec Ollama, le serveur gardé sur la machine, si la qualité suffit.

L'essentiel
  1. Ollama sert un poste ou quelques personnes, une demande à la fois par modèle ; vLLM sert un serveur à carte graphique, en regroupant les demandes en continu.
  2. Quantifier, c'est ranger chaque poids sur moins de bits : Llama 3.1 8B passe de 14,96 Gio en 16 bits à 4,58 Gio en Q4_K_M, et génère près de 2,5 fois plus vite dans la mesure de llama.cpp.
  3. La perte reste faible jusqu'à 4 bits : sur Llama 3.1, le FP8 est sans perte en pratique, l'INT8 perd 1 à 3 %, l'INT4 sur les seuls poids rivalise avec le 8 bits.
  4. vLLM écoute sur toutes les interfaces quand l'option --host manque, et sa clé ne protège qu'une partie des routes : un proxy inverse filtre devant.
  5. Un modèle téléchargé peut porter du code : le format safetensors, des dépôts de confiance, une version à jour.
1

Prérequis

  • Pour vLLM : Linux, Python 3.11 à 3.14, une carte NVIDIA de capacité de calcul 7.5 ou plus, T4, RTX 20, A100, L4, H100, B200. Des variantes existent pour AMD, Intel et les puces Apple ; Windows passe par WSL.
  • Pour Ollama : un Mac, un PC ou un serveur Linux ; la mise en place pas à pas : Ollama et LM Studio.
  • Le modèle : sa licence, et l'accès à son dépôt ; Llama 4 Scout, par exemple, n'est donné qu'après accord manuel de Meta. Le choix du modèle selon la machine : faire tourner un modèle chez soi.
  • Une carte louée, pour essayer avant d'acheter, ci-dessous ; un grand modèle demande plusieurs cartes : deux pour Mistral Small 4, huit pour Mistral Medium 3.5, dans les commandes de Mistral.
Prérequis
CarteMémoireScaleway, l'heureOVHcloud, l'heure
NVIDIA L424 Go0,79 € HT, Paris0,75 € HT
NVIDIA L40S48 Go1,47 € HT, Paris1,40 € HT
NVIDIA H10080 Go2,87 € HT, Paris2,80 € HT

Prix hors taxes lus le 9 octobre 2026 ; chez Scaleway, la L4 en zone Paris 1, les autres en zone Paris 2. Où héberger en Europe : héberger en Europe.

2

Étapes

  1. Choisir le moteur

    Ce qu'on obtient : Ollama pour un poste ou quelques personnes ; vLLM pour un serveur à carte graphique qui sert une équipe ou une application. vLLM sert un seul modèle à la fois.

    À vérifier : le nombre de personnes qui l'appelleront en même temps

Deux moteurs, deux usages. Ollama : un poste ou quelques personnes ; des fichiers GGUF quantifiés, 4 bits par défaut ; une demande à la fois par modèle ; 127.0.0.1, port 11434, la machine seule ; aucun mot de passe ; Mac, Windows, Linux. vLLM : un serveur à carte graphique, beaucoup de demandes ; des modèles de Hugging Face, en 16 bits ou quantifiés ; le regroupement continu des demandes ; port 8000, toutes les interfaces sans l'option --host ; une clé sur une partie des routes ; Linux et carte NVIDIA récente.
  1. Choisir la quantification

    Ce qu'on obtient : le format du modèle : GGUF pour Ollama et llama.cpp ; pour vLLM, le 16 bits d'origine, ou un modèle déjà quantifié, FP8, INT8, INT4, AWQ, GPTQ, GGUF. D'après l'étude de Kurtic et ses coauteurs, l'INT4 sur les poids est le plus économique pour des demandes une à une, le W8A8 avec beaucoup de demandes regroupées.

    À vérifier : que votre carte prend le format en charge : le FP8 W8A8 demande une carte Ada, Hopper ou AMD.

La taille et la vitesse d'un modèle selon sa quantification

0306090 0 Gio4 Gio8 Gio12 Gio16 Gio tokens par seconde en génération taille du fichier F16Q8_0Q6_KQ5_K_MQ4_K_MQ2_K
Llama 3.1 8B, mesure publiée par llama.cpp ; le matériel n'est pas précisé, les vitesses valent en comparaison entre elles. La perte de qualité n'est pas dans cette table. Lue le 9 octobre 2026.
Voir en tableau
Valeurs du graphique : Étapes
TypeBits par poidsTailleTokens par seconde
F1616,0014,96 Gio29,17
Q8_08,507,95 Gio50,93
Q6_K6,566,14 Gio58,67
Q5_K_M5,705,33 Gio67,23
Q4_K_M4,894,58 Gio71,93
Q3_K_M4,003,74 Gio71,68
Q2_K3,162,95 Gio79,85
IQ2_XXS2,382,23 Gio79,86
IQ1_S2,001,87 Gio79,73
  • Pourquoi plus petit va plus vite : pour chaque token, la carte relit tous les poids du modèle ; moins d'octets à lire, plus de tokens par seconde, jusqu'à ce que le calcul lui-même devienne la limite, vers 80 tokens par seconde dans cette mesure.
  • Ce que la quantification fait perdre : sur toute la famille Llama 3.1 et plus de 500 000 évaluations, le FP8 est sans perte en pratique, l'INT8 bien réglé perd 1 à 3 %, l'INT4 sur les seuls poids rivalise avec le 8 bits.
  • Ce qu'il faut éviter : requantifier un modèle déjà quantifié, qui peut beaucoup dégrader la qualité ; mieux vaut partir du 16 bits, avec une matrice d'importance.
  1. Installer vLLM

    Ce qu'on obtient : un environnement Python dédié, créé avec uv, puis vLLM ; la version 0.31.0 est sortie le 5 octobre 2026.

    À vérifier : que le pilote de la carte est installé : uv choisit la version de PyTorch d'après lui

  2. Servir le modèle sur la machine seule

    Ce qu'on obtient : vllm serve avec --host 127.0.0.1 : sans cette option, vLLM écoute sur toutes les interfaces, même si sa documentation parle de localhost. La clé se donne par VLLM_API_KEY.

    À vérifier : vLLM télécharge le modèle depuis Hugging Face, et applique les réglages recommandés par son auteur, sauf --generation-config vllm.

terminal, installation
uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=auto
terminal, service
export VLLM_API_KEY="$(openssl rand -hex 32)"   # une clé longue, à ranger dans le coffre de l'équipe
vllm serve Qwen/Qwen2.5-1.5B-Instruct \
  --host 127.0.0.1 --port 8000 \
  --max-model-len 16k
  1. Régler la mémoire

    Ce qu'on obtient : vLLM prend 92 % de la mémoire de la carte par défaut ; les poids d'abord, le reste pour le cache des conversations. --max-model-len plafonne la fenêtre, --kv-cache-dtype fp8 range le cache en 8 bits, --tensor-parallel-size répartit le modèle sur plusieurs cartes.

    À vérifier : la fenêtre réglée couvre vos plus longs documents, sans plus

La mémoire d'une carte sous vLLM, calcul d'exemple sur une carte de 24 Go : vLLM en prend 92 % par défaut, soit 22 Go ; les poids d'un modèle de 8 milliards de paramètres en 16 bits en occupent environ 16 ; il reste environ 6 Go pour le cache des conversations, qui décide du nombre de demandes servies à la fois et de la longueur des fenêtres ; 2 Go restent libres. --max-model-len plafonne la fenêtre ; --kv-cache-dtype fp8 range le cache en 8 bits ; un modèle quantifié libère de la place ; --tensor-parallel-size répartit un grand modèle sur plusieurs cartes.
  1. Appeler le serveur

    Ce qu'on obtient : l'adresse http://127.0.0.1:8000/v1, compatible avec les bibliothèques d'OpenAI, et la clé dans l'en-tête.

    À vérifier : la liste des modèles, /v1/models, répond avec la clé et refuse sans elle

terminal, appel d'essai
curl http://127.0.0.1:8000/v1/chat/completions \
  -H "Authorization: Bearer $VLLM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "Qwen/Qwen2.5-1.5B-Instruct", "messages": [{"role": "user", "content": "Bonjour"}]}'
Python
import os
from openai import OpenAI

client = OpenAI(base_url="http://127.0.0.1:8000/v1", api_key=os.environ["VLLM_API_KEY"])
r = client.chat.completions.create(
    model="Qwen/Qwen2.5-1.5B-Instruct",
    messages=[{"role": "user", "content": "Bonjour"}],
)
print(r.choices[0].message.content)

Le modèle d'exemple est celui de la documentation de vLLM. Commandes tirées de cette documentation ; Meridal ne les a pas exécutées pour cette page.

  1. Ouvrir à l'équipe derrière un proxy

    Ce qu'on obtient : un proxy inverse, nginx par exemple, qui ne laisse passer que les routes voulues et ajoute l'authentification, une limite de débit et un journal ; un pare-feu qui ne laisse entrer que son port.

    À vérifier : jamais VLLM_SERVER_DEV_MODE=1 en production ; VLLM_MAX_N_SEQUENCES à 64 ou 128 si le service est public.

Ce que la clé de vLLM protège. Les postes de l'équipe passent par un proxy inverse, qui ne laisse passer que /v1/chat/completions et /v1/models, et ajoute l'authentification, une limite de débit et un journal. Dans vLLM, sur 127.0.0.1 port 8000 : protégées par --api-key, les routes /v1, /v2, /inference et /cohere ; sans clé, /invocations, qui fait la même inférence, /pause, /abort_requests, /update_weights ; le proxy ne les laisse pas passer. À côté, torch.distributed ouvre un port sur toutes les interfaces : le pare-feu ne laisse entrer que le port du proxy.
  1. Tenir à jour

    Ce qu'on obtient : les failles de vLLM se corrigent par version : contournement de la clé avant 0.22.0, fuite d'adresse menant à l'exécution de code avant 0.14.1, code exécuté depuis la configuration d'un modèle avant 0.11.1.

    À vérifier : le cache de vLLM, ~/.cache/vllm, n'est lisible et modifiable que par son compte : vLLM le charge sans vérifier son intégrité.

Les versions de vLLM touchées par des failles graves. CVE-2026-48746, notée 9,1 : contournement de la clé, de la 0.3.0 à la 0.22.0. CVE-2026-22778, notée 9,8 : fuite d'adresse menant à l'exécution de code, de la 0.8.3 à la 0.14.1. CVE-2025-66448, notée 8,8 : code exécuté depuis la configuration d'un modèle, avant la 0.11.1. La dernière version est la 0.31.0, du 5 octobre 2026.
3

Contrôle du résultat

4

Problèmes fréquents

vLLM refuse de démarrer faute de mémoire

CauseLes poids et le cache dépassent la part réservée de la carte.

À faireUne fenêtre plus courte par --max-model-len, un modèle quantifié, ou plusieurs cartes par --tensor-parallel-size.

Le serveur répond depuis d'autres machines

CauseL'option --host manque : vLLM écoute sur toutes les interfaces.

À faire--host 127.0.0.1, et un pare-feu.

Des appels passent sans clé

CauseLa clé ne protège que /v1, /v2, /inference et /cohere.

À faireUn proxy inverse qui n'autorise que les routes voulues.

Les réponses ne suivent pas les réglages attendus

CausevLLM applique par défaut les réglages recommandés par l'auteur du modèle.

À faire--generation-config vllm, ou des réglages explicites dans chaque appel.

Une requête bloque le serveur

CauseLe paramètre n demande des centaines de réponses à la fois.

À faireVLLM_MAX_N_SEQUENCES, 16 384 par défaut, à 64 ou 128.

Le modèle quantifié répond nettement moins bien

CauseIl a peut-être été requantifié à partir d'un modèle déjà quantifié, ou descend sous 4 bits.

À faireRepartir du 16 bits, avec une matrice d'importance ; comparer sur vos cas.

vLLM ne s'installe pas sous Windows

CauseWindows n'est pas pris en charge directement.

À faireWSL, ou un serveur Linux loué.

5

Retour en arrière

  1. Fermer le serveur au réseau : relancer vLLM avec --host 127.0.0.1, retirer la règle du pare-feu qui ouvrait le port 8000.
  2. Revenir à une version de vLLM : réinstaller la version précédente dans l'environnement, après avoir vérifié qu'elle ne porte pas de faille corrigée depuis.
  3. Changer de quantification : vLLM sert un seul modèle ; arrêter le service, le relancer avec l'autre version du modèle, et refaire la comparaison sur vos cas.
  4. Repartir d'un cache propre : supprimer ~/.cache/vllm, que vLLM recrée ; son contenu se charge sans vérification d'intégrité.
6

Variantes par outil

Quel outil pour quel cas, conseil de Meridal. Une personne, un poste, avec une interface : LM Studio. Quelques personnes ou des applications, sur un poste ou un petit serveur : Ollama. Une équipe ou une application, sur un serveur à carte graphique : vLLM. Un Mac : Ollama, sur MLX, ou vLLM-Metal. Une quantification à soi, ou un modèle absent des bibliothèques : llama.cpp.
  • Plusieurs demandes : une à la fois par modèle par défaut ; OLLAMA_NUM_PARALLEL en accepte plus, et la mémoire grandit d'autant ; au-delà de 512 demandes en attente, Ollama répond par une erreur 503.
  • Le cache : OLLAMA_KV_CACHE_TYPE=q8_0 divise sa mémoire par deux, avec une très petite perte ; q4_0, par quatre.
  • Un modèle absent de la bibliothèque : importer un GGUF déjà quantifié ; Ollama ne quantifie pas à l'import.
  • La mise en place : Ollama et LM Studio.
7

Vérification

1ComprendrePourquoi un modèle quantifié en 4 bits génère-t-il plus vite qu'en 16 bits ?

Pour chaque token, la carte relit tous les poids : un fichier trois fois plus petit se relit plus vite. Llama 3.1 8B passe de 29 à 72 tokens par seconde dans la mesure de llama.cpp.

2ComprendreQue protège la clé de vLLM, et que laisse-t-elle ouvert ?

Les routes /v1, /v2, /inference et /cohere ; /invocations, qui fait la même inférence, et des routes de contrôle comme /pause restent sans clé. D'où le proxy inverse.

3AppliquerVous servez un modèle à vingt personnes sur une carte H100 louée. Quels réglages ?

vLLM, sur 127.0.0.1, derrière un proxy inverse qui n'autorise que les routes voulues, avec authentification ; un pare-feu qui n'ouvre que le port du proxy ; un modèle en FP8 ou en W8A8, adapté aux demandes regroupées ; une fenêtre réglée au besoin ; la dernière version.

8

Lectures suivantes

Les pages qui renvoient ici

Limites et sources

Les commandes viennent de la documentation de vLLM et de llama.cpp, lue le 9 octobre 2026 ; Meridal ne les a pas exécutées.

Les vitesses de llama.cpp sont mesurées sur un matériel qu'il ne précise pas : elles valent en comparaison entre elles. La perte de qualité vient d'une étude sur Llama 3.1, avec les formats de vLLM ; elle varie selon le modèle et la tâche.

La documentation de vLLM dit que le serveur démarre à localhost ; son code écoute sur toutes les interfaces sans --host. La page suit le code.

La mémoire de la carte est un calcul d'exemple, en ordre de grandeur.

  1. vLLM, sécurité ; vLLM, arguments de vllm serve ; vLLM, code de l'adresse d'écoute ; llama.cpp, quantification ; Kurtic et al., ACL 2025 ; ANSSI, recommandations pour un système d'IA générative.
  2. Les relevés : apprendre/recherches/2026-10-09-vllm-quantification.json et 2026-10-09-modele-chez-soi.json.

Écrit par Meridal, avec l'aide de l'IA ; chaque fait vérifié à sa source et relu avant publication. Texte et schémas sous licence CC BY 4.0 : reprenez-les en citant Meridal. Le code sous licence MIT.

Service correspondant

Un assistant qui connaît votre entreprise

3 300 € à 10 200 €, puis sur devis

Voir le service

Un premier échange de 30 minutes

En visio et sans frais : vous décrivez votre situation, nous vous indiquons ce qui est réalisable, avec quels outils et pour quel ordre de prix. Vous pouvez aussi nous écrire ; chaque message reçoit une réponse écrite.