Local AI

Apple Silicon'de llama.cpp'yi Hız İçin Optimize Etme

Apple Silicon, yerel Büyük Dil Modeli (LLM) çıkarımının (inference) dinamiklerini kökten değiştirdi. M1, M2 ve M3 çiplerinin birleşik bellek mimarisinden yararlanarak geliştiriciler, CPU ve GPU arasında veri aktarımıyla ilişkili gecikme cezaları olmadan büyük modelleri yerel olarak çalıştırabilir. Ancak zirve performansa ulaşmak, kodu derlemekten fazlasını gerektirir; bu, backend seçimi ve bellek yönetimi için stratejik bir yaklaşım gerektirir. Bu kılavuzda, Mac'inizin donanımından her döngüyü (cycle) nasıl alacağınızı, yani llama.cpp'yi nasıl optimize edeceğimizi keşfedeceğiz.

Metal Backend'ini Anlama

Varsayılan olarak, llama.cpp macOS'ta Metal desteği etkinleştirilmiş olarak derlenir. Bu çok önemlidir çünkü Metal Performans Gölgeleri (MPS), Transformer modellerinin hesaplama omurgası olan matris çarpımları için yüksek derecede optimize edilmiş çekirdekler (kernels) sağlar. NVIDIA GPU'lardaki CUDA'nın olgun bir kütüphane ekosistemine sahip olmasının aksine, llama.cpp'deki Apple'ın Metal backend'i, çekirdek başlatma (kernel launch) maliyetini en aza indirmek üzere tasarlanmıştır. Çıkarım (inference) çalıştırdığınızda, tensörler doğrudan GPU belleğinde saklanır ve bu da hızlı erişime olanak tanır. Buradaki performansın anahtarı, derlemenizin gerçekten Metal backend'ini kullandığından ve önemli ölçüde darboğaz oluşturacak CPU-only çalışmaya düşmediğinden emin olmaktır.

Birleşik Bellek Mimarisinden Yararlanma

Apple Silicon'daki birleşik bellek sistemi, CPU ve GPU'nun açık kopyalama yapmadan aynı bellek havuzuna erişmesine olanak tanır. LLM'ler için bu, oyunu değiştiren bir özelliktir. Geleneksel ayrı GPU kurulumları, model ağırlıklarını sistem RAM'inden VRAM'e aktarmayı (offloading) gerektirir; bu işlem büyük modeller için saniyeler veya hatta dakikalar sürebilir. Apple Silicon'da model ağırlıkları, GPU'nun yüksek bant genişliğine sahip bağlantı noktaları (interconnects) aracılığıyla erişebildiği birleşik bellekte bulunur. Bu, "offload" adımını tamamen ortadan kaldırır. Ancak, modelinizin GPU belleğine doğru yüklendiğinden emin olmalısınız. llama.cpp'de bu, -ngl (GPU katman sayısı) parametresi ile kontrol edilir.

Maksimum Verim İçin Pratik Yapılandırma

Yüksek verim (throughput) elde etmek için, GPU'ya aktarılan katman sayısını mevcut bellek bant genişliğinizle dengelemeniz gerekir. İşte M2 Max çipi için optimize bayraklarla (flags) kuantize edilmiş bir LLaMA 2 modelini çalıştırmanın pratik bir örneği:


# Modeli tüm katmanları GPU'da olacak şekilde yükleyin
# -ngl 99, mümkün olan tüm katmanların GPU'ya taşınmasını sağlar
# -c 4096, bağlam penceresi boyutunu ayarlar
# -b 512, parti (batch) boyutunu ayarlar (daha büyük partiler genellikle daha iyi verim sağlar)
./llama-cli -m ./llama-2-13b-q4_K_M.gguf -ngl 99 -c 4096 -b 512

-b 512 kullanımına dikkat edin. Daha büyük bir parti boyutu daha fazla bellek tüketse de, GPU'nun birden fazla token'ı paralel olarak işlemesine olanak tanır; bu da yüksek saniye başına token (TPS) oranlarına ulaşmak için kritiktir. Bellek kısıtlıysanız bunu azaltabilirsiniz, ancak performansta bir düşüş gözlemleyene kadar yüksekten başlayıp aşağı doğru inin.

Gelişmiş İpuçları: Kuantizasyon ve Bağlam

Kuantizasyon, performans için ikinci büyük kaldıraçtır. 4-bit kuantizasyon şeması (örneğin Q4_K_M veya Q4_0) kullanmak, bellek ayak izini önemli ölçüde azaltır ve bağlam penceresi ve parti boyutu için daha fazla alan bırakır. Apple Silicon'da sınırlayıcı faktör genellikle ham hesaplama gücü değil, bant genişliğidir. Bellek birimleri arasında taşınması gereken veri miktarını azaltarak, kuantizasyon doğrudan çıkarım (inference) hızını etkiler. Ayrıca, bağlam pencerenizi pratik olarak mümkün olan en küçük boyutta tutun. 4096 token'lık bir bağlam, çoğu sohbet uygulaması için genellikle yeterlidir ve 16k bağlama kıyasla daha hızlı token üretimi sağlayacaktır.

Performansı İzleme

Optimizasyonlarınızın işe yaradığını doğrulamak için macOS'taki Aktivite Monitörü'nü (Activity Monitor) kullanarak GPU kullanımını izleyin. "GPU" sekmesine bakın ve sürecinizin GPU çekirdeklerini aktif olarak kullandığından emin olun. Yüksek CPU kullanımına rağmen düşük GPU kullanımı görüyorsanız, GPU'ya yeterince katman aktarmamış olabilirsiniz. -ngl parametresini artırmak, iş yükünü Metal backend'ine kaydırmalıdır.

Sonuç

Apple Silicon için llama.cpp'yi optimize etmek, donanım mimarisini anlama ve yazılım parametrelerini ayarlama becerilerinin bir karışımıdır. Metal backend'ini ve birleşik bellek sistemini kullanarak, birçok kullanım senaryosunda bulut tabanlı API'lerle yarışan yerel çıkarım (inference) hızlarına ulaşabilirsiniz. 4-bit kuantize bir modelle başlayın, tüm katmanları GPU'ya aktarın ve belirli donanım yapılandırmanız için ideal noktayı bulmak için parti boyutunuzu ayarlayın. Bu stratejilerle Mac'iniz, özel ve yüksek verimli yapay zeka geliştirme için güçlü bir araca dönüşür.

Share: