Mistral Modelini Ollama ile Yerel Sunucuda Çalıştırma

Yapay zeka modellerini bulut servisler üzerinden kullanmak hem maliyetli hem de veri gizliliği açısından riskli olabiliyor. Özellikle kurumsal ortamlarda hassas verileri dışarıya göndermek istemiyorsunuz. İşte tam bu noktada Ollama devreye giriyor. Yerel sunucunuzda büyük dil modellerini çalıştırmanın en pratik yolu olan Ollama ile Mistral modelini kurup production ortamına hazır hale getireceğiz. Bu yazıda sıfırdan başlayıp gerçek dünya senaryolarına kadar her şeyi ele alacağız.

Neden Mistral ve Neden Ollama?

Mistral, Fransız yapay zeka şirketi Mistral AI tarafından geliştirilen ve özellikle verimlilik konusunda öne çıkan bir model ailesi. 7B parametreli versiyonu bile pek çok kullanım senaryosunda GPT-3.5 seviyesinde performans gösteriyor. Üstelik Apache 2.0 lisansı ile ticari kullanıma da açık.

Ollama ise bu modelleri yerel olarak çalıştırmayı inanılmaz derecede kolaylaştırıyor. Docker’ı seviyorsanız Ollama’yı da seveceksiniz. Model indirmek, çalıştırmak, API üzerinden sorgu atmak… Hepsi birkaç komutla halloluyor.

Avantajlar:

  • Veri gizliliği tamamen sizin kontrolünüzde
  • API maliyeti yok
  • İnternet bağlantısı olmadan çalışıyor
  • Özelleştirme ve fine-tuning imkanı
  • Rate limiting yok

Sistem Gereksinimleri

Mistral 7B modelini rahat çalıştırmak için minimum gereksinimlere bakalım:

CPU tabanlı çalıştırma için:

  • En az 16 GB RAM (8 GB ile de çalışır ama yavaş kalır)
  • Modern multi-core işlemci (son 5-6 yıl içindeki bir CPU yeterli)
  • 10 GB boş disk alanı

GPU tabanlı çalıştırma için:

  • NVIDIA GPU ile 8 GB VRAM (Mistral 7B için)
  • CUDA 11.8 veya üzeri
  • Aynı disk gereksinimi

GPU kullanımı CPU’ya kıyasla yaklaşık 10-15 kat daha hızlı sonuç veriyor. Production ortamı kuruyorsanız GPU şiddetle tavsiye edilir.

Kurulum Adımları

Linux Üzerine Ollama Kurulumu

Ubuntu 22.04 veya RHEL/Rocky tabanlı sistemlerde kurulum oldukça basit:

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

Scriptin ne yaptığını merak ediyorsanız (ki etmeniz gerekir, internetten script çekip çalıştırmak her zaman dikkat ister) önce indirip inceleyebilirsiniz:

curl -fsSL https://ollama.com/install.sh -o ollama_install.sh
cat ollama_install.sh
# İnceledikten sonra
bash ollama_install.sh

Kurulum tamamlandıktan sonra servisin durumunu kontrol edin:

systemctl status ollama
systemctl enable ollama

Ollama varsayılan olarak 127.0.0.1:11434 portunda çalışıyor. Bunu değiştirmek isterseniz systemd servis dosyasını düzenlemeniz gerekiyor:

sudo systemctl edit ollama

Açılan editörde şunu ekleyin:

[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_MODELS=/data/ollama/models"

İkinci satır önemli, model dosyalarını nereye kaydedeceğini belirliyorsunuz. Varsayılan olarak ~/.ollama/models kullanılıyor ama production’da ayrı bir disk veya mount point kullanmak daha mantıklı.

Mistral Modelini İndirme

Ollama servisini başlattıktan sonra Mistral’ı indirmek tek satır:

ollama pull mistral

Bu komut Mistral 7B modelinin en güncel sürümünü indirecek. Dosya boyutu yaklaşık 4.1 GB, bağlantı hızınıza göre birkaç dakika ile yarım saat arasında sürebilir.

Belirli bir versiyon veya quantization seviyesi istiyorsanız:

# Daha küçük ve hızlı, biraz daha az kaliteli
ollama pull mistral:7b-instruct-q4_0

# Daha kaliteli ama daha fazla VRAM ister
ollama pull mistral:7b-instruct-q8_0

# Instruction-tuned versiyon (chat için ideal)
ollama pull mistral:instruct

Mevcut modelleri listelemek için:

ollama list

İlk Test: Komut Satırından Sorgulama

Model indirildikten sonra hemen test edebilirsiniz:

ollama run mistral "Linux sistemde disk kullanımını gösteren komutu yazar mısın?"

Etkileşimli mod için sadece model adını verin:

ollama run mistral

Bu komut bir REPL açar, >>> promptunu görürsünüz. /bye ile çıkabilirsiniz.

REST API ile Entegrasyon

Ollama’nın asıl gücü REST API’sinden geliyor. Uygulamalarınıza yerel LLM entegrasyonu yapmak için bu API’yi kullanacaksınız.

Temel bir API sorgusu:

curl -X POST http://localhost:11434/api/generate 
  -H "Content-Type: application/json" 
  -d '{
    "model": "mistral",
    "prompt": "Python ile basit bir HTTP server nasıl yazılır?",
    "stream": false
  }'

stream: false parametresi tüm yanıtı tek seferde almanızı sağlıyor. Varsayılan davranış streaming, yani token token yanıt geliyor.

Chat formatında (conversation history ile) kullanmak için:

curl -X POST http://localhost:11434/api/chat 
  -H "Content-Type: application/json" 
  -d '{
    "model": "mistral",
    "messages": [
      {
        "role": "system",
        "content": "Sen bir Linux sistem yöneticisi asistanısın. Türkçe yanıt veriyorsun."
      },
      {
        "role": "user",
        "content": "Nginx log dosyalarında 500 hatalarını nasıl filtrelerim?"
      }
    ],
    "stream": false
  }'

Gerçek Dünya Senaryosu: Sysadmin Asistanı Scripti

Şimdi pratik bir kullanım örneği yapalım. Sunucu loglarını analiz eden basit bir bash scripti:

#!/bin/bash
# log_analyzer.sh - Ollama/Mistral ile log analizi

OLLAMA_URL="http://localhost:11434/api/generate"
LOG_FILE="${1:-/var/log/syslog}"
LINES="${2:-50}"

if [ ! -f "$LOG_FILE" ]; then
    echo "Log dosyası bulunamadı: $LOG_FILE"
    exit 1
fi

echo "Son $LINES satır analiz ediliyor: $LOG_FILE"
echo "---"

LOG_CONTENT=$(tail -n "$LINES" "$LOG_FILE" | head -c 3000)

RESPONSE=$(curl -s -X POST "$OLLAMA_URL" 
  -H "Content-Type: application/json" 
  -d "{
    "model": "mistral",
    "prompt": "Aşağıdaki sistem log çıktısını analiz et. Kritik hataları, uyarıları ve olası sorunları Türkçe özetle:nn$LOG_CONTENT",
    "stream": false
  }")

echo "$RESPONSE" | python3 -c "
import json, sys
data = json.load(sys.stdin)
print(data.get('response', 'Yanıt alınamadı'))
"

Bu scripti şöyle kullanabilirsiniz:

chmod +x log_analyzer.sh
./log_analyzer.sh /var/log/nginx/error.log 100

Modelfile ile Özelleştirilmiş Model Oluşturma

Ollama’nın en güçlü özelliklerinden biri Modelfile sistemi. Mistral’ı kendi kullanım senaryonuza göre özelleştirebilirsiniz.

Bir sysadmin asistanı için örnek Modelfile:

# Modelfile
FROM mistral

# Sistem promptu
SYSTEM """
Sen deneyimli bir Linux ve Windows sistem yöneticisisin. 
Kullanıcıların teknik sorularına pratik ve doğrudan yanıtlar veriyorsun.
Her zaman Türkçe yanıt veriyorsun.
Kod örneklerinde her zaman güvenlik en iyi pratiklerini gözetiyorsun.
Yanıtlarında adım adım açıklamalar yapıyorsun.
"""

# Sıcaklık değeri - daha düşük = daha tutarlı yanıtlar
PARAMETER temperature 0.3

# Context window boyutu
PARAMETER num_ctx 4096

# Maksimum token sayısı
PARAMETER num_predict 2048

Bu Modelfile’dan yeni bir model oluşturmak için:

ollama create sysadmin-assistant -f ./Modelfile
ollama run sysadmin-assistant

Modelfile parametreleri:

  • temperature: 0-1 arasında, düşük değer daha tutarlı/deterministik yanıtlar verir
  • num_ctx: Context penceresi, ne kadar geçmiş konuşmayı hatırlayacağı
  • num_predict: Maksimum üretilecek token sayısı
  • top_p: Nucleus sampling parametresi
  • top_k: Her adımda kaç token değerlendirileceği

Performans Optimizasyonu

GPU Kullanımını Aktif Etme

NVIDIA GPU’nuz varsa ve CUDA kuruluysa Ollama otomatik olarak GPU’yu kullanacaktır. Kontrol etmek için:

ollama run mistral --verbose "Test sorgusu"

Çıktıda gpu_layers değeri 0’dan büyükse GPU kullanılıyor demektir.

GPU’nun tanınmadığı durumlarda CUDA sürümünü kontrol edin:

nvidia-smi
nvcc --version

Eş Zamanlı İstek Yönetimi

Birden fazla uygulamanın aynı anda Ollama’ya istek göndereceği production senaryolarında şu ortam değişkenlerini ayarlayın:

sudo systemctl edit ollama
[Service]
Environment="OLLAMA_MAX_LOADED_MODELS=2"
Environment="OLLAMA_NUM_PARALLEL=4"
Environment="OLLAMA_MAX_QUEUE=100"

Ortam değişkenleri:

  • OLLAMA_MAX_LOADED_MODELS: Aynı anda bellekte tutulacak maksimum model sayısı
  • OLLAMA_NUM_PARALLEL: Eş zamanlı işlenebilecek istek sayısı
  • OLLAMA_MAX_QUEUE: Kuyrukta bekleyebilecek maksimum istek sayısı
  • OLLAMA_KEEP_ALIVE: Model bellekte ne kadar süre tutulacak (örn: “5m”, “1h”)

Nginx ile Reverse Proxy Kurulumu

Ollama’yı dış dünyaya açacaksanız (ki dikkatli olun, authentication ekleyin) Nginx arkasına almak şart:

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

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

    # Basit authentication
    auth_basic "Ollama API";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        proxy_pass http://127.0.0.1:11434;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        
        # Streaming için önemli
        proxy_buffering off;
        proxy_cache off;
        proxy_read_timeout 300s;
        chunked_transfer_encoding on;
    }
}

.htpasswd dosyası oluşturmak için:

sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd apiuser

Monitoring ve Log Yönetimi

Production’da Ollama’yı izlemek için temel metrikler:

# Servis loglarını takip et
journalctl -u ollama -f

# API sağlık kontrolü
curl -s http://localhost:11434/api/tags | python3 -m json.tool

# Yüklü modelleri listele
curl -s http://localhost:11434/api/tags

# Çalışan modelleri gör
curl -s http://localhost:11434/api/ps

Basit bir health check scripti (cron ile çalıştırabilirsiniz):

#!/bin/bash
# ollama_health_check.sh

ENDPOINT="http://localhost:11434/api/tags"
ALERT_EMAIL="[email protected]"

HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$ENDPOINT")

if [ "$HTTP_CODE" != "200" ]; then
    echo "Ollama servisi yanıt vermiyor! HTTP: $HTTP_CODE" | 
    mail -s "ALARM: Ollama Servisi Down" "$ALERT_EMAIL"
    
    # Servisi yeniden başlatmayı dene
    systemctl restart ollama
    sleep 10
    
    HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$ENDPOINT")
    if [ "$HTTP_CODE" == "200" ]; then
        echo "Ollama servisi yeniden başlatıldı." | 
        mail -s "BİLGİ: Ollama Servisi Yeniden Başlatıldı" "$ALERT_EMAIL"
    fi
fi

Güvenlik Notları

Ollama’yı network’e açarken dikkat etmeniz gerekenler:

Firewall kuralları:

  • Varsayılan olarak 11434 portunu sadece iç network’e açın
  • Dış erişim gerekiyorsa mutlaka authentication kullanın
  • Rate limiting eklemek için Nginx limit_req modülünü kullanın

Veri güvenliği:

  • Modeller /root/.ollama veya belirttiğiniz dizinde saklanır, izinleri kontrol edin
  • API üzerinden gönderilen promptlar log’a düşmez ama Nginx access log’larında kalır
  • Hassas ortamlarda Nginx log’larında request body logging’i kapatın

Model güvenliği:

  • Sadece resmi Ollama registry’sinden model indirin
  • Custom Modelfile kullanırken system promptunu dikkatlice yazın, prompt injection’a dikkat edin

Docker ile Alternatif Kurulum

Sunucunuzda Docker tercih ediyorsanız:

docker run -d 
  --gpus=all 
  -v ollama_data:/root/.ollama 
  -p 127.0.0.1:11434:11434 
  --name ollama 
  --restart unless-stopped 
  ollama/ollama

# Model indirmek için
docker exec -it ollama ollama pull mistral

# Logları takip etmek için
docker logs -f ollama

GPU’nuz yoksa --gpus=all parametresini çıkarın.

Sık Karşılaşılan Sorunlar

Model yüklenmiyor, “out of memory” hatası:

  • OLLAMA_MAX_LOADED_MODELS=1 ayarlayın
  • Daha düşük quantization seviyeli model deneyin (q4_0 yerine q2_K gibi)
  • Swap space artırmak anlık yardımcı olabilir ama kalıcı çözüm RAM eklemek

API yanıt vermiyor:

  • systemctl status ollama ile servis durumuna bakın
  • Port çakışması olup olmadığını kontrol edin: ss -tlnp | grep 11434
  • Firewall kurallarını gözden geçirin: iptables -L veya ufw status

GPU kullanılmıyor:

  • nvidia-smi ile GPU’nun tanınıp tanınmadığını kontrol edin
  • CUDA sürümü uyumluluğuna bakın
  • Ollama servisini root yerine normal user ile çalıştırıyorsanız kullanıcının video grubunda olduğundan emin olun: usermod -aG video ollama

Sonuç

Mistral modelini Ollama ile yerel sunucunuzda çalıştırmak artık gerçekten basit bir süreç. Bir zamanlar bu işler için ciddi DevOps altyapısı gerekiyordu, bugün birkaç komutla production’a hazır bir LLM API’si kurabiliyorsunuz.

Özellikle veri gizliliğinin kritik olduğu finans, sağlık veya kamu kurumları için yerel LLM kurulumu artık kaçınılmaz bir gereklilik haline geliyor. Bulut AI servislerine bağımlılığı azaltmak, maliyetleri kontrol altında tutmak ve veriyi kendi sunucularınızda işlemek… Bunların hepsini bu kurulumla elde ediyorsunuz.

Bir sonraki adım olarak Open WebUI entegrasyonuna bakabilirsiniz; Ollama için ChatGPT benzeri bir arayüz sağlıyor ve ekip içi kullanım için oldukça kullanışlı. Ayrıca LangChain veya LlamaIndex ile Mistral’ı RAG (Retrieval Augmented Generation) sistemlerine entegre etmek şirket içi bilgi tabanı oluşturma açısından son derece değerli bir adım olacaktır.

Bir yanıt yazın

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