n_gpu_layers
GPU katman offload sayısı
Modelin kaç katmanının GPU'ya, kaçının CPU'da kalacağını belirleyen llama.cpp parametresi. VRAM yetmezse hayat kurtarır.
llama.cpp (ve onu kullanan Ollama, LM Studio) modelin layer'larını
parça parça GPU'ya yükleyebilir. -ngl N (Number of GPU Layers)
parametresi: ilk N layer GPU'ya, kalanı CPU + RAM'de kalır.
Pratik:
- -ngl 0: tamamı CPU'da. Çok yavaş ama hiç VRAM yemez.
- -ngl 20 (örn.): 33 layer'lı 8B modelin ilk 20'si GPU'da. Hibrit.
- -ngl 99 veya -ngl -1: tüm layer'lar GPU'da (en hızlı).
Hız etkisi lineer değil. Tüm layer'lar GPU'da olduğunda full hız; bir layer bile CPU'ya kayarsa her token o layer için CPU↔GPU transferi yapar — kritik darboğaz. Genel kural: ya hepsi ya hiçbiri ideal, hibrit kabul edilebilir performans için.
Hesap: layer başına VRAM ≈ model boyutu / num_layers. Llama 3.1 8B
(Q4): ~5 GB / 33 layer ≈ 152 MB/layer. 4 GB VRAM'in varsa ~26 layer
sığar (-ngl 26); kalan 7 layer CPU'da. Tahmini hız: full GPU'nun
~%30-50'si.
Bir restoran mutfağı. Tüm aşçılar mutfakta (GPU'da) → maksimum hız. Bir aşçı yan binada (CPU'da) → her tabak yan binadan onun adımı için geçmek zorunda → süreç tıkanır. n_gpu_layers "kaç aşçı mutfakta"yı ayarlar. Tam dolu ya da boş — arada kalanı yavaş ama mümkün.
16 GB VRAM'lik RTX 4080'in var. Llama 3.1 70B Q4 çalıştırmak istiyorsun (gerçek boyut ~40 GB, sığmıyor).
-ngl 20: ilk 20/80 layer GPU'da (~10 GB), kalan 60 CPU'da. Hız:
~3 tok/s. Yavaş ama 70B çalışıyor.
-ngl 0: tamamı CPU'da. Hız: ~0.8 tok/s. RAM'in 64 GB'sa çalışır.
Daha küçük modele geçersen: 8B Q4 (~5 GB), -ngl 99 ile tüm GPU →
hız ~140 tok/s. Aynı donanım, 47× hız farkı.
Ollama çoğu zaman -ngl 99'u otomatik dener; OLLAMA_NUM_GPU ile
override edebilirsin. LM Studio GUI'sında "GPU Offload" slider'ı bu.
- VRAM yetmiyor ama modelden vazgeçemiyorsan — hibrit offload
- Aynı GPU'da birkaç model çalıştırmak — her birine bütçe
- Quantization yetmedi, hâlâ bir miktar offload gerekli
- CPU + GPU karışık donanım optimize etmek
- Tüm model GPU'ya sığıyorsa —
-ngl 99koy, düşünme - Production high-throughput — hibrit her zaman düşük throughput verir
- Çok küçük model (1-3B) — overhead'e değmez
ngl ayarlamayı unutmak
GPU varsa ama -ngl 0 ile çalışıyorsa kesinlikle CPU'da. 'Neden M2 Max'imde 5 tok/s?' sorusunun cevabı genelde bu. Default değişken — explicit set et.
Cache offload edilmez
n_gpu_layers ağırlıkları offload eder, KV cache'i değil. 32K context'te cache zaten 4 GB. Hesaba kat: GPU'ya sığması gereken: ngl × layer_size + cache.
Hibrit performans yanılgısı
'%50 GPU offload yapsam %50 hız' değil — daha kötü. CPU↔GPU transfer her token gecikme. Benchmark yap, 'kaç ngl ile şu kadar tok/s' bul.