vLLM a PagedAttention: Efektívne servovanie jazykových modelov

vLLM je open-source framework pre vysokovýkonné servovanie LLM modelov, ktorý vďaka technológii PagedAttention dramaticky zvyšuje priepustnosť a znižuje latenciu pri obsluhe tisícok simultánnych požiadaviek.


1. Problém: Prečo je servovanie LLM také náročné?

Spustenie jazykového modelu pre jedného používateľa je relatívne jednoduché — načítate model do GPU pamäte a generujete tokeny. Problém nastáva, keď chcete obsluhovať stovky alebo tisíce používateľov naraz.

Klasické inference frameworky narážajú na niekoľko fundamentálnych obmedzení:

  • KV Cache fragmentácia: Každý token vyžaduje uloženie kľúčov a hodnôt v pamäti (KV Cache). Tradičný prístup alokuje pamäť vopred pre maximálnu dĺžku sekvencie, čo vedie k masívnemu plytvaní.
  • Batch padding: Požiadavky rôznych dĺžok sa musia „vyplniť" na rovnakú dĺžku, čo zbytočne zaťažuje GPU.
  • Nízka využiteľnosť GPU: Výskum ukázal, že klasické servovanie LLM využíva GPU kapacitu len na 20–40 %, zvyšok je plytvanie spôsobené neefektívnou správou pamäte.

Práve tieto problémy riešil tím z UC Berkeley, keď v roku 2023 publikoval vLLM a s ním technológiu PagedAttention — a zmenil štandard celého odvetvia.

2. PagedAttention: Virtuálna pamäť pre KV Cache

Kľúčová inovácia vLLM — PagedAttention — bola inšpirovaná klasickým konceptom virtuálnej pamäte z operačných systémov.

Namiesto toho, aby KV Cache pre každú požiadavku alokoval súvislý blok pamäte (čo vedie k externej fragmentácii), PagedAttention rozdeľuje KV Cache na malé, pevné bloky nazývané pages. Tieto bloky sú alokované dynamicky, presne vtedy, keď ich treba, a môžu byť fyzicky roztrúsené po GPU pamäti.

Ako to funguje v praxi:

  1. Nová požiadavka príde na server
  2. vLLM alokuje len toľko pages, koľko je aktuálne potrebných
  3. Pri každom novom tokene sa prípadne dynamicky pridá ďalší page
  4. Keď požiadavka skončí, pages sa okamžite uvoľnia pre ďalšie požiadavky

Výsledok je pôsobivý: pamäťové plytanie klesne pod 4 % v porovnaní s 60–80 % pri tradičných prístupoch. To priamo znamená, že na rovnakom hardvéri viete obsluhovať výrazne viac používateľov.

PagedAttention okrem toho umožňuje aj zdieľanie pamäti medzi požiadavkami — napríklad keď viacero používateľov posiela rovnaký systémový prompt, jeho KV Cache sa uloží raz a zdieľa medzi všetkými, čo ušetrí ďalšiu pamäť a čas.

3. Continuous Batching a porovnanie s alternatívami

Druhá kľúčová vlastnosť vLLM je continuous batching (priebežné dávkovanie), tiež nazývané iteration-level scheduling.

Klasické statické dávkovanie funguje takto: zozbieraj N požiadaviek, spracuj ich spoločne, vráť výsledky, začni znova. Problém: pomalá požiadavka zdržuje celú dávku. Continuous batching to rieši elegantne — hneď ako jedna požiadavka skončí, jej miesto v dávke okamžite zaujme nová. GPU nikdy nečaká.

Riešenie Využitie GPU Latencia Priepustnosť Vhodné pre
HuggingFace Transformers 20–40 % Vysoká Základná Experimenty, výskum
llama.cpp / Ollama CPU, 40–60 % GPU Stredná Nízka–stredná Lokálne nasadenie, CPU
TensorRT-LLM (NVIDIA) 85–97 % Veľmi nízka Maximálna NVIDIA HW, produkcia
vLLM (PagedAttention + CB) 80–95 % Nízka Až 24× vs. HF Produkcia, multi-tenant

Benchmark z pôvodnej publikácie ukázal, že vLLM dosiahol až 24-násobnú priepustnosť oproti štandardnému HuggingFace servovaniu pri zachovaní rovnakej latentnosť. V praxi to závisí od modelu a hardvéru, ale 4–10-násobné zlepšenie je bežné.

4. Praktické nasadenie: Čo vLLM vie

vLLM je dnes de facto štandard pre produkčné nasadenie open-source LLM. Nasadenie je prekvapivo jednoduché:

pip install vllm
vllm serve meta-llama/Llama-3.1-8B-Instruct --tensor-parallel-size 2

Server okamžite vystaví OpenAI-kompatibilný endpoint na porte 8000 — existujúci kód písaný pre OpenAI API funguje bez zmeny, stačí prepnúť base URL.

Čo vLLM podporuje:

  • Modely: Llama, Mistral, Qwen, DeepSeek, Gemma, Falcon a desiatky ďalších Hugging Face modelov
  • Kvantizáciu: GPTQ, AWQ, FP8 — pre zníženie pamäťových nárokov bez veľkej straty kvality
  • Multi-GPU servovanie: Tensor parallelism a pipeline parallelism pre modely presahujúce kapacitu jednej GPU
  • Streaming: Token-by-token streaming pre chatové aplikácie s okamžitou odozvou
  • LoRA adaptery: Dynamické načítanie fine-tunovaných adapterov za behu bez reštartu servera
  • Špekulatívne dekódovanie: Integrácia pre ďalšie zníženie latentnosti pri menších modeloch

V Kubernetes prostredí vLLM štandardne spolupracuje s nástrojmi ako Prometheus (metriky), Grafana (vizualizácia) a rôznymi load balancermi.

5. Limity, riziká a smer vývoja

vLLM nie je riešenie pre každú situáciu. Pred nasadením je dôležité poznať jeho obmedzenia:

Technické limity:

  • Primárne navrhnutý pre NVIDIA CUDA GPU; podpora AMD ROCm existuje, ale je menej vyladená
  • Inicializácia servera trvá dlhšie ako pri llama.cpp — nie je vhodný pre rýchle jednorazové spustenia
  • Rapid development cycle v komunite znamená, že API sa občas mení; breaking changes nie sú výnimočné
  • Konfigurácia multi-GPU serverovania s pipeline parallelism môže byť komplexná a vyžaduje skúsenosti

Bezpečnostné úvahy:

  • vLLM server vystavený priamo na internet bez autentifikácie predstavuje riziko — produkčné nasadenie vyžaduje reverse proxy s API kľúčmi
  • Dynamické načítanie modelov z Hugging Face Hub prináša supply-chain riziká; v produkci odporúčame lokálne zrkadlenie modelov

Čo prináša vývoj v roku 2026:

Komunita aktívne pracuje na disaggregated prefill/decode — oddelení fázy predspracovania (prefill) a generovania (decode) na rôzne GPU. Táto architektonická zmena ďalej znižuje latenciu pre dlhé kontexty, pretože obe fázy majú veľmi odlišné požiadavky na hardvér. Rastie tiež podpora pre multimodálne modely (text + obraz) a pre prácu s modelmi s kontextovým oknom presahujúcim 1 milión tokenov.


Zhrnutie: vLLM s PagedAttention a continuous batching zásadne zmenil štandard pre produkčné servovanie open-source LLM modelov — kde klasické prístupy plytvali GPU pamäťou a kapacitou, vLLM dosahuje niekoľkonásobne vyššiu priepustnosť, čím sprístupňuje výkonné AI servovanie aj bez závislosti na komerčných cloud API.