MemoDokümantasyon
TR

Llama.cpp Entegrasyonu

Memo, yerel çıkarım motoru olarak llama.cpp'yi paketler. Go arka ucu tarafından otomatik yaşam döngüsü yönetimi, GPU aktarımı ve port koordinasyonu ile bir alt süreç olarak yönetilir.

Alt Süreç Yaşam Döngüsü

Go arka ucu, llama.cpp'yi tam yaşam döngüsü kontrolüyle bir alt süreç olarak yönetir:

Go Arka Uç (ana süreç)
  │
  ├─▶ llama.cpp Sunucu    (port 8081) — Sohbet çıkarımı
  ├─▶ llama.cpp Gömme     (port 8082) — Vektör gömüleri
  └─▶ Sağlık denetleyici   (goroutine) — Periyodik ping + yeniden başlatma

Yaşam Döngüsü Durumları

  [DURDU] ──start()──▶ [BAŞLIYOR] ──health_ok──▶ [ÇALIŞIYOR]
                           │                          │
                           └──timeout──▶ [ÖLÜ]        │ çökme
                                        restart()     │
                                        döngüsü ──────┘
  • BAŞLIYOR: Süreç oluşturuldu, HTTP sağlık uç noktasının yanıt vermesi bekleniyor
  • ÇALIŞIYOR: Sağlık kontrolü başarılı, çıkarım istekleri kabul ediliyor
  • ÖLÜ: Süreç çöktü veya yanıt vermiyor. Üstel geri çekilme ile otomatik yeniden başlatma (1s → 2s → 4s → maks 30s)

GPU Aktarımı

llama.cpp, algılanan donanıma göre yapılandırılmış GPU katman aktarımıyla başlatılır:

Platform Arka Uç Bayrak Algılama
NVIDIA CUDA --n-gpu-layers N nvidia-smi + CUDA kütüphanesi
AMD ROCm --n-gpu-layers N rocm-smi + ROCm kütüphanesi
Apple Silicon Metal --n-gpu-layers N MPS cihaz kontrolü
Yalnızca CPU --n-gpu-layers 0 Geri dönüş

Aktarılan katman sayısı, mevcut VRAM ve model boyutuna göre otomatik olarak hesaplanır. Kullanıcılar Ayarlar'dan geçersiz kılabilir.

# Örnek: NVIDIA 8GB VRAM, llama-3.1-8b Q4_K_M
llama-server \
  --model models/llama-3.1-8b-instruct-q4_k_m.gguf \
  --n-gpu-layers 33 \
  --host 127.0.0.1 \
  --port 8081 \
  --ctx-size 8192

Otomatik Kurulum

llama.cpp ikili dosyaları uygulama paketiyle birlikte gelir. İlk başlatmada:

  1. Go arka ucu platformu algılar (Windows/Linux/macOS)
  2. Uygun önceden derlenmiş llama-server ve llama-embedding ikili dosyalarını çıkarır
  3. Sürüm kontrolü ile ikili dosyayı doğrular (--version)
  4. GPU kapasitesi için sistem teşhislerini çalıştırır
  5. Her iki sunucuyu platforma optimize edilmiş bayraklarla başlatır

Manuel derleme veya bağımlılık kurulumu gerekmez.

Sağlık Kontrolleri

Bir sağlık goroutine'i, llama.cpp HTTP uç noktalarını her 5 saniyede bir yoklar:

GET /health → 200 OK  → ÇALIŞIYOR
GET /health → zaman aşımı → ÖLÜ olarak işaretle → yeniden başlat
GET /health → 500     → uyarıyı logla → 15sn sonra tekrar dene
func (e *LlamaEngine) healthLoop() {
    ticker := time.NewTicker(5 * time.Second)
    for range ticker.C {
        if !e.isHealthy() {
            e.restart()
        }
    }
}

Port Yönetimi

Memo, çakışmaları önlemek için sabit port tahsisi kullanır:

Servis Varsayılan Port Yapılandırma Anahtarı
Sohbet Çıkarımı 8081 llama.chat_port
Gömme Sunucusu 8082 llama.embed_port
API Sunucusu 8090 server.port

Portlar başlangıçta kontrol edilir. Bir port doluysa Memo bir sonraki müsait portu dener ve uyarıyı loglar.

Özel Gömme Sunucusu

Gömme sunucusu, kendi modeline sahip ayrı bir llama.cpp örneği olarak çalışır (varsayılan: nomic-embed-text-v1.5):

  • Yalıtım: Gömme istekleri sohbet çıkarımını asla engellemez
  • Optimizasyon: Gömme sunucusu daha küçük bağlam penceresi kullanır, GPU aktarımı gerekmez
  • Eşzamanlılık: Her iki sunucu aynı anda istek işleyebilir
llama-embedding \
  --model models/nomic-embed-text-v1.5.gguf \
  --host 127.0.0.1 \
  --port 8082 \
  --embd-normalize 2 \
  --ctx-size 2048

Geri Dönüş Davranışı

llama.cpp başlatılamazsa veya geri döndürülemez şekilde çökerse:

  • Harici sağlayıcılar geri dönüş çıkarım yolu olur
  • Hafıza araması önbelleğe alınmış gömülerle devam eder (salt okunur)
  • Arayüzde hata ayrıntılarıyla bir bildirim gösterilir
  • Ayarlar → Teşhisler üzerinden manuel yeniden başlatma yapılabilir


Mevcut RAM'den daha büyük llama.cpp modellerini çalıştırmak, takas (swap) yoğunluğu nedeniyle ciddi performans düşüşüne neden olur. İndirmeden önce her zaman donanım uyumluluk rozetini kontrol et.