MemoDokümantasyon
TR

Performans

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.

SSE ile Token Akışı

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]

Akış Özellikleri

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.

GPU Katmanı Yapılandırması

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.

RAM Yönetimi

Model Yükleme

GGUF modelleri verimli yükleme için bellek eşlemeli (mmap) olarak açılır:

  • Soğuk başlatma (ilk yükleme): Tam dosya belleğe okunur (5 GB model için ~5–10s)
  • Sıcak başlatma (önbellekli): İşletim sistemi sayfa önbelleği dosyayı sunar (~1–3s)
  • mmap avantajı: Birden fazla model aynı fiziksel sayfaları işletim sistemi arabellek önbelleği üzerinden paylaşabilir

Bağlam Penceresi

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.

Temel Performans Metrikleri

Gecikme

İş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

Çıktı Hızı

İş 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

Optimizasyon İpuçları

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

İzleme

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_tps değ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.