
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.
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
[DURDU] ──start()──▶ [BAŞLIYOR] ──health_ok──▶ [ÇALIŞIYOR]
│ │
└──timeout──▶ [ÖLÜ] │ çökme
restart() │
döngüsü ──────┘
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
llama.cpp ikili dosyaları uygulama paketiyle birlikte gelir. İlk başlatmada:
llama-server ve llama-embedding ikili dosyalarını çıkarır--version)Manuel derleme veya bağımlılık kurulumu gerekmez.
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()
}
}
}
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.
Gömme sunucusu, kendi modeline sahip ayrı bir llama.cpp örneği olarak çalışır (varsayılan: nomic-embed-text-v1.5):
llama-embedding \
--model models/nomic-embed-text-v1.5.gguf \
--host 127.0.0.1 \
--port 8082 \
--embd-normalize 2 \
--ctx-size 2048
llama.cpp başlatılamazsa veya geri döndürülemez şekilde çökerse:
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.