Kendi Bilgisayarında ChatGPT Alternatifi: Ollama Rehberi

Yapay zeka araçlarını buluta bağımlı kalmadan, kendi donanımında çalıştırmak isteyenlerin sayısı her geçen gün artıyor. Veri gizliliği kaygıları, internet bağlantısı gerektirmemesi veya sadece “kendi sistemimde çalışsın” isteği… Sebep ne olursa olsun, Ollama bu ihtiyacı karşılayan en pratik araçların başında geliyor. Bu yazıda Ollama’yı sıfırdan kuracak, farklı modelleri yönetecek, API üzerinden kullanacak ve production benzeri senaryolarda nasıl işe koşacağımızı inceleyeceğiz.

Ollama Nedir ve Neden Kullanmalıyız?

Ollama, açık kaynaklı büyük dil modellerini (LLM) yerel olarak çalıştırmana yarayan bir araç. Docker’ın konteyner yönetimini basitleştirdiği gibi, Ollama da LLM yönetimini son derece kolay hale getiriyor. Llama 3, Mistral, Phi-3, CodeLlama, Gemma gibi onlarca modeli tek bir komutla indirip çalıştırabiliyorsun.

Bulut tabanlı alternatiflere kıyasla avantajları şunlar:

  • Veri gizliliği: Sorularının ve cevapların hiçbir dış sunucuya gitmiyor
  • Maliyet: API ücreti yok, donanımın varsa sıfır maliyet
  • Offline çalışma: İnternet kesilse de model çalışmaya devam eder
  • Özelleştirme: Modeli kendi ihtiyaçlarına göre fine-tune edebilirsin
  • Hız kontrolü: Rate limit yok, istediğin kadar istek atabilirsin

Dezavantaj olarak ise GPT-4 veya Claude gibi en gelişmiş kapalı kaynak modellerle kıyaslandığında bazı görevlerde çıktı kalitesi düşük kalabilir. Ama 7B-13B parametre aralığındaki modeller günlük sysadmin işleri için gayet yeterli.

Sistem Gereksinimleri

Ollama’yı çalıştırmadan önce donanımını değerlendirmen gerekiyor.

CPU Modu:

  • Minimum 8GB RAM (7B modeller için)
  • 16GB RAM önerilen
  • Yavaş çalışır ama çalışır

GPU Modu (Önerilen):

  • NVIDIA GPU: CUDA 11.3 veya üzeri
  • AMD GPU: ROCm desteği (Linux’ta)
  • Apple Silicon: Metal framework ile mükemmel performans
  • Minimum 4GB VRAM (7B modeller için)
  • 8GB+ VRAM ile çok daha akıcı çalışır

Disk Alanı:

  • 7B model: ~4GB
  • 13B model: ~8GB
  • 70B model: ~40GB

Kurulum

Linux Kurulumu

Linux’ta kurulum tek satır:

curl -fsSL https://ollama.com/install.sh | sh

Kurulum scripti sisteme servis olarak da ekliyor. Kontrol edelim:

sudo systemctl status ollama
sudo systemctl enable ollama

Eğer GPU kullanmak istiyorsan NVIDIA driver’larının kurulu olduğundan emin ol:

nvidia-smi
# Çıktıda CUDA Version görünüyorsa hazırsın

macOS Kurulumu

macOS için resmi siteden .dmg indirebilir ya da Homebrew kullanabilirsin:

brew install ollama
# Servisi başlatmak için:
ollama serve

Windows Kurulumu

Windows’ta resmi siteden .exe installer’ı indirip çalıştırman yeterli. WSL2 üzerinde de çalışıyor ama native kurulum daha stabil.

Docker ile Kurulum

Sunucularda veya izole ortamlarda Docker tercih edilebilir:

# Sadece CPU
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

# NVIDIA GPU ile
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

İlk Model Kurulumu ve Temel Kullanım

Kurulum tamamlandı, şimdi ilk modelimizi indirelim. Llama 3.2 ile başlayalım:

ollama pull llama3.2

İndirme tamamlandıktan sonra direkt sohbete başlayabilirsin:

ollama run llama3.2
>>> Merhaba! Linux'ta disk kullanımını nasıl kontrol ederim?

Tek seferlik sorgu için interaktif moda girmeden de kullanabilirsin:

echo "Explain what is a kernel panic in one paragraph" | ollama run llama3.2

Mevcut modelleri listelemek için:

ollama list

Bir modeli silmek için:

ollama rm llama3.2

Model Yönetimi

Ollama’nın model kütüphanesi oldukça zengin. Farklı senaryolar için öneriler:

  • Genel kullanım: llama3.2, mistral, gemma2
  • Kod yazma: codellama, deepseek-coder, qwen2.5-coder
  • Düşük kaynaklı sistemler: phi3, tinyllama, gemma:2b
  • Türkçe odaklı: llama3.2 (çok dilli destek mevcut)

Model versiyonlarını tag ile belirtebilirsin:

ollama pull llama3.2:1b        # 1 milyar parametre, çok hızlı
ollama pull llama3.2:3b        # 3 milyar parametre, dengeli
ollama pull codellama:13b      # 13 milyar parametre, kod için güçlü
ollama pull mistral:7b-instruct-q4_0  # Belirli quantization seviyesi

Quantization hakkında kısa not: q4_0, q4_K_M, q8_0 gibi suffix’ler modelin sıkıştırma seviyesini gösteriyor. Sayı düştükçe boyut küçülür ama kalite de biraz düşer. Sysadmin işleri için q4_K_M iyi bir denge noktası.

Ollama API Kullanımı

Ollama, 11434 portunda bir REST API sunuyor. Bu sayede kendi scriptlerine, araçlarına veya uygulamalarına kolayca entegre edebilirsin.

Temel API Sorguları

# Model listesi
curl http://localhost:11434/api/tags

# Basit tamamlama isteği
curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt": "List top 5 Linux commands for sysadmins",
  "stream": false
}'

# Sohbet formatında istek
curl http://localhost:11434/api/chat -d '{
  "model": "llama3.2",
  "messages": [
    {"role": "user", "content": "Nginx config dosyasını nasıl test ederim?"}
  ],
  "stream": false
}'

Python ile Entegrasyon

import requests
import json

def ask_ollama(prompt, model="llama3.2"):
    url = "http://localhost:11434/api/generate"
    payload = {
        "model": model,
        "prompt": prompt,
        "stream": False
    }
    
    response = requests.post(url, json=payload)
    result = response.json()
    return result.get("response", "")

# Log analizi örneği
log_sample = """
[ERROR] 2024-01-15 03:22:11 - Connection refused to database host 192.168.1.50:5432
[ERROR] 2024-01-15 03:22:12 - Retry attempt 1 failed
[ERROR] 2024-01-15 03:22:15 - Retry attempt 2 failed
[WARN]  2024-01-15 03:22:18 - Falling back to read-only mode
"""

prompt = f"Analyze this server log and suggest what might be wrong:n{log_sample}"
response = ask_ollama(prompt)
print(response)

Bu scripti cron’a bağlayarak gece üretilen hata loglarını sabah okuduğunda özetlenmiş şekilde görebilirsin.

Özel Model Oluşturma: Modelfile

Ollama’nın en güçlü özelliklerinden biri Modelfile sistemi. Docker’ın Dockerfile’ına benzer şekilde, mevcut bir modeli özelleştirebiliyorsun.

Bir sysadmin asistanı oluşturalım:

# sysadmin-assistant.modelfile dosyası oluştur
cat > sysadmin-assistant.modelfile << 'EOF'
FROM llama3.2

PARAMETER temperature 0.3
PARAMETER top_p 0.9
PARAMETER num_ctx 4096

SYSTEM """
Sen deneyimli bir Linux/Windows sistem yöneticisisin. Görevin:
- Teknik soruları açık ve pratik şekilde yanıtlamak
- Her zaman çalışan komut örnekleri vermek
- Güvenlik açısından riskli komutlar için uyarı eklemek
- Cevaplarını mümkün olduğunca kısa tutmak ama eksiksiz bırakmamak
- Türkçe sorulara Türkçe, İngilizce sorulara İngilizce cevap vermek
"""
EOF

# Modeli oluştur
ollama create sysadmin-ai -f sysadmin-assistant.modelfile

# Test et
ollama run sysadmin-ai
>>> /var/log/auth.log dosyasında başarısız SSH girişimlerini nasıl bulabilirim?

PARAMETER seçenekleri:

  • temperature: Yaratıcılık seviyesi (0-1 arası, düşük = daha deterministik)
  • top_p: Token seçim çeşitliliği
  • num_ctx: Context penceresi boyutu (token sayısı)
  • num_predict: Maksimum üretilecek token sayısı
  • repeat_penalty: Tekrar eden içerik cezası

Gerçek Dünya Senaryosu: Bash Script Asistanı

Günlük işlerde en çok zaman kaybettiren şeylerden biri karmaşık bash scriptleri yazmak. Şunu düşün: bir log rotation scripti lazım, ama her seferinde Google’a bakmak istemiyorsun. Yerel LLM burada devreye giriyor.

#!/bin/bash
# ollama-script-helper.sh

MODEL="codellama:13b"
PROMPT_FILE=$(mktemp)

echo "Bash script ihtiyacını anlat (boş satır ile bitir):"
echo "---"

while IFS= read -r line; do
    [[ -z "$line" ]] && break
    echo "$line" >> "$PROMPT_FILE"
done

PROMPT=$(cat "$PROMPT_FILE")
rm "$PROMPT_FILE"

echo ""
echo "Script oluşturuluyor..."
echo "========================"

curl -s http://localhost:11434/api/generate -d "{
  "model": "$MODEL",
  "prompt": "Write a bash script for: $PROMPT. Add comments and error handling.",
  "stream": false
}" | python3 -c "import sys,json; print(json.load(sys.stdin)['response'])"

Servis Olarak Yapılandırma ve Güvenlik

Eğer Ollama’yı bir sunucuda birden fazla kullanıcıya açmak istiyorsan bazı yapılandırmalar gerekiyor.

Varsayılan olarak Ollama sadece localhost’u dinliyor. Ağa açmak için:

# /etc/systemd/system/ollama.service.d/override.conf
sudo mkdir -p /etc/systemd/system/ollama.service.d/
sudo tee /etc/systemd/system/ollama.service.d/override.conf << 'EOF'
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"
Environment="OLLAMA_MODELS=/opt/ollama/models"
EOF

sudo systemctl daemon-reload
sudo systemctl restart ollama

Ama dikkat: Ollama API’sinde authentication yok. Doğrudan internete açmak büyük risk. Bunun için Nginx reverse proxy ve basic auth kullan:

# /etc/nginx/sites-available/ollama
server {
    listen 443 ssl;
    server_name ollama.sirketiniz.local;

    ssl_certificate /etc/ssl/certs/ollama.crt;
    ssl_certificate_key /etc/ssl/private/ollama.key;

    location / {
        auth_basic "Ollama API";
        auth_basic_user_file /etc/nginx/.htpasswd;
        
        proxy_pass http://127.0.0.1:11434;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        
        # Streaming için gerekli
        proxy_buffering off;
        proxy_read_timeout 300s;
    }
}

Kullanıcı eklemek için:

sudo htpasswd -c /etc/nginx/.htpasswd sysadmin_user

Open WebUI ile Görsel Arayüz

Komut satırı her zaman yetmez. ChatGPT benzeri bir arayüz istiyorsan Open WebUI mükemmel bir seçenek. Docker ile dakikalar içinde kurulur:

docker run -d 
  -p 3000:8080 
  --add-host=host.docker.internal:host-gateway 
  -v open-webui:/app/backend/data 
  --name open-webui 
  --restart always 
  ghcr.io/open-webui/open-webui:main

Tarayıcıda http://localhost:3000 adresine gittiğinde ChatGPT’ye çok benzeyen bir arayüz seni karşılıyor. Ollama’daki tüm modelleri buradan seçip kullanabiliyorsun. Sohbet geçmişi kaydoluyor, dosya yükleyebiliyorsun, hatta birden fazla kullanıcı hesabı oluşturabiliyorsun.

Performans İzleme ve Optimizasyon

Model çalışırken kaynak kullanımını takip etmek önemli:

# GPU kullanımı (NVIDIA)
watch -n 1 nvidia-smi

# CPU ve RAM kullanımı
htop

# Ollama'nın kendi istatistikleri
curl http://localhost:11434/api/ps

Performansı etkileyen faktörler ve öneriler:

  • VRAM yetmiyorsa: Daha küçük model veya daha yüksek quantization kullan (q4 yerine q2 gibi)
  • CPU moddaysa: OLLAMA_NUM_PARALLEL=1 ile paralel istek sayısını sınırla, daha tutarlı olur
  • SSD/NVMe: Model diskten yüklenirken NVMe ciddi fark yaratıyor
  • Swap kullanımı: RAM + VRAM yetmediğinde swap’a taşar, bu ciddi performans düşüşü demek
# Eş zamanlı istek sayısını ayarla
export OLLAMA_NUM_PARALLEL=2

# GPU'dan kaç katman yüklensin (tam fit etmiyorsa)
export OLLAMA_GPU_LAYERS=20

Otomasyon Senaryosu: Günlük Log Raporu

İşte gerçek hayatta kullanabileceğin bir örnek. Sunucundan gelen hataları toplayıp LLM ile analiz ettiren ve e-posta ile rapor gönderen bir script:

#!/bin/bash
# /usr/local/bin/daily-log-report.sh

LOG_FILE="/var/log/syslog"
REPORT_FILE="/tmp/log-report-$(date +%Y%m%d).txt"
YESTERDAY=$(date -d yesterday +%Y-%m-%d)

# Dünün hata loglarını topla
echo "Log Analiz Raporu - $YESTERDAY" > "$REPORT_FILE"
echo "======================================" >> "$REPORT_FILE"

ERROR_LOGS=$(grep "$YESTERDAY" "$LOG_FILE" | grep -i "error|critical|failed" | tail -50)

if [[ -z "$ERROR_LOGS" ]]; then
    echo "Hata bulunamadı. Sistem sağlıklı görünüyor." >> "$REPORT_FILE"
else
    echo "Bulunan Hatalar:" >> "$REPORT_FILE"
    echo "$ERROR_LOGS" >> "$REPORT_FILE"
    echo "" >> "$REPORT_FILE"
    echo "AI Analizi:" >> "$REPORT_FILE"
    
    # Ollama ile analiz
    ANALYSIS=$(curl -s http://localhost:11434/api/generate -d "{
        "model": "llama3.2",
        "prompt": "Analyze these server errors and provide a brief Turkish summary with action items:n$ERROR_LOGS",
        "stream": false
    }" | python3 -c "import sys,json; print(json.load(sys.stdin).get('response','Analiz basarisiz'))")
    
    echo "$ANALYSIS" >> "$REPORT_FILE"
fi

# Raporu e-posta ile gönder
mail -s "Sunucu Log Raporu - $YESTERDAY" [email protected] < "$REPORT_FILE"

echo "Rapor gönderildi: $REPORT_FILE"

Bunu cron’a ekle:

# Her gün sabah 08:00'de çalışsın
0 8 * * * /usr/local/bin/daily-log-report.sh

Sorun Giderme

Sık karşılaşılan sorunlar ve çözümleri:

  • “connection refused” hatası: ollama serve komutunun çalışıp çalışmadığını kontrol et. systemctl status ollama ile servisi doğrula.
  • Model yüklenmiyor, bellek hatası: Daha küçük model dene veya quantization seviyesini düşür. free -h ile RAM durumuna bak.
  • GPU kullanılmıyor: ollama run model --verbose ile hangi katmanların GPU’ya yüklendiğini gör. NVIDIA için nvidia-smi çıktısında CUDA version olmalı.
  • Yavaş yanıt: CPU modundaysan normaldir. GPU olmayan sistemlerde 7B model ile saniyede 3-5 token bekleyebilirsin.
  • Port çakışması: 11434 portu başka bir uygulama tarafından kullanılıyor olabilir. OLLAMA_HOST=0.0.0.0:11435 ile değiştirebilirsin.
# Detaylı debug için
OLLAMA_DEBUG=1 ollama serve

# Hangi modelin hangi kaynakları kullandığını gör
curl http://localhost:11434/api/ps | python3 -m json.tool

Sonuç

Ollama, yerel LLM çalıştırmayı gerçek anlamda erişilebilir kılıyor. Kurulumu kolay, modelleri yönetmesi basit, API’si temiz ve genişletilebilir. Yukarıda anlattıklarımı özetlersek:

  • Günlük sysadmin soruları için llama3.2 veya mistral yeterli
  • Kod yazma ve analizi için codellama veya deepseek-coder daha iyi sonuç veriyor
  • Özel iş senaryoları için Modelfile ile kendi modelini oluştur
  • Ekibe açacaksan mutlaka Nginx + auth ile koru
  • Görsel arayüz için Open WebUI’yi birkaç dakikada kurabilirsin

Veri gizliliğinin kritik olduğu ortamlarda (müşteri verileri, iç belgeler, güvenlik logları) yerel LLM kullanmak artık bir tercih değil, gereklilik haline geliyor. Donanımın varsa Ollama ile başlangıç maliyeti sıfır. Bir haftada hem araçlara alışıyor hem de hangi modelin hangi işe yaradığını öğreniyorsun. Sonrasında bulut tabanlı araçlara ne kadar gerçekten ihtiyaç duyduğunu sorgulamaya başlıyorsun, bu deneyim tek başına değer.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir