KurulumModel Hazırlama10 dk

llama.cpp Optimizasyonu: CPU ve GPU Ayarları

llama.cpp'yi donanımınızun son hızında çalıştırmanın yöntemleri: CUDA, Metal ve Vulkan derleme seçenekleri, GPU katman aktarımı (-ngl), thread ayarları, KV cache yönetimi ve llama-bench ile ölçümleme.

Kısa cevap

llama.cpp, GGUF modelleri neredeyse her donanımda çalıştıran açık kaynak çıkarım motorudur ve performansı doğrudan derleme seçenekleriyle çalışma zamanı ayarlarına bağlıdır. Doğru yol, donanıma uygun arka uçla (CUDA, Metal veya Vulkan) derlemek, -ngl ile mümkün olan tüm katmanları GPU'ya aktarmak ve thread sayısını fiziksel çekirdek sayısına göre ayarlamaktır. Ölçümleme için llama-bench aracı kullanılır.

llama.cpp, GGUF modellerini x86 işlemcilerden Apple Silicon’a, oyun kartlarından sunucu GPU’larına kadar geniş bir donanım yelpazesinde çalıştıran açık kaynak çıkarım motorudur. Araç, doğru derlenip doğru ayarlandığında benzer boyuttaki çözümler arasında en yüksek verimi sağlayabilir; ancak varsayılan ayarlar her sistem için ideal değildir. Bu rehber, derleme seçeneklerinden çalışma zamanı ayarlarına ve ölçümlemeye kadar optimizasyon sürecini ele alır.

Optimizasyonun Üç Katmanı

llama.cpp performansı üç katmanda belirlenir. Birinci katman derleme seçenekleridir: hangi arka uca (CUDA, Metal, Vulkan, CPU) göre derlendiği, kullanılabilir talimat setleri ve hızlandırma kütüphaneleri. İkinci katman çalışma zamanı ayarlarıdır: GPU katman aktarımı, thread sayısı, bağlam boyutu ve önbellek türleri. Üçüncü katman model seçimidir: kuantalama seviyesi ve parametre boyutu, donanımla uyumlu seçilmediğinde diğer tüm optimizasyonlar anlamsızlaşır. Optimizasyon işi, bu üç katmanın birlikte ayarlanmasıdır.

Ön Koşullar

Derleme için bir C++ derleyicisi ve CMake gerekir; Windows’ta Visual Studio Build Tools, Linux’ta gcc ve cmake, macOS’ta Xcode komut satırı araçları yeterlidir. GPU arka uçları için ek bileşenler gerekir: CUDA için NVIDIA CUDA Toolkit ve güncel sürücü, Vulkan için Vulkan SDK, AMD kartlarda ROCm. Depo klonlanarak başlanır:

git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp

Derleme Seçenekleri

CUDA (NVIDIA)

  1. CUDA Toolkit kurulur ve sürücü güncel olduğu doğrulanır.
  2. Depo CUDA desteğiyle derlenir.
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j

CUDA arka ucu, NVIDIA kartlarda en yüksek verimi veren seçenektir; kurulumda kartın hesaplama yeteneği otomatik algılanır.

Metal (Apple Silicon)

macOS’ta Metal arka ucu varsayılan olarak etkindir ve standart derleme yeterlidir:

cmake -B build
cmake --build build --config Release -j

Apple Silicon’da birleşik bellek mimarisi, modelin RAM sınırı içinde GPU’dan tam hızda kullanılmasını sağlar; ayrıca GPU’ya aktarılacak katman sayısı gibi ayarların çoğu otomatik yönetilir.

Vulkan (AMD, Intel ve geniş uyumluluk)

  1. Vulkan SDK kurulur.
  2. Vulkan desteğiyle derleme yapılır.
cmake -B build -DGGML_VULKAN=ON
cmake --build build --config Release -j

Vulkan, CUDA veya ROCm’ın bulunmadığı GPU’larda pratik bir seçenektir; geniş donanım uyumluluğu sunar ancak bazı kartlarda üreticiye özel arka uçlardan biraz düşük verim sağlar. AMD kartlarda ROCm varsa öncelikli seçenek odur.

Çalışma Zamanı Ayarları

GPU Katman Aktarımı

En etkili tek ayar, modelin kaç katmanının GPU’ya yükleneceğini belirleyen -ngl parametresidir. Değer olarak mümkün olan en yüksek sayı verilir; gerekenden büyük değer sorun yaratmaz, araç kalan katmanları CPU’da bırakır:

./llama-server -m model-Q4_K_M.gguf -ngl 99

Modelin tamamı VRAM’a sığıyorsa tüm katmanlar GPU’ya çıkar ve en yüksek hız alınır. Sığmıyorsa bir kısmı CPU’da çalışır ve karma modda hız, VRAM dışına taşan oranla düşer.

Thread Ayarı

CPU tarafında —threads parametresi, hesaplama iş parçacığı sayısını belirler. En iyi başlangıç değeri fiziksel çekirdek sayısıdır; SMT nedeniyle görünen mantıksal çekirdek sayısının kullanılması çekişme yaratır:

./llama-server -m model-Q4_K_M.gguf -t 8

Üretim sırasında batch işleme thread’leri ayrı bir parametreyle ayarlanır ve eşzamanlı istek yoğunluğuna göre düzenlenir.

Bağlam ve KV Cache

Bağlam penceresi, bellek tüketiminin en değişken bileşenidir; -c parametresiyle ayarlanır ve gereksiz büyük değerler hem VRAM hem hız maliyeti yaratır. KV cache’in nicelenmesi, bellek baskısı altındaki sistemlerde önemli kazanç sağlar: cache anahtarı -fa ile flash attention etkinleştirilerek ve cache kuantalama seçenekleriyle belirtilebilir; bu ayarlar bağlam belleğini belirgin biçimde küçültür ancak kalitede hafif düşüş riski taşır ve test edilerek kullanılmalıdır.

Ölçümleme

Optimizasyon ancak ölçümle anlamlıdır. llama-bench aracı, belirli model üzerinde prompt işleme ve üretim hızını standart koşullarda raporlar:

./llama-bench -m model-Q4_K_M.gguf -ngl 99 -t 8

Farklı konfigürasyonlar sırayla ölçülerek karşılaştırma tablosu oluşturulur: derleme varyantları, thread sayıları ve bağlam boyutları bu tabloyla seçilir. Ölçüm yapılırken arka planda başka işlemlerin çalışmadığından emin olunmalıdır; aksi hâlde sonuçlar yanıltıcı olur. Üretim hızı (tokens/s) uçtan uca algılanan gecikmeyi değil saf üretim hızını gösterir; gerçek kullanım deneyimi için bağlam işleme süresi de hesaba katılır.

CPU Odaklı Sistemlerde Optimizasyon

GPU’suz sistemler llama.cpp’nin ilk doğduğu ortamdır ve bu sistemlerde optimizasyonun kendine özgü kuralları vardır. Derlemede işlemciye özgü talimat setleri, matris çarpımı hızını doğrudan etkiler; araç, derleme anında ana makinenin desteklediği talimatları algılamaya çalışır ve güncel derleyici bayraklarıyla derlemek AVX, AVX2 gibi vektör uzantılarından yararlanmayı sağlar. Aynı işlemcide hedefe özel derlenmiş ikili dosya, genel derlemeye göre ölçülebilir hız kazancı verir.

CPU’da bellek bant genişliği ana darboğazdır; model dosyası ne kadar küçükse üretilen her token için okunacak veri o kadar azdır ve hız o kadar yüksektir. Bu yüzden CPU sistemlerinde agresif kuantalamanın bir maliyeti, bellek bant genişliği tasarrufu olarak geri döner. Thread ayarı burada daha kritiktir: fiziksel çekirdek sayısını geçmek, önbellek çekişmesine yol açar. Numa mimarili çok işlemcili sistemlerde iş parçacıklarının düğümlere dağıtımı ayrı bir ince ayar konusudur. CPU modlarında 7B Q4 modelin çoğu modern masaüstünde sohbet edilebilir hızlarda çalıştığı, 13B sınıfının ise sabırlı kullanıma uygun olduğu pratik referans olarak alınabilir.

Sunucu Modu ve Eşzamanlılık

llama.cpp, tek satırlık kullanımın ötesinde llama-server adlı bir sunucu bileşeni içerir. Sunucu, OpenAI uyumlu bir API ile chat ve completions uç noktaları sağlar; LangChain ve OpenAI istemcileri taban adres çevrilerek doğrudan bağlanabilir. Eşzamanlılık düzeni, paralel istek sayısı parametresiyle kontrol edilir; her paralel yuva, bağlam önbelleğinde ayrı bir pay alır ve bellek tüketimi bu sayıyla doğrusal büyür. Yoğun istek profili olan dağıtımlarda paralel yuva sayısı, bağlam uzunluğu ve VRAM kapasitesi üçlüsünün birlikte dengelenmesi gerekir.

Sunucunun önbellek yeniden kullanımı, sohbet uygulamalarında belirgin kazanç sağlar: aynı konuşmanın devamı geldiğinde, değişmeyen öndeki tokenların önbellek hesabı yeniden yapılmaz ve ilk token gecikmesi düşer. Uzun sistem istemleri kullanan uygulamalarda bu özellik özellikle değerlidir; sistem istemi her istekte yeniden işlenmez. Sunucu ayrıca modellerin sıcak tutulmasını yönetir; bellek sınırına ulaşıldığında en az kullanılan model boşaltılır. Dağıtım ölçeği büyüdüğünde birden çok llama-server örneğinin ters vekil arkasında çalıştırılması, en basit yatay ölçekleme yoludur.

Sürüm Takibi ve Değişim Yönetimi

llama.cpp, çok hızlı gelişen bir projedir; haftalık sürümlerde yeni arka uç iyileştirmeleri, yeni mimari destekleri ve parametre değişiklikleri gelir. Bu hız, hem fırsat hem risk demektir: yeni sürümler aynı donanımda ölçülebilir hız kazancı getirebilirken, bazı parametrelerin adı veya varsayılanı değişebilir ve eski betikler kırılabilir. Sağlam bir yönetim düzeni, sabit bir sürümü kilitleyip güncellemeleri test ortamında değerlendirmektir.

Güncelleme değerlendirmesi için llama-bench referans tablosu vardır: mevcut sürümde model ve ayarlar ölçülür, aday sürüm aynı ölçümle karşılaştırılır. Hız artışı doğrulanmadıkça üretim sürümü değişmez; kalite tarafında ise çıktı örnekleri karşılaştırılır. Model tarafında da uyum izlenmelidir: çok yeni model mimarileri, eski llama.cpp sürümlerinde yüklenemez; bu durumda yalnızca güncelleme çözümdür. Sürüm kilitli çalışırken güvenlik ve performans iyileştirmelerinden yararlanmak için periyodik güncelleme penceresi tanımlamak, uzun ömürlü dağıtımların en dengeli yolu olarak öne çıkar.

Yaygın Hatalar ve İpuçları

En yaygın hata, GPU arka ucu derlenmeden çalıştırmaktır; bu durumda araç sessizce CPU moduna düşer ve hız çok düşük olur. NVIDIA’da çıktıda CUDA ibaresinin göründüğü, -ngl sonrası GPU belleğinin gerçekten dolduğu izlenerek doğrulanır. İkinci hata, VRAM sınırlarını zorlayarak çok büyük bağlam tanımlamaktır; bellek taşması yerine sistemi şişiren tahsisler kararsız hıza yol açar. Üçüncüsü, SMT yüzünden fazla thread tanılamaktır; llama-bench çıktısında daha az threadin daha hızlı olduğu sık görülür.

Performans ipuçları olarak, model dosyasının hızlı bir diskte (tercihen NVMe) tutulması yükleme süresini kısaltır; kuantalama seviyesinin donanımla uyumlu seçilmesi (8 GB VRAM’de Q4_K_M gibi) hızı katlar; ve sürüm güncellemeleri düzenli takip edilmelidir çünkü ggml arka uçları sürekli iyileşir ve aynı donanımda yeni sürümler ölçülebilir hız kazancı getirir. Flash attention ve diğer deneysel bayraklar, her modelde aynı davranmayabilir; etkinleştirmeden önce llama-bench ile kalite ve hız dengesi doğrulanmalıdır.

Kaynaklar

Sık sorulan sorular

llama.cpp ücretsiz mi?

Evet, MIT lisansıyla ücretsiz ve açık kaynaktır. Hiçbir ücret veya hesap gerektirmez; model dosyaları GGUF biçiminde yerel diskte saklanır ve çıkarım tamamen cihaz üzerinde yapılır.

8 GB VRAM'li GPU ile hangi model hızlı çalışır?

Q4_K_M kuantalı 7B-8B sınıfı bir model, 8 GB VRAM'e tam sığar ve en yüksek hızı bu yapılandırmada verir. Model VRAM'a tam sığmadığında katmanların bir kısmı CPU'ya düşer ve hız belirgin biçimde düşer.

Thread sayısı kaç olmalı?

Genel kural, fiziksel çekirdek sayısına eşit thread kullanmaktır. Çoklu iş parçacığı (SMT) nedeniyle görünen mantıksal çekirdek sayısı kadar thread, çekişme yaratarak performansı düşürebilir; llama-bench ile farklı değerler test edilmelidir.

Vulkan hangi durumda tercih edilir?

NVIDIA dışındaki GPU'larda (AMD, Intel) CUDA sürücüleri yokken Vulkan geniş uyumluluk sunar. ROCm veya Intel'in resmî desteği kullanılabiliyorsa o arka uçlar genellikle daha yüksek verim sağlar.

macOS'ta derlemeye gerek var mı?

Apple Silicon'da Metal arka ucu varsayılan olarak etkin derlenir ve ayrı derleme seçeneği gerekmez. Bellek birleşik olduğundan model RAM ile GPU belleği arasında otomatik paylaşılır.

Token hızı nasıl ölçülür?

llama-bench aracı, belirli model ve ayarlar için prompt işleme ve token üretim hızını standart koşullarda ölçer. Farklı derleme seçenekleri ve ayarlar bu araçla karşılaştırılarak en iyi yapılandırma bulunur.

llama.cppperformans optimizasyonuCUDAMetalVulkanGGUFyerel yapay zeka