num_ctx
Context length runtime parametresi
Local inference motorlarında (Ollama, llama.cpp) modelin hafızasında tutacağı maksimum bağlam token sayısını ayarlayan parametre.
context-window modelin teorik kapasitesi (örn. Llama 3.1 8B = 128K).
num_ctx ise runtime'da gerçekten ayırdığın bellek miktarı.
Çoğu motor düşük varsayılanla başlar (Ollama: 2048, llama.cpp: 512!)
çünkü context büyüdükçe VRAM doğrusal artar.
Hesap: KV cache ≈ 2 × num_layers × num_heads × head_dim × 2 (K+V) × num_ctx × bytes. Llama 3.1 8B'de num_ctx başına ~131 KB. 8K context → ~1 GB VRAM. 32K → ~4 GB. 128K → ~16 GB sırf KV cache için — ağırlıklara ek.
Provider farkları:
- Ollama: OLLAMA_CONTEXT_LENGTH=8192 env veya Modelfile'da
PARAMETER num_ctx 8192. Default 2048.
- llama.cpp: -c 8192 flag. Default 512 (sürpriz: çok düşük).
- vLLM: --max-model-len 8192. Düşmesi nadir; tipik 4K-32K.
- OpenAI/Anthropic: yok — API kendisi yönetir.
Bir defterin sayfa sayısını ayarlamak. Modelin "hatırlama kapasitesi" sınırlı — kaç sayfa açacaksan ona göre yer ayırırsın. 2 sayfa açarsan (num_ctx=2048) hızlı ama unutkan. 100 sayfa (128K) açarsan masada çok yer kaplar (VRAM) ama uzun konuşmalarda hatırlar.
Ollama'da Llama 3.1 8B'i sohbet için kullanıyorsun:
``
ollama run llama3.1:8b
> Sana 50K token belge yapıştırıyorum...
> [model belgenin sadece son 2048 token'ını "görüyor"]
``
Sebep: num_ctx default 2048. Belge tamamen göz ardı edildi.
Çözüm: OLLAMA_CONTEXT_LENGTH=32768 ollama serve ile başlat. Veya
Modelfile:
``
FROM llama3.1:8b
PARAMETER num_ctx 32768
``
Şimdi 50K belge → ilk 32K alınır, son 18K kesilir.
VRAM tüketimi: num_ctx=2048 → ~5 GB toplam (8B Q4 + cache). num_ctx=32768 → ~9 GB. 16 GB Mac'te rahat çalışır.
- RAG ya da uzun belge analizi — default 2K kesinlikle yetmez
- Çok turlu sohbet — geçmişi tutmak için 8K+ şart
- Kod düzenleme görevleri — fonksiyon + bağlam için 16K+
- VRAM bütçen müsaitse — 'olur ya' diye 32K-128K aç
- Tek seferlik kısa sorular — 2K-4K yeter, VRAM tasarruf
- VRAM kıt (8 GB Mac) ve büyük model (13B+) — düşük num_ctx + büyük model dengesi
- Modelin desteklemediği değer — Llama 3.1 max 128K, üstüne çıkmak hata verir
Default 2048 sürprizi
Llama 3.1 'destek 128K' der ama Ollama default 2048! Uzun bağlam istiyorsan açıkça ayarla. 'Neden uzun belgeyi anlamadı?' sorusunun %80'inin sebebi bu.
VRAM hesabını yapmamak
num_ctx=128K, 8B Q4 model, 16 GB Mac → patlar. Önce VRAM hesabı: model + (num_layers × heads × head_dim × 4 × num_ctx). Quantization (Q4) cache'i değil sadece weights'i etkiler.
Modelin gerçek tavanını aşmak
'128K destekli' demek 128K token verince anlam kaybetmeden ürettiği anlamına gelmez. Lost-in-the-middle real. 32K'da kal, RAG ile pencere yöneterek daha iyi sonuç al.