Ollama
Tek komutla local LLM — başlangıç için ideal
Genel bakış
Ollama, llama.cpp motoru üzerine inşa edilmiş, tek komutla local LLM çalıştırmayı sağlayan bir geliştirici aracı. Modelleri kendi registry'sinden indirir, GGUF formatında saklar, OpenAI uyumlu bir API açar. Kurulumdan ilk konuşmaya 5 dakika.
Tek-stream odaklı: aynı anda 1 kullanıcıyı çok hızlı yanıtlar, ama production tipi 50+ eşzamanlı istek için tasarlanmamıştır. Mac'te Metal, NVIDIA'da CUDA, AMD'de ROCm — donanımı otomatik algılar.
Kurulum
# Homebrew
brew install ollama
# veya .dmg installer:
# https://ollama.com/download/Ollama-darwin.zip
ollama serve &
ollama --versionYapılandırma
İlk model indirip çalıştırmak — Ollama otomatik olarak donanıma uygun quantization'ı seçer (genelde Q4_K_M).
# Model çek (otomatik Q4_K_M)
ollama pull llama3.1:8b
# Veya direkt çalıştır (yoksa otomatik indirir)
ollama run llama3.1:8b
> Merhaba, kendini tanıt
... cevap ...
> /bye
# Yüklü modelleri listele
ollama list
ollama show llama3.1:8b# Model deposunun yeri (varsayılan: ~/.ollama/models)
export OLLAMA_MODELS=/Volumes/External/ollama-models
# Aynı anda yüklü kalacak model sayısı
export OLLAMA_MAX_LOADED_MODELS=2
# Eşzamanlı istek
export OLLAMA_NUM_PARALLEL=4
# Context length (varsayılan 2048!)
export OLLAMA_CONTEXT_LENGTH=8192
# Sunucu adresi (uzak erişim için)
export OLLAMA_HOST=0.0.0.0:11434
# GPU katmanı (otomatik algılar, override için)
export OLLAMA_NUM_GPU=999 # tüm katmanları GPU'ya# Modelfile
FROM llama3.1:8b
PARAMETER temperature 0.3
PARAMETER num_ctx 8192
PARAMETER top_p 0.9
SYSTEM """Sen Türkçe konuşan bir kod asistanısın.
Kısa ve teknik cevap ver."""
# Build & run:
# ollama create mybot -f Modelfile
# ollama run mybotDonanım hızlandırma
Ollama donanımı otomatik algılar; ayar gerektirmez. Apple Silicon'da Metal Performance Shaders üzerinden GPU + Neural Engine kullanır. NVIDIA'da CUDA, AMD'de ROCm. CPU yedeği var ama 7B'den büyük modellerde yavaş.
| Apple Silicon (M1/M2/M3/M4) | Metal (otomatik), unified memory |
| NVIDIA GPU | CUDA 11.4+ (otomatik), tüm RTX serisi |
| AMD GPU | ROCm (Linux), RDNA2/3 ailesi |
| Intel Mac | Sadece CPU — yavaş |
| CPU fallback | ✓ |
| Multi-GPU | Tek node, tensor split desteklenmez |
Model formatları & quantization
Format: GGUF (llama.cpp standardı). Her model birden çok quantization varyantında gelir; kullanıcı seçmezse Ollama Q4_K_M çeker. Resmi registry'de Llama, Mistral, Qwen, DeepSeek, Phi, Gemma, vs. — Hugging Face'den de GGUF çekilebilir.
# Varsayılan (Q4_K_M)
ollama pull llama3.1:8b
# Daha iyi kalite, daha çok RAM
ollama pull llama3.1:8b-instruct-q5_K_M
ollama pull llama3.1:8b-instruct-q8_0
# Daha küçük (3-4 GB), kalite kaybı kabul edilebilir
ollama pull llama3.1:8b-instruct-q3_K_M
# Hugging Face'den GGUF
ollama pull hf.co/bartowski/Qwen2.5-7B-Instruct-GGUF:Q4_K_M| Q2_K | Çok küçük — kaliteyi düşürür, sadece deneme |
| Q3_K_M | Küçük, kabul edilebilir kalite |
| Q4_K_M ★ | Tatlı nokta — varsayılan, dengeli |
| Q5_K_M | Daha kaliteli, %25 daha fazla VRAM |
| Q8_0 | Neredeyse FP16 kalitesi, 2× boyut |
| FP16 | Kayıpsız ama büyük (8B = 16 GB) |
API
İki API: kendi native API'si (port 11434, /api/chat, /api/generate) ve OpenAI uyumlu API (/v1/chat/completions). Mevcut OpenAI client'larıyla base_url değiştirip kullanabilirsin.
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama", # gerekli ama kullanılmıyor
)
resp = client.chat.completions.create(
model="llama3.1:8b",
messages=[{"role": "user", "content": "Selam!"}],
stream=True,
)
for chunk in resp:
print(chunk.choices[0].delta.content or "", end="", flush=True)curl http://localhost:11434/api/chat -d '{
"model": "llama3.1:8b",
"messages": [{"role":"user","content":"Selam"}],
"options": {
"temperature": 0.3,
"num_ctx": 8192,
"num_predict": 256
}
}'Performans
| Tek-stream throughput (M2 Max, Llama-3.1-8B Q4) | ~50 tok/s |
| Tek-stream throughput (RTX 4090, Llama-3.1-8B Q4) | ~110 tok/s |
| İlk-token gecikmesi (TTFT) | 100-300 ms (sıcak model) |
| Eşzamanlı istek | OLLAMA_NUM_PARALLEL ile, ama vLLM'in çok altında |
| Soğuk model yükleme | 5-30 sn (boyut + disk hızına bağlı) |
| RAM/VRAM verimliliği | Orta — KV cache paged değil |
Sık yapılan hatalar
- Varsayılan context 2048OLLAMA_CONTEXT_LENGTH ya da Modelfile'da PARAMETER num_ctx ayarlamazsan, 2048'de takılırsın. Uzun bağlam isteyip cevabın boş gelmesinin sebebi genelde bu.
- Production için tasarlanmamıştırContinuous batching yok, paged attention yok. 10 eşzamanlı kullanıcıda latency hızla yükselir. Production sunucusu için vLLM kullan.
- Auto-quant tahmini bazen yanılırOllama RAM'ine bakıp quantization seçer ama bazen küçük modeli aşırı sıkıştırır. Önemli işlerde Q5_K_M veya Q8_0 elle çek.
- Uzaktan erişim güvensiz defaultOLLAMA_HOST=0.0.0.0 yaparsan port 11434 dünyaya açılır — auth yok. Reverse proxy + auth (Caddy, nginx, Tailscale) zorunlu.