Stručné zhrnutie
- Jedna NVIDIA B300 dosiahla pri krátkej záťaži 285 výstupných tokenov/s pre jednu požiadavku a 972 tokenov/s pri súbehu ôsmich požiadaviek. Vyšší súbeh už takmer nezvýšil priepustnosť, iba predĺžil čakanie.
- Prvá odpoveď nad presne 800 000 vstupnými tokenmi začala za 71,4 s. Prirodzená nadväzujúca otázka so znovu použitým prefixom začala za 1,59 s, ale kontrolované behy ukázali rozptyl od 1,62 do 11,15 s.
- V hlavnej záťažovej sade prebehlo 1 788 požiadaviek bez chyby, preempcie alebo nedostatku pamäte. Pre produkciu sme ponechali dávku 8 192 tokenov a kontextový limit 1 048 576 tokenov.
Čísla hodnotia výkon infraštruktúry, nie kvalitu odpovedí modelu.
Čo sme merali
Nasadili sme DeepSeek V4 Flash vo vLLM 0.25.0 na jednu NVIDIA B300 SXM6 s 275 040 MiB pamäte. Model používa zmiešané FP4/FP8 váhy, FP8 KV cache a špekulatívne dekódovanie DSpark so siedmimi návrhovými tokenmi. Klient posielal streamované OpenAI kompatibilné požiadavky priamo na serveri, takže výsledky neobsahujú latenciu verejnej siete ani webového rozhrania.
Kde končí užitočná priepustnosť
Pri krátkej úlohe s 1 024 vstupnými a 256 výstupnými tokenmi sa najlepší pomer priepustnosti a odozvy objavil pri súbehu ôsmich požiadaviek.
| Súbeh | Výstupné tokeny/s | TTFT p50 / p95 | E2E p50 |
|---|---|---|---|
| 1 | 285 | 89 / 90 ms | 863 ms |
| 4 | 698 | 109 / 286 ms | 1 398 ms |
| 8 | 972 | 119 / 494 ms | 1 941 ms |
| 16 | 1 030 | 2 051 / 2 436 ms | 3 769 ms |
Prechod z ôsmich na šestnásť súbežných požiadaviek pridal len 6 % priepustnosti, ale medián času do prvého tokenu narástol zo 119 ms na 2,05 s. Pri otvorenom prichádzaní požiadaviek boli 2 požiadavky/s stabilné, od 3 požiadaviek/s už rástol front. Pri úlohe so 4 096 vstupnými a 2 048 výstupnými tokenmi dosiahlo dekódovanie pri súbehu ôsmich požiadaviek 1 695 tokenov/s.
Právny dokument a nadväzujúce otázky
Typický pracovný postup sme odmerali nad dlhým rozhodnutím a českou otázkou na argumentáciu Ústavného súdu. Pre záťažový test sme dokument opakovali tak, aby formátovaný vstup obsahoval presne 800 000 tokenov. Nasledovala otázka s rovnakým dokumentom a predchádzajúcou odpoveďou.
| Scenár | Vstupné tokeny | Zásah prefixovej cache | TTFT | Celková odozva |
|---|---|---|---|---|
| Prvá otázka | 800 000 | 0 % | 71,40 s | 78,42 s |
| Nadväzujúca otázka s cache | 801 622 | 99,80 % | 1,59 s | 6,15 s |
| Rovnaká otázka bez cache | 801 622 | 0 % | 71,56 s | 79,31 s |
Cache v tomto prirodzenom behu skrátila čas do prvého tokenu o 97,8 %. Výsledok však nie je vhodné chápať ako pevné SLA. V troch izolovaných opakovaniach mala cache takmer zhodný zásah 99,78 %, zatiaľ čo TTFT sa pohybovalo medzi 1,62 a 11,15 s. Čakací front zostal prázdny a rozdiel vznikal priamo vo fáze prefillu vo vLLM.
Čo sme ponechali
Zvýšenie plánovacej dávky z 8 192 na 16 384 tokenov zrýchlilo studený prefill o 2,7 %, ale celý dvojotázkový postup bol o 0,8 % pomalší. Súčasne klesla kapacita KV cache o 31,6 %. Preto sme ponechali dávku 8 192 tokenov a iba zvýšili limit kontextu na natívnych 1 048 576 tokenov.
Model zabral 156,32 GiB a vLLM vyhradilo 81,17 GiB pre KV cache. Pri 800K teste zostalo najmenej 20,72 GiB voľnej pamäte. GPU dosiahlo 100% vyťaženie, príkon 1 006 W z limitu 1 100 W a teplotu 67 °C. Pamäťová rezerva teda existuje, ale studený prefill už na jednej karte nemá praktickú výpočtovú rezervu.
Odporúčania pre produkciu
Nadväzujúce otázky musia smerovať na rovnakú živú cache podľa konverzácie alebo dokumentu. Pri viacerých replikách je preto dôležitá afinitná smerovacia vrstva, prípadne perzistentná či zdieľaná KV cache. Rozptyl latencie cache je potrebné overiť na novších verziách vLLM pred stanovením SLA.
Ak aplikácia nemusí znovu posielať celý dokument, dáva väčší zmysel stavová relácia alebo vyhľadávanie nad uloženým obsahom. Pre skutočné 800K požiadavky musí brána prijať aspoň 4 MiB telo, streamovať odpoveď a mať timeout dlhší než 100 sekúnd.
Pri druhej B300 prepojenej cez NVLink by sme najprv porovnali tenzorové a expertové delenie modelu s dvomi samostatnými replikami so striktnou afinitou relácie. Oddelené prefill a decode uzly dávajú väčší zmysel až pri zmiešanej súbežnej záťaži. Jedna dlhá konverzácia obe fázy používa postupne a medzi GPU by bolo nutné prenášať rozsiahly KV stav.
