Ollama ile Linux’ta Model Yönetimi, Systemd Servisi ve API Entegrasyonu
Bir önceki yazıda incelediğimiz llama.cpp, doğrudan C/C++ seviyesinde azami performans ve kontrol sağlar; ancak onlarca farklı modeli indirip denemek, modeller arasında geçiş yapmak ve arka plan servisi olarak yönetmek söz konusu olduğunda süreç manuel iş gücü gerektirir.
Ollama, arka planda llama.cpp çekirdeğini kullanarak Docker benzeri pratik bir model yönetim arayüzü sunan açık kaynaklı bir araçtır.
Bu rehberde; Ollama’nın Linux üzerine kurulumunu, systemd servisi olarak kararlı bir şekilde yapılandırılmasını, özel Modelfile tanımlamayı ve REST API üzerinden uygulamalarla entegre etmeyi inceliyoruz.
1. Linux Üzerine Ollama Kurulumu
Ollama resmi olarak tek bir kurulum betiği ile tüm bağımlılıkları ve sistem servisini otomatik yapılandırır:
curl -fsSL https://ollama.com/install.sh | sh
Kurulum tamamlandığında Ollama varsayılan olarak bir systemd servisi olarak kaydedilir ve başlatılır.
Durumu kontrol etmek için:
systemctl status ollama
2. Temel Komutlar ve Model İndirme
Ollama kütüphanesinde (Ollama Library) yer alan popüler modelleri tek komutla indirebilir ve terminal üzerinden doğrudan sohbet başlatabilirsiniz:
# Modeli indir ve etkileşimli terminali başlat
ollama run llama3.1
# Sadece modeli arka planda indirmek için (çekmek)
ollama pull qwen2.5:14b
ollama pull mistral:7b
# Sistemdeki mevcut modelleri listele
ollama list
# Kullanılmayan bir modeli diskten sil
ollama rm mistral:7b
3. Systemd Yapılandırması ve Ortam Değişkenleri
Ollama varsayılan olarak yalnızca yerel makineden (127.0.0.1:11434) gelen istekleri kabul eder. Eğer model sunucunuzu yerel ağdaki diğer cihazlara (veya başka bir bilgisayara) açmak istiyorsanız systemd servis ayarlarını güncellemeniz gerekir.
Servis yapılandırmasını güvenle ezmek (override) için:
sudo systemctl edit ollama.service
Açılan editöre aşağıdaki ortam değişkenlerini ekleyin:
[Service]
# Tüm ağ arayüzlerini dinle (0.0.0.0)
Environment="OLLAMA_HOST=0.0.0.0:11434"
# Modeli bellekte tutma süresi (Örn: 30 dakika boşta kalırsa VRAM'den boşalt)
Environment="OLLAMA_KEEP_ALIVE=30m"
# Eşzamanlı istek sayısı (aynı anda yanıtlanacak talep sayısı)
Environment="OLLAMA_NUM_PARALLEL=2"
Kaydedip çıktıktan sonra servisi yeniden başlatın:
sudo systemctl daemon-reload
sudo systemctl restart ollama
4. Özel Model Oluşturmak: Modelfile Mantığı
Docker’daki Dockerfile mantığına benzeyen Modelfile, temel bir modele özel sistem istemi (System Prompt), sıcaklık (temperature) ve bağlam penceresi atayarak yeni bir model türetmenizi sağlar.
Örneğin, sadece C++ ve Linux konularında yanıt veren bir uzman asistan tanımlayalım:
# Modelfile adında bir dosya oluşturun
FROM llama3.1:8b
# Yaratıcılık katsayısı (Daha deterministik yanıtlar için düşük sıcaklık)
PARAMETER temperature 0.2
PARAMETER top_p 0.9
PARAMETER num_ctx 8192
# Sistem Rolü ve Talimatlar
SYSTEM """
Sen Linux sistem programlama ve Modern C++ (C++17/C++20) alanında uzmanlaşmış kıdemli bir yazılım mühendisisin.
Sorulara doğrudan, temiz, RAII prensiplerine uygun kod blokları ve kısa teknik açıklamalarla yanıt ver.
Gereksiz nezaket cümleleri ve genel geçer tavsiyelerden kaçın.
"""
Bu dosyadan yeni modelimizi derleyelim:
ollama create cpp-uzmani -f ./Modelfile
Artık ollama run cpp-uzmani komutuyla doğrudan bu özelleştirilmiş modele bağlanabilirsiniz.
5. REST API Üzerinden İstek Atmak
Ollama arka planda hafif bir HTTP REST API sunar. Kendi C++, Python veya kabuk betiklerinizden modele istek göndermek oldukça pratiktir:
cURL ile Akışsız (Non-streaming) İstek
curl http://localhost:11434/api/generate -d '{
"model": "cpp-uzmani",
"prompt": "Linux altında bir soketin non-blocking modda açılması için hangi fcntl bayrağı kullanılır?",
"stream": false
}'
Dönen JSON yanıtı:
{
"model": "cpp-uzmani",
"response": "Linux'ta bir soketi non-blocking moda almak için fcntl fonksiyonu ile O_NONBLOCK bayrağı atanır:\n\nint flags = fcntl(sockfd, F_GETFL, 0);\nfcntl(sockfd, F_SETFL, flags | O_NONBLOCK);",
"done": true,
"total_duration": 482910234
}
6. Özet
Ollama; model sürümleme, indirme ve API sunumu süreçlerini olağanüstü derecede basitleştirerek yerel yapay zeka deneyimini geliştiriciler için günlük bir araca dönüştürdü. Ancak terminal ve ham API yerine, kullanıcı dostu bir web arayüzü ve yerel belgelerimizi sorgulama (RAG) yeteneği eklemek istediğimizde bir sonraki adımda Open WebUI kurulumuna geçeceğiz.