
Memo, düşük gecikmeli, yüksek verimli yerel yapay zeka için tasarlanmıştır. Her bileşen tüketici donanımının kısıtlarına — dizüstü bilgisayarlar, masaüstü bilgisayarlar ve iş istasyonları — göre optimize edilmiştir.
Mesajlar Sunucu Tarafı Olaylar (SSE) kullanılarak token-token iletilir ve anında görsel geri bildirim sağlar:
HTTP GET /api/chat/stream
│
├─▶ data: "Merhaba"
├─▶ data: ","
├─▶ data: " dünya"
├─▶ data: "!"
└─▶ data: [DONE]
| Metrik | Yerel (llama.cpp) | Harici Sağlayıcı |
|---|---|---|
| İlk Tokena Kadar Süre (TTFT) | 50–200ms | 300–800ms |
| Saniyedeki Token (TPS) | 20–60 (GPU) / 5–15 (CPU) | 30–100 (API'ye bağlı) |
| Arabellek Boyutu | 1 token | 1 token |
| Bağlantı | Kalıcı SSE | Kalıcı SSE |
Flutter ön yüzü, token başına hassasiyetle Riverpod durum yönetimi kullanır. Toplu gecikme yoktur — her token geldiği anda render edilir.
En etkili performans ayarı GPU katman aktarımıdır:
Model: llama-3.1-8b-instruct (Q4_K_M, 4.9 GB)
n_gpu_layers = 0 → Yalnızca CPU → 8–12 tok/sn
n_gpu_layers = 16 → Kısmi GPU → 18–25 tok/sn
n_gpu_layers = 33 → Tam GPU (8GB) → 35–55 tok/sn
Memo, algılanan VRAM'e göre n_gpu_layers değerini otomatik yapılandırır. Formül:
func optimalLayers(modelSizeGB, vramGB float64) int {
maxLayers := totalLayers(modelSizeGB)
gpuRatio := vramGB / modelSizeGB
if gpuRatio >= 0.9 {
return maxLayers
}
return int(float64(maxLayers) * gpuRatio)
}
Kullanıcılar Ayarlar → Performans üzerinden otomatik yapılandırmayı geçersiz kılabilir.
GGUF modelleri verimli yükleme için bellek eşlemeli (mmap) olarak açılır:
Bağlam penceresi boyutu (--ctx-size) RAM kullanımını doğrudan etkiler:
| Bağlam Boyutu | RAM Yükü |
|---|---|
| 2048 | ~512 MB |
| 4096 | ~1 GB |
| 8192 | ~2 GB |
| 16384 | ~4 GB |
| 32768 | ~8 GB |
Bağlam boyutunu azaltmak, sınırlı donanımda bir modele yer açmanın en etkili yoludur.
| İşlem | p50 | p95 | p99 |
|---|---|---|---|
| Model yükleme (GPU) | 3s | 8s | 15s |
| İlk token (GPU) | 80ms | 200ms | 500ms |
| İlk token (CPU) | 150ms | 400ms | 1s |
| Vektör gömme (tek parça) | 30ms | 80ms | 150ms |
| Vektör arama (10K belge) | 3ms | 8ms | 15ms |
| Ajan araç dağıtımı | 5ms | 20ms | 50ms |
| İş Yükü | GPU (RTX 3060) | CPU (Ryzen 7) |
|---|---|---|
| Sohbet token/sn | 40–55 | 10–15 |
| Gömme/sn (768 boyut) | 50–80 | 20–30 |
| Aktarım (sayfa/sn) | 15–25 | 5–10 |
| Strateji | Etki | Ödün |
|---|---|---|
| GPU katmanlarını artır | 2–4× daha hızlı çıkarım | VRAM baş boşluğu gerektirir |
| Q4_K_M niceleme kullan | Q8_0'a göre %50 daha az RAM | Minimum kalite kaybı |
| Bağlam penceresini azalt | Daha az RAM baskısı | Daha kısa sohbet hafızası |
| Kullanılmayan sağlayıcıları devre dışı bırak | Daha hızlı başlangıç | Kullanmak için yeniden etkinleştirme gerekir |
| Ajan yinelemelerini sınırla | Daha hızlı görev tamamlama | Karmaşık görevler daha fazlasına ihtiyaç duyabilir |
| Basit sorgularda yerel model kullan | Sıfır ağ gecikmesi | Karmaşık muhakeme buluta ihtiyaç duyabilir |
Memo, API ve teşhis panosu aracılığıyla çalışma zamanı performans metriklerini sunar:
GET /api/diagnostics
{
"llama_server": {
"status": "running",
"uptime_seconds": 12345,
"tokens_generated": 458200,
"avg_tps": 42.3,
"vram_used_mb": 5800,
"vram_total_mb": 8192
},
"embedding_server": {
"status": "running",
"uptime_seconds": 12340,
"embeddings_generated": 12400,
"avg_ms_per_embed": 45.2
},
"memory": {
"total_chunks": 8420,
"index_size_mb": 128,
"last_vacuum": "2026-07-04T10:15:00Z"
}
}
avg_tpsdeğerinin beklenen seviyelerin altına düştüğünü görürsen, GPU katmanlarının aktarıldığını (Ayarlar → Performans) ve başka bir GPU yoğun uygulamanın VRAM için rekabet etmediğini kontrol et.