Závěrečná praktická kapitola: dostaneš specifikaci modelu a máš rozhodnout, jestli se ti vejde do železa, jak bude rychlý a kolik bude stát. Tohle je práce, kterou AI inženýr dělá pořád, a jde to spočítat na ubrousek, bez zkoušení.
Ukázková specifikace
name: priklad-8b-instruct
architecture: decoder-only transformer
parameters: 8.03B
n_layers: 32
d_model: 4096
n_heads: 32
n_kv_heads: 8 # GQA
head_dim: 128
d_ff: 14336 # SwiGLU
vocab_size: 128256
context_length: 131072
position: RoPE (theta 500000)
norm: RMSNorm (pre-norm)
training_tokens: 15T
Z toho se dá odvodit prakticky všechno.
1. Vejde se mi to do karty?
váhy = parametry × bajty na parametr
FP16: 8,03 × 2 = 16,1 GB
INT8: 8,03 × 1 = 8,0 GB
INT4: 8,03 × 0,5 = 4,0 GB
K tomu KV cache (viz attention do hloubky):
KV = 2 × n_layers × n_kv_heads × head_dim × délka × bajty
= 2 × 32 × 8 × 128 × 8192 × 2 B ≈ 1,07 GB (na jednoho uživatele, 8k kontext)
Kdyby model neměl GQA (32 KV hlav místo 8), byla by cache 4,3 GB, čtyřikrát víc. Proto se
n_kv_heads čte pozorně.
karta 24 GB, model INT4 (4 GB) → zbývá ~19 GB
→ ~17 souběžných konverzací na 8k kontextu
→ nebo 1 konverzace se 130k kontextem
2. Jak rychlý bude?
Generování je omezené propustností paměti, takže:
strop tokenů/s ≈ propustnost paměti / velikost modelu v paměti
karta 1 TB/s, model INT4 4 GB → ~250 tok/s teoreticky
→ reálně 40–60 % → ~100–150 tok/s
A latence celé odpovědi:
čas ≈ prefill(délka promptu) + počet výstupních tokenů / rychlost
Praktický závěr: výstup určuje čas. Zkrácení odpovědi z 800 na 200 tokenů zrychlí odezvu čtyřikrát, zatímco zkrácení promptu skoro nic neudělá.
3. Kolik to bude stát přes API
denní objem = počet dotazů × (vstupní + výstupní tokeny)
10 000 dotazů × (2 000 vstup + 300 výstup)
= 20 M vstupních + 3 M výstupních tokenů denně
→ vynásob sazbami (výstup bývá 3–5× dražší)
→ odečti prompt caching, když máš stabilní prefix
4. Na co se ptát kromě čísel
- Kolik tokenů viděl v tréninku? 15 bilionů u 8B modelu znamená daleko za Chinchilla optimem, tedy „přetrénovaný“ ve smyslu, který ti vyhovuje.
- Znalostní uzávěrka. Určuje, co model ví bez podkladů.
- Kontext: nativní, nebo roztažený? Deklarovaných 131 k je něco jiného než 131 k, na kterých proběhlo dotrénování (poziční kódování).
- Instruct, nebo base? Base model neposlouchá zadání; na aplikaci chceš instrukčně laděnou verzi.
- Podpora nástrojů a strukturovaného výstupu. Jestli umí function calling a JSON schema.
- Licence. Zvlášť u otevřených modelů: komerční použití, limity, povinnost uvádět původ.
- Kvantizované varianty. Existují ověřené 4bit verze, nebo si je musíš vyrobit sám?
Rychlá rozvaha: API, nebo vlastní železo
API se vyplatí: malý a nepravidelný provoz, potřeba špičkové kvality, žádný provozní tým
vlastní železo: citlivá data, velký stálý objem jednoduchých úloh, potřeba stability
a předvídatelné ceny
Zlomový bod si spočítej: cena karty a provozu proti měsíční útratě za API při tvém objemu. Typicky vychází vlastní železo od nižších jednotek milionů tokenů denně, ale záleží na tom, jestli ti stačí menší model.
Cvičení
- Spočítej velikost vah a KV cache pro model: 40 vrstev,
d_model5120, 40 hlav, 8 KV hlav,head_dim128, kontext 16 k, kvantizace INT4, cache ve fp16. - Karta má propustnost 900 GB/s. Jaký je teoretický strop tokenů za sekundu pro model z bodu 1?
- Aplikace dělá 50 000 dotazů denně po 1 200 vstupních a 250 výstupních tokenech. Kolik tokenů měsíčně? Kolik z toho ušetří prompt caching, když je 900 tokenů promptu vždy stejných?
Náčrt řešení: rozbal, až si cvičení zkusíš sám
- KV cache
2,68 GB, váhy zhruba6,2 GB. Cache je přesně2 × 40 × 8 × 128 × 16384 × 2 B = 2 684 354 560 B. U vah je háček: zadání nedává šířku FFN ani velikost slovníku, bez nich přesný počet parametrů nespočítáš. S obvyklými hodnotami pro tuhle třídu (SwiGLU se šířkou 13 824, slovník 128 k) vyjde asi12,3 mldparametrů, v INT4 tedy6,2 GB. To je samo o sobě lekce: v model card hledej rovnou počet parametrů, protože z rozměrů vrstev se dopočítat nedá. - Zhruba 145 tokenů za sekundu.
900 GB/s ÷ 6,2 GB ≈ 145. Je to teoretický strop za předpokladu, že se při každém tokenu přečtou úplně všechny váhy. Reálně se dostaneš níž kvůli režii a cache, a naopak výš při dávkování, protože načtené váhy obslouží víc požadavků naráz. 2,175 mldtokenů měsíčně, z toho1,35 mldcachovatelných. Měsíčně je to50 000 × 30 = 1,5 mil.požadavků, vstup1,5 mil. × 1200 = 1,8 mld, výstup1,5 mil. × 250 = 375 mil.Stálých 900 tokenů z 1 200 dělá1,35 mldtokenů, tedy 75 % vstupu a 62 % veškerého objemu. Prompt caching je proto u aplikací se stabilním systémovým promptem ta úplně první věc, kterou zapneš.
Shrnutí
- Váhy = parametry × bajty; KV cache = 2 × vrstvy × kv_hlavy × head_dim × délka × bajty.
n_kv_headsřídí paměť víc nežn_heads; GQA je důvod, proč se vejdeš.- Rychlost generování ≈ propustnost paměti / velikost modelu; délku odpovědi řeš dřív než prompt.
- Kromě čísel se ptej na tréninkové tokeny, uzávěrku, nativní kontext, instruct verzi a licenci.
Model má 8 B parametrů a chceš ho provozovat ve 4 bitech na kartě s 24 GB. Kolik zbyde na kontext?
Váhy zaberou zhruba 4 GB (8 × 0,5 B), takže zbývá kolem 19–20 GB na KV cache a režii. Při GQA s osmi KV hlavami a 8k kontextu vychází zhruba 1 GB na uživatele, tedy řádově patnáct až dvacet souběžných konverzací, nebo jedna s velmi dlouhým kontextem.
Proč zkrácení odpovědi zrychlí odezvu víc než zkrácení promptu?
Protože prompt se zpracuje paralelně v jednom prefill průchodu, zatímco výstupní tokeny vznikají jeden po druhém a každý vyžaduje načtení celého modelu z paměti. Celkový čas tak určuje hlavně počet vygenerovaných tokenů.
Na co se u modelu ptát kromě počtu parametrů a délky kontextu?
Na množství tréninkových tokenů a znalostní uzávěrku, jestli je deklarovaný kontext nativní nebo jen roztažený, jestli jde o instruct variantu, jaká je podpora nástrojů a strukturovaného výstupu, a jaká je licence pro komerční použití.
