Ce face Tensor parallelism (--tensor-parallel-size, -tp)
Tensor parallelism împarte parametrii modelului în interiorul fiecărui strat, pe mai multe GPU-uri. Documentația îl descrie ca strategia cea mai folosită pe un singur nod: când modelul nu încape pe un GPU sau când vrei mai multă memorie liberă pentru KV cache. Valoarea implicită este 1.
Ghidul Parallelism and Scaling: dacă modelul nu încape pe un GPU dar încape pe un nod, setezi --tensor-parallel-size la numărul de GPU-uri din nod. Pe mai multe noduri, tensor parallel size este numărul de GPU-uri per nod, iar pipeline parallel size numărul de noduri. Dacă numărul de GPU-uri nu împarte uniform modelul sau GPU-urile nu au NVLink (de exemplu L40S), documentația recomandă pipeline parallelism.
Pe un nod, runtime-ul implicit este multiprocessing Python; pe mai multe noduri, Ray (alegerea se schimbă cu --distributed-executor-backend). Cu TP, fiecare proces citește tot modelul de pe disc; un checkpoint pre-împărțit (--load-format sharded_state) reduce timpul de încărcare.
Sintaxă și opțiuni
| Opțiune / Parametru | Descriere |
|---|---|
--tensor-parallel-size, -tp |
Numărul de grupuri tensor parallel. Implicit 1. |
--distributed-executor-backend |
mp, ray, uni sau external_launcher. |
--enable-expert-parallel, -ep |
La modelele MoE, expert parallelism în locul TP pentru straturile de experți, cu același grad. |
--disable-custom-all-reduce |
Folosește NCCL în locul kernel-ului all-reduce propriu. |
CUDA_VISIBLE_DEVICES / --device-ids |
Alegerea GPU-urilor folosite. |
Exemple practice
Exemplul 1: Server pe 4 GPU-uri
vllm serve facebook/opt-13b \
--tensor-parallel-size 4
Exemplul 2: Același lucru în Python
from vllm import LLM
llm = LLM("facebook/opt-13b", tensor_parallel_size=4)
output = llm.generate("San Francisco is a")
Exemplul 3: Forma scurtă
Din ghidul Draft Models.
vllm serve Qwen/Qwen3-4B-Thinking-2507 -tp 1
Greșeli frecvente și bune practici
- Apelezi funcții CUDA (de exemplu
torch.accelerator.set_device_index) înainte de inițializarea vLLM și primeștiRuntimeError: Cannot re-initialize CUDA in forked subprocess. Alege GPU-urile cuCUDA_VISIBLE_DEVICES. - Rulezi TP în Docker fără
--ipc=hostsau--shm-size; PyTorch are nevoie de memorie partajată între procese. - Folosești TP între noduri fără rețea rapidă. Documentația recomandă InfiniBand pentru comunicarea între noduri.