Inferenčné klastre: vLLM Tensor Parallel, Pipeline Parallel a koľko vás každý z nich v skutočnosti stojí
Model triedy 70B sa nezmestí na jednu GPU pri žiadnej kvantizácii, ktorá ponecháva užitočnú KV vyrovnávaciu pamäť. Model 405B sa nezmestí na jeden uzol. Keď je to pravda, otázka už neznie „ktorú GPU“, ale „ako rozrežem model naprieč GPU, ktoré mám, a koľko ma bude stáť každá rezačka?“.
Tento článok sa zaoberá štyrmi spôsobmi, akými vLLM umožňuje rozdeliť model – tenzorový paralelný, pipeline paralelný, expertný paralelný, dátový paralelný – ako každý z nich ovplyvňuje váš účet za šírku pásma a ako si medzi nimi vybrať v zostave Kentino (5090 pripojená cez PCIe, RTX Pro 6000 Blackwell, L40, L4 – žiadne súčiastky NVLink-fabric SXM). Publikum si prečítalo... I01, vie, čo je vLLM, a teraz potrebuje urobiť konfiguračné rozhodnutia.
Štyri rozmery rezania modelu
Každý framework distribuovanej inferencie – vLLM, SGLang, TensorRT-LLM, Triton – ponúka nejakú kombináciu tých istých štyroch osí. Nie sú to alternatívy; sú to kompozície.
| Os | Čo sa delí | Komunikácia na token | Citlivé na šírku pásma? | Vplyv latencie |
|---|---|---|---|---|
| Tenzorová rovnobežka | Každá vrstva (črepy matmulu) | Úplné zníženie na vrstvu (×2) | Áno – ťažké | Znižuje latenciu |
| Paralelné potrubie | Vrstvy naprieč fázami | Aktivácie na hranicu etapy | Nie – svetlo | Zvyšuje latenciu a priepustnosť |
| Expertná paralelná | Experti ministerstva životného prostredia naprieč grafickými procesormi | Všetky pre každú vrstvu MoE | Áno — prasknuté | Závislý od modelu |
| Paralelné dáta | Celé repliky, nezávislé | Žiadne počas inferencie | Nie | Rovnaká latencia, priepustnosť N× |
Tretí stĺpec predstavuje celú hru. TP kričí cez zbernicu na každej vrstve. PP šepká medzi dvoma fázami. Tento jediný fakt rozhoduje o tom, či necháte TP v jednom políčku, posúvate PP cez uzly a kam skončí čiara.
Tenzorová paralelnosť – ako to vlastne funguje
V TP je každá váhová matica v transformátore (pozornosť QKV, výstup pozornosti, FFN hore, FFN dole) rozdelená na plátky. tensor_parallel_size GPU. Každá GPU ukladá jeden shard z každej vrstvy a vypočítava jeden shard z každej aktivácie. Pretože pozornosť a FFN obsahujú matmuly, ktoré potrebujú Plný aktivácia znovu zostavená pred ďalšou operáciou (softmax, SwiGLU), čiastočné výsledky musia byť zlúčené. vLLM to robí pomocou úplne znížiť na konci pozornosti a ďalší na konci FFN - dva na transformátorový blok.
Llama 3.3 70B má 80 vrstiev, skrytých 8192. Pri dekódovaní dávky 32 sa každý all-reduce pohybuje ~512 KB, ×160 na vygenerovaný token → ~80 MB na token cez zbernicuPredplnenie je dramaticky horšie: 4 000 predplnení v dávke 32 tlačí rádovo 300 GB cez redukčný krúžok jedným priechodom dopredu.
To číslo je dôvod TP miluje NVLinkSXM H100/B200 NVLink má 900 GB/s. PCIe Gen 5 x16 má v najlepšom prípade 64 GB/s jednosmerne, 128 GB/s obojsmerne – zriedkavo sa to stáva na doske so 4 GPU (dráhy sú zvyčajne zdieľané, pozri...) W02). Rozdiel 14×–28× sa prejavuje v benchmarkoch: Škálovateľnosť NVLink dosahuje ~0.92×/karta, PCIe ~0.70–0.78×/karta na modeloch triedy 70B.
Praktický dôsledok: TP sa dobre škáluje na 4 GPU v jednom uzle PCIe Gen 5. Okrem toho, all-zníženie nákladov viac ako paralelizmus ušetrí a mali by ste siahnuť po paralelnom spracovaní pipeline.
Konfigurácia vLLM: tensor_parallel_size
--tensor-parallel-size N povie enginu, aby rozdelil každý váhový tenzor na N GPU v lokálnom uzle. Obmedzenia:
-
Nmusí vydeliť počet hláv pozornosti modelu (Llama 70B má 64 hláv → N ∈ {1, 2, 4, 8, 16, 32, 64}). - vLLM umiestňuje TP poradia na ten istý uzol a predpokladá rýchlu vnútrouzlovú zbernicu.
- Vyrovnávacia pamäť KV je rozdelená pozdĺž dimenzie head – každá GPU ukladá
total_heads / Nhodnota hláv. Vyšší TP poskytuje väčší KV priestor na požiadavku.
Na hardvéri Kentino: TP=4 na boxe s 4× RTX 5090 alebo 4× RTX Pro 6000 Blackwell je ideálna hodnota. TP=8 funguje, ale zbernica PCIe chabe; vo vnútri boxu s 8 grafickými kartami je zvyčajne lepšie TP=4 × PP=2.
Paralelné potrubie – možnosť cez celú miestnosť
PP rozdeľuje model hĺbkou. S pipeline_parallel_size=2, GPU 0 obsahuje vrstvy 0–39 70B Llamy, GPU 1 obsahuje vrstvy 40–79. Požiadavka prechádza cez GPU 0, aktivačný tenzor odošle sa do GPU 1, GPU 1 dokončí priechod dopredu.
Komunikácia je jeden tenzor tvaru (batch, seq_len, hidden_size) na hranicu etapy. Pre dávku 32, sekvenciu 4096, skrytú 8192, FP16, teda ~1 GB na predbežné doplnenie a ~0.5 MB na dekódovací token v dávke 32 — o dva rády menej ako TP úplne redukované. PP beží pohodlne naprieč obyčajný 25 GbE alebo dokonca 10 GbE.
Kompromis je latenciaPri PP=2 každý token preskakuje medzi fázami – naivne 2× čas spracovania na token. vLLM to zmierňuje mikrodávkovaním: fáza 0 začína ďalšiu mikrodávku, zatiaľ čo fáza 1 dokončuje aktuálnu. Pri dostatočnej súbežnosti sa bublina uzavrie; pri jednej požiadavke a bez dávkovania je PP daňou z latencie, ktorá nemá žiadny zisk.
Konfigurácia vLLM: pipeline_parallel_size
--pipeline-parallel-size M rozdelí model podľa vrstiev v rámci M skupín. Celkový počet GPU = tensor_parallel_size × pipeline_parallel_sizePokyny k dokumentom:
- Jeden uzol, ≤ 8 GPU, model zodpovedá: čistý TP,
pipeline_parallel_size=1. - Viaceré uzly: TP v rámci uzla, PP medzi uzlamiDvojuzlový klaster s 8 GPU beží na TP=4, PP=2.
- Počet GPU nedelí počet hráčov čisto: nastavte TP=1, PP=GPU. PP sa nestará o počet hráčov. (Zariadenie s 5 GPU – jeden slot stratený pre sieťovú kartu – dokáže spustiť Llamu iba cez PP=5.)
Expertná paralelná práca – len pre ministerstvo životného prostredia
Modely MoE (príchute DeepSeek-V3, Mixtral, Qwen-MoE) neaktivujú každý parameter na každom tokene. Majú smerované vrstvy FFN, kde sa na token aktivuje iba malá podmnožina „expertov“; husté vrstvy pozornosti zostávajú husté.
Expertný paralelný (EP) experti na shardy naprieč grafickými procesormi pričom sa zachovávajú husté vrstvy pod TP alebo DP. S --enable-expert-parallel, expertné vrstvy prepínajú z replikovaných na rozdelené, jeden alebo niekoľko expertov na GPU. Komunikačný vzorec je všetci ku všetkým na vrstvu MoE: tokeny smerujú k GPU, ktoré vlastní cieľového experta, vypočítajú a vrátia.
EP je náročný na šírku pásma. Vďaka nemu sú veľké modely MoE vôbec spracovateľné na klastroch PCIe – plný TP na modeli s aktívnou kapacitou 671B je beznádejný. Pre nasadenia Kentina je EP relevantný iba pre modely triedy DeepSeek-V3; hustá Llama 70B z toho nemá úžitok. Vstavaný EP vLLM a nedávna zostava sú predvoleným vstupným bodom.
Paralela dát – nudná, brilantná os
DP je najjednoduchšia škálovateľná os a zároveň tá, ktorú väčšina inštalácií nevyužíva dostatočne. Roztočíte sa N identických kópií modelu, každý na vlastnej sade GPU (každá sada môže sama používať TP a/alebo PP). Vyrovnávač záťaže rozdeľuje požiadavky na repliku, ktorá má kapacitu.
Čo DP dáva:
- Lineárne škálovanie priepustnosti (N× požiadavky/s).
- Nulová komunikácia medzi replikami počas inferencie.
- Nezávislé vyrovnávacie pamäte KV na repliku (vyrovnávacia pamäť prefixov je na repliku).
- Izolácia triviálnych porúch.
Koľko DP stojí:
- N× pamäť GPU – každá replika obsahuje celý model.
- Žiadne zníženie latencie. Jedna požiadavka zaberie toľko, koľko je potrebné na jednu repliku.
Ak máte box so 4× RTX Pro 6000 a Llama 70B sa zmestí do TP=4, druhý box so 4× poskytne DP=2 × TP=4 – dvojnásobnú priepustnosť, rovnakú latenciu na požiadavku. Pre úlohy chatu, agenta a RAG je to správna výmena. vLLM --data-parallel-size vlajka (a novšia data_parallel_deployment režim) spúšťa a spravuje repliky. DP je najčistejší spôsob škálovania za hranice jedného boxu.
Kombinovanie osí – základné pravidlo
Výber osi: začnite s najmenšou rovnobežnosťou, ktorá sa hodí, potom pridajte DP pred PP.
Rozpracovaný príklad. Obsluha Llama 3.3 70B (FP8 ≈ váhy 75 GB plus KV) pri vysokej súbežnosti:
- Krabica so 4× RTX Pro 6000 Blackwell (4 × 96 GB = 384 GB) ho pohodlne zvládne pri TP=4, pričom pre KV, prefix cache a CUDA grafy zostáva ~250 GB.
- Pridajte druhý box 4× Pro 6000. DP=2 × TP=4. Dve repliky za routerom. Dvojnásobná priepustnosť, rovnaká latencia.
- Llama 3.1 405B v FP8 (hmotnosti ~400 GB)? Jeden box 4× Pro 6000 sa nezmestí. Dva boxy cez PP=2 × TP=4 áno – a prepojenie medzi uzlami presúva aktivácie, nie all-reduce. 25 GbE stačí; 100 GbE je pohodlné.
KV cache: časť, ktorú všetci podceňujú
KV vyrovnávacia pamäť sú kumulatívne tenzory kľúč/hodnota pozornosti pre každý token výzvy, každý vygenerovaný token, každú súbežnú požiadavku, každú vrstvu. Rastie lineárne s dĺžkou kontextu a súbežnosťou. Llama 70B pri 8 K kontexte potrebuje zhruba 2.5 GB vyrovnávacej pamäte KV na požiadavku v FP16. Pri 32 súbežných požiadavkách je to 80 GB – viac ako celá VRAM 5090.
Ako paralelizmus interaguje s KV:
-
Pod TP, KV je rozdelený podľa attention head v rámci skupiny TP. KV na GPU =
total / tensor_parallel_sizeVyšší TP → väčší priestor pre súbežné požiadavky. - V rámci PPKV zostáva na GPU a obsahuje vrstvu, ktorá ho vytvorila. Každá fáza vlastní svoj vlastný KV.
- Pod DP, KV je úplne nezávislý na replike.
- V kontexte paralelne (novší režim vLLM), KV je rozdelený pozdĺž sekvencie dimenzia – užitočná pre veľmi dlhé kontexty s jednou požiadavkou.
Pri určovaní veľkosti krabice nekontrolujte len to, či závažia prispôsobiť. Spustite matematický výpočet KV v cieľovom okne súbežnosti a kontextu. Najčastejším tichým zlyhaním v produkčnom vLLM je, že engine preempting požiadavky pod tlakom KV.
Smerovanie požiadaviek – čo sa nachádza pred klastrom
Jedna inštancia vLLM si sama zabezpečuje interné dávkovanie (kontinuálne dávkovanie, ukladanie prefixov do vyrovnávacej pamäte, plánovanie). Nesmeruje medzi replikami. To je úloha smerovača.
| router | Awareness | Kedy ju použiť |
|---|---|---|
| Obyčajný NGINX | Žiadne (kruhové spracovanie) | Jednomodelové nasadenia, jednoduchosť víťazí |
| HAProxy | Žiadne + kontrola stavu | Viacmodelový, smerovaný hlavičkou |
| vLLM router (Rust) | KV / predpona / rad | ≥4 repliky, smerovanie s ohľadom na prefixy je dôležité |
| llm-d (Kubernetes) | Všetko vyššie uvedené + EP | Vozové parky K8s, MoE, preddoplnenie/dekódovanie agregácie |
NGINX je správna predvolená hodnota pre inštaláciu s 2 replikami – round robin, zapnuté kontroly stavu. /health, hotovo. Router vLLM (Rust, vydaný koncom roka 2025) je tou správnou voľbou, keď miera zásahov do prefix-cache dominuje nad latenciou chvosta: smeruje na základe konzistentného hashovania prefixu výzvy, takže repliky s podporou vyrovnávacej pamäte stále dostávajú rovnaké konverzácie. Pre pracovnú záťaž agenta s dlhými zdieľanými systémovými výzvami to môže zdvojnásobiť efektívnu priepustnosť oproti round robin.
Matematika šírky pásma
| Pracovná záťaž | Potrebná šírka pásma | Kentino-realistické prepojenie |
|---|---|---|
| TP=4 v rámci jednej skrinky (PCIe Gen 5) | 50–200 GB/s na pár | Vnútrouzlové PCIe |
| PP cez dva uzly, dávka 32, dekódovanie | 0.05–0.2 GB/s | 10 GbE – pohodlné |
| PP cez dva uzly, dávka 32, predplnenie | 1–4 GB/s burst | Pohodlných 25 GbE, okrajovo 10 GbE |
| DP medzi dvoma uzlami | ~0 (iba smerovač) | 1 pokuta za správu GbE |
| EP naprieč 8 GPU v jednom zariadení (MoE) | 20–80 GB/s v pulznom režime | Iba v rámci uzla |
| EP v 2 uzloch (trieda DeepSeek-V3) | 10–40 GB/s trvalo | 100 GbE RoCE alebo InfiniBand |
Úprimné čítanie: TP a EP chcú zostať v škatuľkePP a DP sú jedno. Pri prepojení medzi uzlami 10–25 GbE sú PP a DP v poriadku. V momente, keď chcete TP medzi uzlami, platíte za InfiniBand HDR alebo 200 GbE RoCE – a mali by ste sa najprv opýtať, či vám DP medzi skupinami TP s jedným uzlom prinesie rovnaký výsledok za desatinu rozpočtu. Pre väčšinu nasadení veľkosti Kentino áno.
Dva recepty na konfiguráciu betónu
Recept A — Jeden uzol, 4× RTX 5090, Llama 70B Q4 / FP8
Hardvér: K-AI 256 Turin Dual alebo akýkoľvek box so 4 GPU 5090. PCIe Gen 5, bez NVLink, hostiteľ AMD EPYC.
vllm serve meta-llama/Llama-3.3-70B-Instruct-FP8 \
--tensor-parallel-size 4 \
--pipeline-parallel-size 1 \
--max-model-len 8192 \
--gpu-memory-utilization 0.92 \
--enable-prefix-caching \
--max-num-seqs 64 \
--dtype auto \
--port 8000
Očakávané: približne 30 – 40 tokov/s na požiadavku pri nízkej súbežnosti, súhrnne ~400 – 600 tokov/s pri 32 súbežných požiadavkách (líši sa v závislosti od kombinácie promptov, miery zásahov do prefix-cache, presného množstva – považovať za počiatočnú obálku). PCIe Gen 5 all-reduce je úzkym hrdlom pri dekódovaní; predfill sa škáluje takmer lineárne.
Recept B – Dva uzly, spolu 8× RTX Pro 6000 Blackwell, Llama 405B FP8
Dva K-AI boxy, každý 4× Pro 6000 (96 GB). 100 GbE RoCE prepojenie medzi nimi alebo 25 GbE, ak je rozpočet obmedzený (bude fungovať, mierne pomalšie prednaplnenie).
# Node 0 (head):
vllm serve meta-llama/Llama-3.1-405B-Instruct-FP8 \
--tensor-parallel-size 4 \
--pipeline-parallel-size 2 \
--distributed-executor-backend ray \
--max-model-len 8192 \
--gpu-memory-utilization 0.90 \
--enable-prefix-caching \
--max-num-seqs 32
# Node 1 (worker, joined via Ray):
ray start --address=<head-ip>:6379
TP=4 vo vnútri každého uzla používa PCIe Gen 5 pre redukciu všetkých aktivácií. PP=2 naprieč uzlami zabezpečuje aktivácie cez 25/100 GbE. S Ray ako distribuovaným backendom (predvolená hodnota vLLM pre viacero uzlov) koordinuje hlavný uzel plánovanie a stav KV.
Úprimné hodnotenie výkonu: 405B v FP8 cez 8× Pro 6000 cez PCIe + Ethernet dosahuje približne 6–12 tokov/s na požiadavku – čo je výrazne menej ako pri šasi 8× SXM B200, za zlomok kapitálových výdavkov a bez problémov s dodávkou SXM. Ak je vaša SLA „odpoveď do 30 sekúnd pre vybavenie 500 tokenov“, funguje to. Ak je „odpoveď do 2 sekúnd“, nepoužívajte 405B – použite 70B.
Čo neprevádzkujeme
NVLink, NVSwitch, SXM B200, kompletné dosky HGX: nie sú v ponuke Kentino. Sú tou správnou odpoveďou, ak máte rozpočet a pracovnú záťaž. Nie sú tou správnou odpoveďou pre väčšinu našich zákazníkov, ktorí pracujú s 1 – 4 súbežnými pracovnými postupmi agentov alebo s jednou robotickou platformou, nie s inferenciou SaaS pre 1 000 používateľov. Cesta PCIe je úprimná v tom, čo dokáže a čo nemôže urobiť. TP pod 10 ms na token naprieč 16 GPU je iná téma – nie klaster, o ktorom je tento článok.
Čo urobiť ďalej
Ak zostavujete klaster vLLM, postupujte podľa týchto krokov v tomto poradí:
- Zapíšte si model a SLA. Počet parametrov, kvantizácia, cieľový tok/s na požiadavku, cieľové súbežné požiadavky, cieľové kontextové okno. Bez týchto čísel je výber paralelizmu len odhad.
- Vypočítajte váhy + KV pri cieľovej súbežnosti. Ak samotná KV presiahne voľnú VRAM jednej GPU, potrebujete TP. Ak váhy presiahnu jeden uzol, potrebujete PP.
- Začnite s najmenším TP, ktorý sa hodí. TP=2 pred TP=4 pred TP=8. Každé zvýšenie stráca efektivitu škálovania na PCIe.
- Pred pridaním PP pridajte DP pre priepustnosť. Dva uzly cez DP takmer vždy považujú jeden uzol rozdelený cez PP pri pracovných zaťaženiach citlivých na latenciu.
- Rezervný PP pre prípad, že model nezodpovedá alebo pre preklenutie počtu uzlov, ktoré TP nedokáže čisto rozdeliť.
- Dajte router dopredu, aj s dvoma replikami. Na začiatok stačí round-robin NGINX; ak je dôležitá miera zásahov do prefix-cache, prejdite na vLLM Router.
-
Monitorujte využitie KV, nielen využitie GPU. Klaster s 95 % využitím GPU a 100 % vyťaženosťou blokuje požiadavky. Požadovaný dashboard je
vllm_kv_cache_usage_percv priebehu času.
Následné kroky v tejto časti: klastrové úložisko (K04), plánovanie (K05), spracovanie porúch (K06) a strop PCIe-as-interconnect (K07). Matematika siete je rozbalená v N02 a N06.
Toto je súčasť Kentino Wiki, referenčnej série o umelej inteligencii, robotike a systémoch, ktoré ich spájajú. Komentáre a opravy sú vítané na info@kentino.com.