Batch Size
Eşzamanlı işlenen sekans sayısı
Aynı anda paralel işlenen istek sayısı. Throughput'u dramatik artırır ama VRAM ve latency'yi de etkiler.
GPU paralel matris işlemcidir; tek bir istek için kullanmak çoğunlukla GPU'yu boşa harcar. Batch size N: aynı forward pass'te N farklı sekansı birlikte işle. GPU bir matris çarpımı yerine N matrisi tek seferde yapar — toplam throughput dramatik artar.
Eğitim vs. inference farkı: - Training batch size: bir gradient adımında kaç örnek. 32-512 tipik. Büyük = daha pürüzsüz gradient ama daha çok VRAM. - Inference batch size: aynı anda kaç istek. Production'da throughput maksimizasyonu için kritik. vLLM 256 default.
İki tür inference batching: - Statik batching: bir grup isteği bekle, hepsini birlikte başlat, hepsi bitene kadar GPU dolu — yavaş istek hızlıları yavaşlatır. - Continuous batching: vLLM ve modern motorların yenilik. Bir istek bittiğinde hemen yenisi gelir; GPU sürekli dolu, latency düşük. Throughput 5-10× artar.
KV cache batch boyunca paralel — N istek = N × cache. Production'da
max_num_seqs ile tavanlanır (vLLM).
Bir fırıncı tek tek ekmek pişirmek yerine fırına 20 ekmek koyar. Toplam zaman aynı (bir ekmek → 20 ekmek değil), ama 20× daha çok ekmek çıkar. GPU da öyle: tek bir matris çarpımı için 20 sekansı paralel işleyebilir.
vLLM ile Llama 3.1 8B sunucusu.
Batch=1 (tek kullanıcı): ~95 tok/s. Batch=8: GPU dolu olmaya başlar, ~620 tok/s toplam (kullanıcı başı ~78). %95 throughput artışı. Batch=32: ~2400 tok/s toplam (kullanıcı başı ~75). 25× tek-stream. Batch=64: VRAM dolar, OOM ya da swap. Tipik tavan 32-64.
Continuous batching ile her tamamlanan istek hemen yerine geleni alır — boş slot olmaz. Statik batching aynı 32 isteği bekleyip birlikte başlatırdı ve uzun istek hızlıları geciktirirdi (head-of-line blocking). Continuous bunu çözer.
- Production sunucu — yüksek throughput şart
- Batch offline inference — 1000 prompt'u toplu işle
- Multi-user serving — vLLM, TGI, SGLang
- Embedding üretimi — çok metni tek seferde embed et
- Tek-kullanıcı yerel deneme (Ollama default tek-stream — hız zaten yeterli)
- Latency'ye duyarlı tek istek — batching beklemenin gecikmesi var
- VRAM kıt — batch artırınca OOM
Statik batching seçmek
Eski sistemlerde (HF Transformers naive serve) statik batching = en yavaş istek hepsini geciktirir. Modern motor (vLLM, TGI) continuous batching kullan.
Batch size = throughput limiti yanılgısı
Batch=128 koymak, kullanıcılar 8 ise faydasız. Etkin batch = aktif kullanıcı sayısı. Kapasite planlamada gerçek concurrency'e bak.
VRAM hesabı yapmamak
Batch×(model + cache_per_seq) = toplam VRAM. Cache batch ile lineer büyür. 32 sekans × 4 GB cache = 128 GB. PagedAttention bunu ~%75'e indirir.