Local AI

Yerel Çıkarımı Ustalaşmak: llama.cpp Teknik Derinlemesine İnceleme

Büyük Dil Modellerinin (LLM) demokratikleşmesi, bulut tabanlı API'lardan yerel, cihaz üzerinde çıkarıma hızla kaydı. Bu hareketin ön saflarında llama.cpp yer alıyor; bu, Meta'nın LLaMA modellerini Apple Silicon'da çalıştırmak için orijinal olarak tasarlanmış bir C/C++ uygulamasıdır. Bugün, verimli ve çapraz platform LLM çalıştırma için de facto standart haline gelmiştir. Bu yazı, yerel olarak AI dağıtmak isteyen geliştiriciler için llama.cpp'nin mimarisi, nicelleştirme stratejileri ve pratik uygulamasını incelemektedir.

Temel Mimari ve GGUF Formatı

PyTorch'un dinamik grafiğine ve GPU bellek yüküne dayanan Hugging Face Transformers gibi Python tabanlı çerçevelerin aksine, llama.cpp statik derlemeye dayanarak inşa edilmiştir. Bu, son derece küçük bir ikili dosya boyutu ve aşırı düşük gecikme süresi sağlar. Motor, NVIDIA GPU'ları için CUDA, Apple Silicon için Metal ve çapraz platform grafik kartları için Vulkan dahil olmak üzere geniş bir arka uç hızlandırıcı yelpazesini destekler.

Kritik olarak, llama.cpp GGUF (GGML Evrensel Formatı)'nu yaygınlaştırdı. Bu ikili format, model ağırlıklarının verimli bir şekilde depolanmasını ve yüklenmesini sağlar. GGUF dosyaları, minimum parçalama ile bellekte yüklenmek üzere tasarlanmıştır; bu da standart FP16/FP32 modellerle mücadele etmesi muhtemel tüketici sınıfı donanımlarda modellerin çalışmasını mümkün kılar.

Nicelleştirme: Erişilebilirliğin Anahtarı

llama.cpp'nin gerçek gücü, agresif nicelleştirme yeteneklerinde yatar. Nicelleştirme, modelin ağırlıklarının hassasiyetini azaltır (örneğin, 16-bit kayandan 4-bit tamsayıya), kalitede minimum kayıpla bellek kullanımını ve hesaplama gereksinimlerini önemli ölçüde düşürür. llama.cpp, dosya adlarındaki sıklıkla görülen soneflerle belirtilen çeşitli nicelleştirme türlerini destekler:

  • Q4_0: 4-bit nicelleştirme, hız ve kalite arasındaki en yaygın denge.
  • Q5_K_M: 5-bit karışık hassasiyet, genellikle 7B-13B modeller için "tatlı nokta" olarak kabul edilir.
  • Q8_0: Neredeyse kayıpsız sıkıştırma, VRAM daha yüksek hassasiyete izin verdiğinde idealdir.

7B parametreli bir modeli FP16'dan (14GB VRAM) Q4_K_M'e (~4GB VRAM) dönüştürerek geliştiriciler, entegre grafiklere sahip dizüstü bilgisayarlarda veya eski oyun istasyonlarında güçlü asistanlar çalıştırabilir.

Pratik Uygulama: İlk Modelinizi Çalıştırma

Başlamak için llama.cpp deposuna ve bir GGUF model dosyasına ihtiyacınız vardır. Modelleri Hugging Face'ten indirebilir veya convert_hf_to_gguf.py betiğini kullanarak kendi modellerinizi dönüştürebilirsiniz.

İkili dosyaya ve modele sahip olduktan sonra, komut satırı arayüzü basittir. 4096 token'lık bir bağlam penceresi ile 7B boyutundaki bir modeli çalıştırmaya dair bir örnek aşağıdadır:

./main -m models/llama-2-7b-chat.Q4_K_M.gguf \
        -p "Kuantum bilgisayarlamayı basit terimlerle açıklayın:" \
        -n 256 \
        --temp 0.7 \
        -c 4096

Bu komutta:

  • -m model dosyasının yolunu belirtir.
  • -p istem enjeksiyonudur.
  • -n oluşturulacak yeni token sayısını ayarlar (256).
  • --temp rastgeleliği (sıcaklık) kontrol eder.
  • -c bağlam penceresi boyutunu tanımlar.

Gelişmiş Kullanım: Gömme (Embeddings) ve Python Entegrasyonu

llama.cpp sadece sohbet için değildir. -embd bayrağı aracılığıyla gömme (embedding) oluşturmayı destekler; bu da onu anlamsal arama ve RAG (Getirme-Artırılmış Üretim) hatları için uygun kılar. Ayrıca kütüphane, Python bağlamaları sağlar. Bu, geliştiricilerin subprocess modülünü veya resmi llama-cpp-python sarmalayıcısını kullanarak llama.cpp'yi doğrudan Python uygulamalarına entegre etmesine olanak tanır; bu da C++ performansını Python ekosistemi kolaylığıyla birleştirir.

# llama-cpp-python kullanımı örneği
from llama_cpp import Llama

llm = Llama(
    model_path="./models/llama-2-7b-chat.Q4_K_M.gguf",
    n_ctx=4096,
    n_gpu_layers=35
)

output = llm("S: Yapay zeka nedir? C:", max_tokens=300, stop=["S:"], echo=False)
print(output)

Sonuç

llama.cpp, yerel AI manzarasını temelden değiştirdi. GGUF aracılığıyla performans, bellek verimliliği ve format standartlaştırmasını önceliklendirerek, güçlü LLM'leri bulut altyapısı alanının dışında milyonlarca geliştirici için erişilebilir hale getirdi. İster gizlilik odaklı bir sohbet botu, ister yerel bir RAG sistemi oluşturuyor olun, ister açık ağırlıklarla sadece deneme yapıyor olun, llama.cpp modern yerel AI geliştirme için gerekli olan sağlam ve yüksek performanslı temeli sağlar. Ekosistem gelişmeye devam ettikçe, GGUF güncellemeleri ve nicelleştirme teknikleriyle yarışmak, donanımınızın potansiyelini en üst düzeye çıkarmak için anahtar olacaktır.

Share: