Avancé 12 minDéploiement

SGLang : servir un LLM local à plusieurs utilisateurs

Réponse directe

SGLang est un serveur d'inférence pensé pour plusieurs utilisateurs simultanés : il s'installe avec uv, se lance en une commande sur le port 30000, et doit son débit sous charge à RadixAttention (cache de préfixes) et à l'ordonnancement continu des requêtes. Il exige un GPU CUDA récent, ce qui en fait un outil de serveur partagé, pas un remplaçant d'Ollama sur un poste personnel mono-utilisateur.

SGLang est un framework de serveur d'inférence, développé par la communauté LMSYS, conçu pour du service à haut débit et faible latence face à plusieurs requêtes simultanées. Ce guide couvre son installation, le fonctionnement de RadixAttention, les leviers de concurrence à connaître, et les critères pour choisir entre SGLang, vLLM et Ollama selon le nombre d'utilisateurs réels à servir.

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

#Ce que fait SGLang

SGLang se présente comme un framework de service haute performance pour LLM et modèles multimodaux, conçu pour une inférence à faible latence et haut débit, d'un seul GPU jusqu'à de larges clusters distribués. Le projet revendique des déploiements de production générant des trillions de tokens chaque jour sur plus de 400 000 GPU dans le monde, et est hébergé par l'organisation open source à but non lucratif LMSYS.

Compatible avec les API OpenAI et Hugging Face, SGLang prend en charge une large gamme de modèles (Llama, Qwen, DeepSeek, GLM, Mistral, Gemma) et de matériels (GPU NVIDIA, AMD, CPU Intel Xeon, TPU Google, NPU Ascend). La dernière version au 28 septembre 2026 est v0.5.20, publiée le 18 septembre 2026.

i
SGLang n'est pas un remplaçant direct d'Ollama
SGLang cible le service à plusieurs utilisateurs sur du matériel serveur. Il expose même une API compatible avec le client Ollama pour faciliter la migration d'outils existants, mais il n'installe ni ne remplace Ollama lui-même.

#Installer et lancer le serveur

Le kit IA Locale en Entreprise

Déployer une IA locale au travail : RGPD, AI Act, architecture multi-utilisateurs, coûts, note pour la direction.

  • Espace en ligne à vie
  • PDF + fichiers
  • Mises à jour à vie

L'installation recommandée par la documentation officielle passe par uv, plus rapide que pip classique. Le drapeau --prerelease=allow est nécessaire car certaines dépendances de SGLang ne publient que des pré-versions sur PyPI.

Installation
pip install --upgrade pip
pip install uv
uv pip install --prerelease=allow sglang

Le lancement en conteneur Docker reste la voie la plus reproductible pour un déploiement serveur, avec le port 30000 utilisé par défaut pour l'API.

Docker
docker run --gpus all \
    --shm-size 32g \
    -p 30000:30000 \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    --env "HF_TOKEN=<secret>" \
    --ipc=host \
    lmsysorg/sglang:latest \
    python3 -m sglang.launch_server --model-path meta-llama/Llama-3.1-8B-Instruct --host 0.0.0.0 --port 30000

La documentation précise que SGLang exige désormais CUDA 13 : les images et roues CUDA 12 (cu129) sont retirées depuis que PyTorch 2.14 ne publie plus de build CUDA 12.9, et la version 0.5.19 reste la dernière à proposer une voie CUDA 12. Un déploiement sur du matériel plus ancien doit donc figer cette version ou vérifier le pilote GPU avant de mettre à jour.

#RadixAttention et le cache de préfixes

Le cœur de la promesse de débit de SGLang est RadixAttention : les préfixes de séquences déjà calculés (un system prompt partagé, le début d'une conversation multi-tours) sont organisés dans un arbre radix et réutilisés entre requêtes, au lieu d'être recalculés à chaque appel. L'annonce d'origine du projet, en janvier 2024, revendiquait jusqu'à 5x d'inférence plus rapide grâce à ce mécanisme — un chiffre d'annonce du projet sur son propre banc de test de l'époque, pas une mesure indépendante récente sur votre matériel.

Ce gain profite surtout aux scénarios à préfixes partagés : plusieurs utilisateurs interrogeant le même system prompt, un agent qui relit le même contexte à chaque tour, ou du few-shot avec les mêmes exemples. Un flux de requêtes sans aucun préfixe commun (questions totalement indépendantes, sans historique) profite beaucoup moins de RadixAttention.

→
Gradient de surprise
Le gain de RadixAttention dépend directement de la proportion de tokens de préfixe partagés entre requêtes. Un déploiement où chaque utilisateur a son propre system prompt long et différent perd une grande partie de l'intérêt du cache, même si la fonctionnalité reste active.

Le runtime combine RadixAttention à un ordonnanceur CPU à zéro surcoût, une disagrégation prefill-decode, le décodage spéculatif, l'ordonnancement continu des requêtes (continuous batching) et la pagination de l'attention (paged attention) — un empilement de techniques d'optimisation plutôt qu'un mécanisme isolé.

#Régler la concurrence et la mémoire

Trois paramètres de lancement gouvernent la façon dont SGLang absorbe plusieurs utilisateurs en parallèle. --mem-fraction-static fixe la part de mémoire GPU réservée aux poids du modèle et au cache KV ; la documentation recommande de la réduire en cas d'erreur de mémoire saturée, faute de quoi elle est calculée automatiquement à partir de la mémoire GPU disponible.

Paramètres de concurrence à connaître
ParamètreRôle
--max-running-requestsNombre maximal de requêtes traitées en même temps (aucune limite par défaut)
--max-queued-requestsNombre maximal de requêtes en attente avant traitement
--schedule-policyPolitique d'ordonnancement des requêtes : fcfs (premier arrivé, premier servi) par défaut, ou lpm, random, dfs-weight, lof, priority, routing-key
--chunked-prefill-sizeDécoupage du prefill en tronçons pour éviter qu'une longue requête ne bloque les autres

Sans limite explicite sur --max-running-requests, SGLang accepte autant de requêtes que la mémoire du cache KV le permet, ce qui peut dégrader la latence par requête sous forte charge plutôt que de refuser poliment les nouvelles connexions. Fixer une limite explicite, cohérente avec la VRAM disponible, est le premier réglage à faire avant d'ouvrir le serveur à plusieurs utilisateurs réels.

#Quand choisir SGLang plutôt que vLLM ou Ollama

Les trois outils répondent à des besoins différents. Ollama vise l'usage personnel mono-utilisateur avec une prise en main minimale ; SGLang et vLLM ciblent le service à plusieurs utilisateurs sur GPU serveur, avec des philosophies proches (cache de préfixes, batching continu) mais des historiques et des écosystèmes distincts.

Un seul utilisateur, poste personnel
Ollama ou llama.cpp restent plus simples à installer et à faire tourner sur CPU ou GPU grand public, sans configuration de service réseau.
Plusieurs utilisateurs, système déjà construit autour de vLLM
Rester sur vLLM évite une migration ; notre guide dédié couvre son déploiement en production.
Plusieurs utilisateurs, priorité au débit sous préfixes partagés
SGLang, avec RadixAttention, est le candidat naturel — à condition de disposer d'un GPU CUDA compatible.
Compatibilité client Ollama souhaitée sans installer Ollama
SGLang expose une API compatible avec la CLI et la librairie Python Ollama, ce qui permet de réutiliser des scripts existants sans faire tourner le serveur Ollama lui-même.

Pour un panorama plus large des architectures d'inférence (llama.cpp, vLLM, Exllama), le comparatif de backends du site détaille les compromis hors du seul cas SGLang.

#Ce que le matériel impose

Le guide de démarrage rapide de SGLang est explicite : un GPU NVIDIA avec support CUDA sm80 ou supérieur (A10, A100, L4, L40S, H100) est un prérequis pour la voie d'installation standard sous Linux, la plateforme recommandée. Le projet annonce par ailleurs une prise en charge matérielle plus large — GPU AMD (MI355, MI300), CPU Intel Xeon, TPU Google, NPU Ascend — via des voies d'installation dédiées et distinctes du chemin GPU NVIDIA principal.

!
Pas un outil CPU-only par défaut
Contrairement à llama.cpp ou Ollama, SGLang n'est pas pensé en priorité pour tourner sans GPU dédié. Sur un Mac ou un PC sans carte NVIDIA récente, Ollama ou LM Studio restent les choix par défaut ; SGLang prend tout son sens sur un serveur GPU dédié à plusieurs utilisateurs.

#Ce que coûte la mémoire par requête

« Servir plusieurs utilisateurs » se traduit très concrètement par une consommation de VRAM qui grossit avec le nombre de requêtes actives, pas seulement avec la taille du modèle. Le cache KV que --mem-fraction-static et --max-total-tokens gèrent stocke, pour chaque token déjà généré d'une requête, deux vecteurs (clé et valeur) par couche d'attention. La formule générale est : octets par token = 2 × nombre de couches × têtes d'attention KV × dimension d'une tête × octets par valeur (2 en FP16/BF16, 1 en FP8).

Calcul illustratif pour une architecture proche de Llama-3.1-8B-Instruct (32 couches, 8 têtes KV en attention groupée, dimension de tête 128) : en FP16, cela donne 2 × 32 × 8 × 128 × 2 = 131 072 octets par token, soit environ 128 Ko par token. Pour une requête avec 8 192 tokens de contexte (prompt et réponse cumulés), le cache KV de cette seule requête pèse alors environ 1 Go de VRAM — avant même de compter les poids du modèle. Sur un GPU de 24 Go avec environ 16 Go réservés aux poids en Q4 et au socle du runtime, la marge restante ne laisse la place qu'à quelques requêtes actives simultanées à ce niveau de contexte, ce qui explique pourquoi une limite explicite sur --max-running-requests évite une dégradation plutôt qu'un refus propre des nouvelles connexions.

→
Ordre de grandeur, pas une mesure
Ce calcul est une estimation théorique fondée sur l'architecture du modèle, pas un chiffre mesuré sur un déploiement SGLang réel : le nombre exact de requêtes simultanées supportées dépend aussi du modèle chargé, de la longueur réelle du contexte et de --mem-fraction-static.

#Sécurité et observabilité

Par défaut, l'API SGLang lancée avec sglang.launch_server n'exige aucune authentification : quiconque atteint le port 30000 peut envoyer des requêtes. L'option --api-key définit une clé exigée par le serveur, y compris sur son endpoint compatible OpenAI ; sans elle, exposer le serveur au-delà de localhost ou d'un réseau interne de confiance revient à laisser un accès ouvert à l'inférence, et donc à la facture GPU associée.

Pour le suivi en production, l'option --enable-metrics (désactivée par défaut) publie des métriques au format Prometheus sur un endpoint /metrics : débit de requêtes, latence d'inférence, vitesse de génération de tokens et efficacité du cache y sont exposés pour un scraping régulier, plutôt que de deviner l'état du serveur à partir des seuls journaux.

#Dépannage : symptômes, cause, correction

Symptômes fréquents en service multi-utilisateurs
SymptômeCause probableCorrection
Erreur de mémoire saturée (out of memory) au lancement--mem-fraction-static calculé automatiquement trop haut pour la VRAM réellement disponibleRéduire --mem-fraction-static explicitement, comme le recommande la documentation officielle
Latence qui explose sous charge sans erreurAucune limite sur --max-running-requests : le serveur accepte des requêtes tant que le cache KV le permetFixer --max-running-requests selon la VRAM disponible et le calcul de coût par requête ci-dessus
Échec d'installation ou de démarrage après mise à jourPassage à une version qui exige CUDA 13 sur un pilote resté en CUDA 12Figer la version 0.5.19 (dernière voie CUDA 12) ou mettre à jour le pilote GPU avant SGLang
Serveur accessible sans contrôle depuis le réseauAucune clé définie : --api-key est vide par défautDéfinir --api-key avant d'exposer le serveur au-delà d'un réseau de confiance

#Limites et points de vigilance

Le chiffre « jusqu'à 5x plus rapide » qui accompagne encore la présentation de RadixAttention date de l'annonce initiale du projet en janvier 2024 : il illustre l'apport du mécanisme sur le banc de test de l'époque, pas un gain garanti sur un déploiement récent avec des modèles et des GPU différents. Le dimensionnement réel dépend du taux de partage de préfixes entre requêtes, du modèle choisi et du GPU utilisé — à mesurer sur son propre trafic plutôt qu'à déduire de l'annonce d'origine.

Le passage obligatoire à CUDA 13 (la version 0.5.19 étant la dernière à proposer une voie CUDA 12) mérite une vérification du pilote GPU et de la version CUDA installée avant toute mise à jour vers une version récente, sous peine d'échec d'installation sur un serveur resté en CUDA 12.

Le cadence de publication du projet est également à surveiller pour un déploiement de production : SGLang enchaîne des versions mineures toutes les deux à trois semaines environ (v0.5.20 le 18 septembre 2026, v0.5.19 le 5 septembre, v0.5.18 le 22 août), ce qui impose de figer une version précise dans les images Docker plutôt que de suivre le tag latest sur un service en production, au risque d'un changement de comportement non anticipé lors d'un redéploiement.

Questions fréquentes
SGLang remplace-t-il Ollama ?+
Non, ce sont deux outils différents. Ollama cible l'usage personnel mono-utilisateur sur poste de travail, avec une prise en main minimale ; SGLang cible le service à plusieurs utilisateurs simultanés sur GPU serveur, avec une configuration plus poussée. SGLang expose même une API compatible avec le client Ollama, sans qu'Ollama tourne réellement derrière — pratique pour réutiliser des scripts existants sans migrer tout l'outillage.
Faut-il un GPU pour faire tourner SGLang ?+
Le guide de démarrage rapide officiel exige un GPU NVIDIA avec support CUDA sm80 ou supérieur (A10, A100, L4, L40S, H100) pour la voie standard sous Linux. Des voies distinctes existent pour AMD, Intel Xeon, TPU ou NPU, mais SGLang n'est pas conçu en priorité pour un usage CPU-only sur un poste personnel : Ollama ou llama.cpp restent plus adaptés dans ce cas.
RadixAttention accélère-t-il toutes les requêtes de la même façon ?+
Non. Le gain dépend du volume de tokens de préfixe partagés entre requêtes : un system prompt commun à plusieurs utilisateurs ou un historique de conversation réutilisé à chaque tour en profitent beaucoup. Des requêtes totalement indépendantes, sans aucun préfixe commun entre elles, en profitent beaucoup moins, même si le mécanisme reste actif sur le serveur.
Quel paramètre régler en premier pour servir plusieurs utilisateurs avec SGLang ?+
--max-running-requests, pour fixer une limite explicite cohérente avec la VRAM disponible et le coût en cache KV de chaque requête active. Sans cette limite, SGLang accepte des requêtes tant que le cache KV le permet, ce qui peut dégrader la latence par requête sous forte charge plutôt que de refuser poliment les connexions supplémentaires.
SGLang fonctionne-t-il avec un GPU plus ancien limité à CUDA 12 ?+
Pas avec les versions récentes. SGLang exige désormais CUDA 13 ; la version 0.5.19 est la dernière à proposer une voie CUDA 12 : un serveur resté sur un pilote CUDA 12 doit soit figer cette version, soit mettre à jour son pilote GPU avant d'installer une version plus récente de SGLang, sous peine d'échec d'installation.
Combien de mémoire GPU prend le cache KV d'une seule requête ?+
Cela dépend du modèle et de la longueur de contexte, mais l'ordre de grandeur se calcule : pour une architecture proche de Llama-3.1-8B (32 couches, 8 têtes KV), un contexte de 8 192 tokens pèse environ 1 Go de VRAM en FP16, avant même de compter les poids du modèle. Passer en FP8 divise ce chiffre par deux.
Comment sécuriser un serveur SGLang exposé sur le réseau ?+
Définir --api-key pour exiger une authentification par jeton sur toutes les requêtes, y compris l'endpoint compatible OpenAI ; sans cette option, le serveur reste ouvert à quiconque atteint le port 30000. Activer --enable-metrics séparément pour surveiller débit et latence via Prometheus, sans confondre observabilité et contrôle d'accès.

Ce guide vous a aidé ?

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