Avanzato 12 minDeployment

SGLang: servire un LLM locale a più persone utilisateurs

Risposta diretta

SGLang è un server di inferenza pensato per più utenti simultanei: si installa con uv, si avvia con un solo comando sulla porta 30000 e deve la propria velocità di elaborazione sotto carico a RadixAttention (cache dei prefissi) e alla pianificazione continua delle richieste. Richiede una GPU CUDA recente, il che lo rende uno strumento per un server condiviso, non un sostituto di Ollama su un computer personale usato da una sola persona.

SGLang è un framework per server di inferenza, sviluppato dalla comunità LMSYS, progettato per offrire un throughput elevato e una bassa latenza con più richieste simultanee. Questa guida tratta la sua installazione, il funzionamento di RadixAttention, le impostazioni da conoscere per gestire la concorrenza e i criteri per scegliere tra SGLang, vLLM e Ollama in base al numero reale di utenti da servire.

Di Mohamed Meguedmi·Agg. 2026-09-28·Testato su Windows, macOS e Linux

#Cosa fa SGLang

SGLang si presenta come un framework ad alte prestazioni per servire LLM e modelli multimodali, progettato per un'inferenza a bassa latenza e ad alto throughput, da una singola GPU fino a grandi cluster distribuiti. Il progetto dichiara che le sue implementazioni in produzione generano trilioni di token ogni giorno su oltre 400.000 GPU nel mondo ed è ospitato dall'organizzazione open source senza scopo di lucro LMSYS.

Compatibile con le API OpenAI e Hugging Face, SGLang supporta una vasta gamma di modelli (Llama, Qwen, DeepSeek, GLM, Mistral, Gemma) e di hardware (GPU NVIDIA, AMD, CPU Intel Xeon, TPU Google, NPU Ascend). Al 28 settembre 2026, la versione più recente è v0.5.20, pubblicata il 18 settembre 2026.

i
SGLang non è un sostituto diretto di Ollama
SGLang è pensato per servire più utenti su hardware server. Espone persino un'API compatibile con il client Ollama per facilitare la migrazione di strumenti esistenti, ma non installa né sostituisce Ollama stesso.

#Installare e avviare il server

Il kit IA Locale in Azienda

Implementare un'IA locale sul lavoro: GDPR, AI Act, architettura multiutente, costi, nota per la direzione.

  • Spazio online a vita
  • PDF + file
  • Aggiornamenti a vita

L'installazione consigliata dalla documentazione ufficiale prevede uv, più veloce di pip classico. È necessario il flag --prerelease=allow perché alcune dipendenze di SGLang pubblicano solo versioni pre-release su PyPI.

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

L'avvio in un container Docker resta la soluzione più riproducibile per un deployment su server, con la porta 30000 utilizzata per impostazione predefinita per 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 documentazione precisa che SGLang richiede ora CUDA 13: le immagini e i pacchetti wheel CUDA 12 (cu129) sono stati rimossi da quando PyTorch 2.14 non pubblica più build CUDA 12.9, e la versione 0.5.19 rimane l'ultima a offrire un'opzione per CUDA 12. Un deployment su hardware meno recente deve quindi mantenere fissa questa versione o verificare il driver GPU prima di aggiornare.

#RadixAttention e la cache dei prefissi

Il cuore della promessa di throughput di SGLang è RadixAttention: i prefissi delle sequenze già calcolati (un system prompt condiviso, l'inizio di una conversazione a più turni) vengono organizzati in un albero radix e riutilizzati tra richieste, invece di essere ricalcolati a ogni chiamata. Nell'annuncio iniziale del progetto, a gennaio 2024, si dichiarava un'inferenza fino a 5 volte più veloce grazie a questo meccanismo — un dato annunciato dal progetto sulla base del proprio banco di prova dell'epoca, non una misurazione indipendente recente sul tuo hardware.

Questo vantaggio si manifesta soprattutto negli scenari con prefissi condivisi: più utenti che inviano richieste con lo stesso system prompt, un agente che rilegge lo stesso contesto a ogni turno oppure il few-shot con gli stessi esempi. Un flusso di richieste senza alcun prefisso comune (domande del tutto indipendenti, senza cronologia) trae molto meno beneficio da RadixAttention.

→
Gradiente di sorpresa
Il vantaggio di RadixAttention dipende direttamente dalla proporzione di token di prefisso condivisi tra le richieste. Un deployment in cui ogni utente ha un proprio prompt di sistema lungo e diverso perde gran parte dei benefici della cache, anche se la funzionalità rimane attiva.

Il runtime combina RadixAttention con uno scheduler CPU senza overhead, la disaggregazione prefill-decode, la decodifica speculativa, la schedulazione continua delle richieste (continuous batching) e la paginazione dell'attenzione (paged attention): un insieme di tecniche di ottimizzazione anziché un meccanismo isolato.

#Regola la concorrenza e la memoria

Tre parametri di avvio regolano il modo in cui SGLang gestisce più utenti in parallelo. --mem-fraction-static fissa la quota di memoria GPU riservata ai pesi del modello e alla cache KV; la documentazione consiglia di ridurla in caso di errore per esaurimento della memoria, altrimenti viene calcolata automaticamente in base alla memoria GPU disponibile.

Parametri di concorrenza da conoscere
ParametroRuolo
--max-running-requestsNumero massimo di richieste trattate contemporaneamente (nessun limite predefinito)
--max-queued-requestsNumero massimo di richieste in attesa di elaborazione
--schedule-policyPolitica di scheduling delle richieste: fcfs (primo arrivato, primo servito) per impostazione predefinita, oppure lpm, random, dfs-weight, lof, priority, routing-key
--chunked-prefill-sizeSuddivisione del prefill in blocchi per evitare che una richiesta lunga blocchi le altre

Senza un limite esplicito per --max-running-requests, SGLang accetta tutte le richieste consentite dalla memoria della cache KV, il che può peggiorare la latenza per richiesta sotto un carico elevato anziché rifiutare cortesemente le nuove connessioni. Impostare un limite esplicito, coerente con la VRAM disponibile, è la prima regolazione da effettuare prima di aprire il server a più utenti reali.

#Quando scegliere SGLang piuttosto che vLLM o Ollama

I tre strumenti rispondono a esigenze diverse. Ollama è pensato per l'uso personale da parte di un solo utente e richiede pochissimo sforzo per iniziare a usarlo; SGLang e vLLM sono pensati per servire più utenti su GPU per server, con filosofie simili (cache dei prefissi, batching continuo) ma storie ed ecosistemi distinti.

Un solo utente, postazione personale
Ollama o llama.cpp restano più semplici da installare e da eseguire su CPU o GPU consumer, senza dover configurare un servizio di rete.
Più utenti, sistema già costruito attorno a vLLM
Restare su vLLM evita una migrazione; la nostra guida dedicata ne descrive il deployment in produzione.
Più utenti, priorità al throughput con prefissi condivisi
SGLang, con RadixAttention, è il candidato naturale, a patto di disporre di una GPU CUDA compatibile.
Compatibilità con i client Ollama desiderata senza installare Ollama
SGLang offre un'API compatibile con la CLI e la libreria Python Ollama, il che permette di riutilizzare script esistenti senza avviare il server Ollama stesso.

Per una panoramica più ampia delle architetture di inferenza (llama.cpp, vLLM, Exllama), il confronto dei backend del sito illustra in dettaglio i compromessi anche al di fuori del solo caso SGLang.

#Ciò che l'hardware impone

La guida rapida di SGLang è esplicita: una GPU NVIDIA con supporto CUDA sm80 o superiore (A10, A100, L4, L40S, H100) è un prerequisito per il percorso di installazione standard su Linux, la piattaforma consigliata. Il progetto annuncia inoltre un supporto hardware più ampio — GPU AMD (MI355, MI300), CPU Intel Xeon, TPU Google, NPU Ascend — attraverso percorsi di installazione dedicati e distinti dal percorso principale per le GPU NVIDIA.

!
Non è un tool CPU-only di default
A differenza di llama.cpp o Ollama, SGLang non è stato progettato principalmente per funzionare senza una GPU dedicata. Su un Mac o un PC senza una scheda NVIDIA recente, Ollama o LM Studio rimangono le scelte predefinite; SGLang si rivela veramente efficace su un server GPU dedicato a più utenti.

#Quanto costa la memoria per richiesta

«Servire più utenti» si traduce molto concretamente in un consumo di VRAM che aumenta con il numero di richieste attive, non solo con la dimensione del modello. La cache KV gestita da --mem-fraction-static e --max-total-tokens memorizza, per ogni token già generato di una richiesta, due vettori (chiave e valore) per ogni strato di attenzione. La formula generale è: byte per token = 2 × numero di strati × numero di teste di attenzione KV × dimensione di una testa × byte per valore (2 in FP16/BF16, 1 in FP8).

Calcolo illustrativo per un'architettura simile a Llama-3.1-8B-Instruct (32 strati, 8 teste KV con attenzione raggruppata, dimensione delle teste pari a 128): in FP16, si ottiene 2 × 32 × 8 × 128 × 2 = 131.072 byte per token, cioè circa 128 KB per token. Per una richiesta con 8.192 token di contesto (prompt e risposta sommati), la cache KV di questa sola richiesta occupa quindi circa 1 GB di VRAM, prima ancora di contare i pesi del modello. Su una GPU da 24 GB con circa 16 GB riservati ai pesi in Q4 e alla memoria di base del runtime, il margine restante lascia spazio soltanto a poche richieste attive contemporaneamente con questa lunghezza di contesto. Questo spiega perché un limite esplicito su --max-running-requests evita un degrado delle prestazioni anziché un rifiuto ordinato delle nuove connessioni.

→
Ordine di grandezza, non una misura
Questo calcolo è una stima teorica basata sull'architettura del modello, non un valore misurato su un deploy reale di SGLang: il numero esatto di richieste simultanee supportate dipende anche dal modello caricato, dalla lunghezza effettiva del contesto e da --mem-fraction-static.

#Sicurezza e osservabilità

Per impostazione predefinita, l'API SGLang avviata con sglang.launch_server non richiede alcuna autenticazione: chiunque possa raggiungere la porta 30000 può inviare richieste. L'opzione --api-key imposta una chiave richiesta dal server, anche sul suo endpoint compatibile con OpenAI; senza questa opzione, esporre il server al di fuori di localhost o di una rete interna fidata equivale a lasciare libero accesso all'inferenza e quindi ai relativi costi GPU.

Per il monitoraggio in produzione, l'opzione --enable-metrics (disattivata per impostazione predefinita) pubblica metriche in formato Prometheus su un endpoint /metrics: frequenza delle richieste, latenza di inferenza, velocità di generazione dei token ed efficienza della cache vengono esposte per una raccolta periodica tramite scraping, anziché dedurre lo stato del server dai soli log.

#Risoluzione dei problemi: sintomi, causa, soluzione

Simptomi comuni in ambiente multiutente
SintomoCausa probabileCorrezione
Errore di memoria esaurita (out of memory) all'avvio--mem-fraction-static calcolato automaticamente troppo alto per la VRAM effettivamente disponibileRidurre esplicitamente --mem-fraction-static, come raccomanda la documentazione ufficiale
Latenza che esplode sotto carico senza erroriNessun limite su --max-running-requests: il server accetta richieste fintanto che la cache KV lo permetteImpostare --max-running-requests in base alla VRAM disponibile e al calcolo del costo per richiesta sopra indicato
Installazione o avvio non riusciti dopo un aggiornamentoPassaggio a una versione che richiede CUDA 13 con un driver ancora fermo a CUDA 12Bloccare la versione 0.5.19 (ultima opzione per CUDA 12) o aggiornare il driver GPU prima di SGLang
Server accessibile dalla rete senza controlliNessuna chiave definita: --api-key è vuoto per impostazione predefinitaImpostare --api-key prima di esporre il server al di fuori di una rete fidata

#Limiti e aspetti a cui prestare attenzione

Il dato « fino a 5 volte più veloce » che accompagna ancora la presentazione di RadixAttention risale all'annuncio iniziale del progetto nel gennaio 2024: illustra il contributo del meccanismo sul banco di prova dell'epoca, non un miglioramento garantito in un deployment recente con modelli e GPU diversi. Il dimensionamento effettivo dipende dal grado di condivisione dei prefissi tra le richieste, dal modello scelto e dalla GPU utilizzata: va valutato misurando il proprio traffico, anziché dedotto dall'annuncio originale.

Il passaggio obbligatorio a CUDA 13 (la versione 0.5.19 è l'ultima a offrire un'opzione per CUDA 12) richiede di verificare il driver GPU e la versione CUDA installata prima di qualsiasi aggiornamento a una versione recente, pena il fallimento dell'installazione su un server rimasto a CUDA 12.

Anche il ritmo di pubblicazione del progetto va monitorato per un deployment in produzione: SGLang rilascia versioni minori ogni due o tre settimane circa (v0.5.20 il 18 settembre 2026, v0.5.19 il 5 settembre, v0.5.18 il 22 agosto), il che impone di fissare una versione precisa nelle immagini Docker anziché seguire il tag latest per un servizio in produzione, per evitare un cambiamento di comportamento imprevisto durante un nuovo deployment.

Domande frequenti
SGLang sostituisce Ollama?+
No, sono due strumenti diversi. Ollama è pensato per l'uso personale da parte di un solo utente su workstation, con un apprendimento iniziale minimo; SGLang è pensato per servire più utenti contemporaneamente su GPU da server, con una configurazione più approfondita. SGLang espone persino un'API compatibile con il client Ollama, senza che Ollama sia realmente in esecuzione dietro le quinte — utile per riutilizzare script esistenti senza migrare tutti gli strumenti.
Serve una GPU per eseguire SGLang?+
La guida rapida ufficiale richiede una GPU NVIDIA con supporto CUDA sm80 o superiore (A10, A100, L4, L40S, H100) per il percorso standard su Linux. Esistono percorsi distinti per AMD, Intel Xeon, TPU o NPU, ma SGLang non è progettato principalmente per un uso con la sola CPU su un PC personale: Ollama o llama.cpp restano più adatti in questo caso.
RadixAttention accelera tutte le richieste allo stesso modo?+
No. Il guadagno dipende dalla quantità di token di prefisso condivisi tra le richieste: un prompt di sistema comune a più utenti o una cronologia della conversazione riutilizzata a ogni turno ne beneficiano molto. Le richieste completamente indipendenti, senza alcun prefisso comune tra loro, ne beneficiano molto meno, anche se il meccanismo rimane attivo sul server.
Quale parametro regolare per primo per servire più utenti con SGLang?+
--max-running-requests, per impostare un limite esplicito coerente con la VRAM disponibile e il consumo di cache KV di ogni richiesta attiva. Senza questo limite, SGLang accetta richieste finché la cache KV lo consente, il che, sotto carico elevato, può peggiorare la latenza di ogni richiesta anziché rifiutare cortesemente le connessioni aggiuntive.
SGLang funziona con una GPU più vecchia limitata a CUDA 12?+
Non con le versioni recenti. SGLang richiede ora CUDA 13; la versione 0.5.19 è l'ultima che offre supporto a CUDA 12: un server che rimane su un driver CUDA 12 deve mantenere questa versione oppure aggiornare il driver GPU prima di installare una versione più recente di SGLang, altrimenti l'installazione fallirà.
Quanta memoria GPU occupa la cache KV di una singola richiesta?+
Dipende dal modello e dalla lunghezza del contesto, ma l'ordine di grandezza si può calcolare: per un'architettura simile a Llama-3.1-8B (32 strati, 8 teste KV), un contesto di 8.192 token occupa circa 1 GB di VRAM in FP16, prima ancora di contare i pesi del modello. Passare a FP8 dimezza questo valore.
Come proteggere un server SGLang esposto sulla rete?+
Impostare --api-key per richiedere l'autenticazione tramite token per tutte le richieste, incluso l'endpoint compatibile con OpenAI; senza questa opzione, il server rimane aperto a chiunque possa raggiungere la porta 30000. Attivare --enable-metrics separatamente per monitorare throughput e latenza tramite Prometheus, senza confondere osservabilità e controllo degli accessi.

Questa guida ti è stata utile?

Un feedback, un errore, una precisazione? Facci sapere, così la guida migliora per tutti.