Qwen 3.8 27B: Quantizzazione 4-bit, Parallelismo Tensoriale vLLM e Analisi VRAM/Contesto
Qwen 3.8 27B: Guida al Deployment con vLLM e Parallelismo Tensoriale
Qwen 3.8 27B è un modello transformer denso con 27 miliardi di parametri, 64 layer e una dimensione nascosta di 5120. Utilizza Grouped-Query Attention (GQA) per ridurre la memoria della KV cache, rendendolo adatto a contesti lunghi su configurazioni multi-GPU. In questo articolo spieghiamo come caricare una versione quantizzata a 4 bit del modello usando vLLM con parallelismo tensoriale, calcolare i requisiti di VRAM per pesi e KV cache, e stimare la lunghezza massima del contesto su due RTX 3090 e due RTX 5090.
Caricare Qwen 3.8 27B su vLLM con Parallelismo Tensoriale
vLLM supporta il parallelismo tensoriale (TP) per distribuire il modello su più GPU. Con TP size 2, ogni GPU contiene metà dei pesi del modello e calcola metà delle operazioni per layer, sincronizzando tramite NCCL. Il comando seguente avvia un server compatibile OpenAI con un modello quantizzato a 4 bit (es. AWQ o GPTQ) e TP=2:
python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen3.8-27B --tensor-parallel-size 2 --gpu-memory-utilization 0.90 --kv-cache-dtype fp8
Il flag --gpu-memory-utilization controlla la frazione di VRAM usata per pesi, KV cache e contesto CUDA. Scegli sempre la dimensione TP più piccola che fa stare il modello per minimizzare l'overhead di comunicazione. Se il modello sta su una singola GPU, evita TP e avvia istanze separate per maggiore throughput.
Uso della VRAM: Pesi del Modello e KV Cache
La VRAM è consumata da due componenti principali: pesi del modello e KV cache. Per un modello quantizzato a 4 bit, ogni parametro occupa circa 0.5 byte (più un piccolo overhead per scale e zeri). Il footprint dei pesi è calcolato come segue:
| Componente | Valore |
|---|---|
| Parametri | 27 miliardi |
| Byte per parametro (4-bit) | 0.5 |
| VRAM pesi (grezzo) | 13.5 GB |
| Contesto CUDA e buffer | 1-2 GB |
| Footprint totale pesi | ~15 GB |
La dimensione della KV cache dipende dalla lunghezza del contesto, dalla precisione e dall'architettura del modello. Per Qwen 3.8 27B con GQA, la formula è: 2 * num_layers * num_kv_heads * head_dim * seq_len * bytes_per_element. Con 64 layer, 8 KV head e head_dim 128, possiamo calcolare la KV cache per un contesto di 32k.
| Precisione | Byte/elemento | Dimensione KV cache |
|---|---|---|
| BF16 | 2 | ~6.8 GB |
| FP8 | 1 | ~3.4 GB |
Calcolo del Contesto Massimo su 2x RTX 3090 e 2x RTX 5090
Assumendo una VRAM totale di 48 GB per due RTX 3090 (24 GB ciascuna) e 64 GB per due RTX 5090 (32 GB ciascuna), sottraiamo il footprint dei pesi (~15 GB) e l'overhead CUDA per trovare la VRAM disponibile per la KV cache. Il contesto massimo è stimato dividendo la VRAM disponibile per la dimensione della KV cache per token.
| Hardware | VRAM totale | Pesi | Disponibile per KV | Contesto max (FP8) |
|---|---|---|---|---|
| 2x RTX 3090 | 48 GB | 15 GB | 33 GB | ~300k token |
| 2x RTX 5090 | 64 GB | 15 GB | 49 GB | ~460k token |
Per KV cache in BF16, il contesto massimo sarebbe circa la metà dei valori FP8, cioè ~150k token su 2x 3090 e ~230k token su 2x 5090. Questi numeri assumono batch size 1 e nessun altro overhead di memoria. In pratica, vLLM riserva memoria per CUDA graphs e scheduling, quindi il contesto reale potrebbe essere leggermente inferiore.
FP8 vs BF16 per KV Cache e Tipi di Storage FP8
BF16 offre maggiore precisione ma consuma il doppio della memoria rispetto a FP8. Per l'inferenza, FP8 è la scelta preferita perché raddoppia la capacità della KV cache con una perdita di accuratezza trascurabile. All'interno di FP8, ci sono due formati di storage: E4M3 e E5M2. E4M3 offre un migliore equilibrio tra range e precisione ed è raccomandato per KV cache e pesi. E5M2 ha meno precisione ed è tipicamente usato per i gradienti nell'addestramento. In vLLM, puoi abilitare la KV cache FP8 con --kv-cache-dtype fp8.
| Formato | Bit esponente | Bit mantissa | Uso |
|---|---|---|---|
| E4M3 | 4 | 3 | KV cache e pesi (raccomandato) |
| E5M2 | 5 | 2 | Gradienti in addestramento (evitare per inferenza) |
In conclusione, Qwen 3.8 27B con quantizzazione a 4 bit può essere distribuito efficientemente su sistemi dual-GPU. Usando KV cache FP8 si massimizza la lunghezza del contesto e il throughput. Su 2x RTX 3090, puoi gestire ~300k token di contesto, mentre 2x RTX 5090 offre ~460k token, rendendo entrambe le configurazioni eccellenti per l'elaborazione di documenti lunghi e il serving ad alta concorrenza.
Lavoriamo insieme
Hai bisogno di maggiori informazioni, aiuto con il tuo progetto o di sviluppare un'idea?
Che si tratti di una domanda semplice, un dubbio rapido o una chat di 5 minuti, mandami un messaggio—non costa nulla e sono sempre pronto ad aiutare. Mi piace ascoltare per capire il problema, essere creativo nelle soluzioni e puntare a idee semplici, affidabili e non complicate da realizzare rapidamente.
Contattami →