deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Rehber: llama.cpp expert offloading ile tek bir 24GB RTX 4090'da 100B+ MoE modellerini çalıştırma

dev.to'da yayınlanan bir rehber, llama.cpp expert offloading sayesinde dikkat (attention) katmanlarını GPU'da tutup expert ağırlıklarını sistem RAM'ine taşıyarak 125 milyar parametreli MoE modellerinin 24GB'lık bir RTX 4090'da nasıl çalıştırıldığını anlatıyor.

Rehber: llama.cpp expert offloading ile tek bir 24GB RTX 4090'da 100B+ MoE modellerini çalıştırma

MoE nasıl VRAM duvarını aşıyor

600 puandan fazla toplayan bir Hacker News gönderisinden ilham alan, dev.to'da yayınlanan pratik bir rehber, 125 milyar parametreli bir Mixture of Experts modelini tek bir RTX 4090 üzerinde çalıştırmayı adım adım anlatıyor. Bu ilk bakışta imkânsız gibi görünüyor: kartta 24GB VRAM varken, 4-bit quantization uygulanmış bir 125B model yaklaşık 70-75GB yer kaplıyor. Yazara göre çözüm daha iyi sıkıştırma değil, tensörlerin GPU ve sistem RAM'i arasında daha akıllıca yerleştirilmesi.

Dense (yoğun) bir modelde her token tüm parametrelerden geçer; bu yüzden VRAM'e sığmayan ağırlıklar CPU'da hesaplanmak zorundadır ve sistem RAM bant genişliği VRAM bant genişliğinden çok daha düşük olduğu için throughput çöker. MoE modelleri bu varsayımı kırar. Her katmandaki bir router, token başına yalnızca birkaç expert'i seçer — genellikle 128 veya 256 içinden 8 tanesini — yani 125B'lik bir modelde token başına yalnızca 10-15B aktif parametre olabilir. Her adımda dokunulan bileşenler — attention, KV cache, embedding'ler, paylaşılan expert'ler ve router — görece küçüktür; expert FFN ağırlıkları ise devasadır ama yalnızca kısmen okunur. Rehberin temel fikri şu: her zaman kullanılan parçaları GPU'da tut ve expert'leri sistem RAM'ine taşı.

Gerçekten önemli olan donanım

Test kurulumunda bir RTX 4090, Ryzen 9 7950X, dual channel olarak iki 64GB'lık modül halinde dizilmiş 128GB DDR5-5600 ve hızlı model yüklemesi için bir Gen4 NVMe disk bir araya getirilmiş. Yazar, Q4'te yaklaşık 120B'lik bir model için gerçekçi alt sınır olarak 96GB öneriyor.

Ters sezgisel bir bulgu: expert offloading ile RAM bant genişliği, CPU çekirdek sayısından daha önemli. Tüketici platformlarında dört DIMM takmak genellikle bellek veriyolunu 4800'e veya daha aşağı düşürür; bu yüzden iki büyük ve hızlı modül, dört küçük modülden daha iyi performans verir.

Yazılım tarafında rehber, llama.cpp'yi CUDA etkin şekilde derliyor ve derlemeyi hızlandırmak için Ada nesli kartlar için compute architecture bayrağını 89'a ayarlıyor. Ağırlıklar için ise dynamic veya imatrix şemalarıyla önceden quantize edilmiş GGUF dosyaları öneriliyor; IQ4_XS'ın kalite olarak Q4_K_M'ye yakın olduğu, ancak %10-15 daha küçük olduğu belirtiliyor.

İşi yapan bayraklar

llama.cpp iki offloading mekanizması sunuyor. Basit olanı --n-cpu-moe N; bu, ilk N katmanın expert'lerini CPU'da tutar. Esnek olanı ise -ot; regex tabanlı bu override, ince ayar için belirli tensör desenlerini belirli cihazlara eşler. İkisi de -ngl 99 — her şeyi offload et — ile birlikte kullanılır; bunun ardından expert kuralları ağır tensörleri geri CPU tarafına çeker ve attention ile paylaşılan ağırlıkları GPU'da bırakır.

Destekleyici bayraklar da önemli: -fa on Flash Attention'ı etkinleştirir ve KV cache'i küçültür; q8_0 KV cache quantization önbellek belleğini ihmal edilebilir kalite kaybıyla yaklaşık yarıya indirir; -t ise mantıksal değil fiziksel çekirdek sayısına eşit olmalıdır, çünkü aşırı thread kullanımı RAM bant genişliği çekişmesine yol açar. -ot için kural sıralaması önemlidir: önceki kurallar önceliklidir, dolayısıyla tensörleri GPU'ya taşıyan kurallar, expert'leri CPU'ya iten kapsayıcı kuralın üzerinde yer almalıdır.

Önerilen ayar döngüsü --n-cpu-moe değerini toplam katman sayısına eşitleyerek başlar, nvidia-smi'yi izler ve VRAM kullanımı 22-23GB civarına gelene kadar N'yi adım adım düşürür; böylece context dolduğunda out-of-memory hatalarını önlemek için 1-2GB'lık bir pay bırakılır.

Benchmark'lara güvenmek yerine ölçün

Yazar, internetten — özgün Hacker News başlığı dahil — throughput rakamlarını kopyalamamayı açıkça tavsiye ediyor, çünkü sonuçlar RAM'e, context uzunluğuna ve quantization türüne çok bağlı. Bunun yerine rehber, llama-bench'i, OpenAI uyumlu endpoint'e istek yapan ve time-to-first-token ile saniyedeki decode token sayısını kaydeden küçük bir streaming scriptiyle eşleştiriyor.

Prefill, expert offloading'in zayıf noktası olarak ortaya çıkıyor, çünkü bir prompt'un tamamı CPU'da duran expert'lerden geçmek zorunda. Uzun promptlu RAG iş yükleri için rehber, -b ve -ub ile batch boyutlarını artırmayı öneriyor (örneğin -ub 2048); böylece llama.cpp bu prefill expert hesaplamalarının daha fazlasını GPU'ya kaydırabiliyor.

Kaçınılması gereken tuzaklar

Üç başarısızlık modu öne çıkıyor. RAM yetersizse işletim sistemi expert'leri diskten swap eder veya mmap ile okur ve hız saniyede 1 token'ın altına düşer — çıkarım sırasında free -h çıktısını izleyin. Windows'ta WSL2 varsayılan olarak sistem RAM'inin yalnızca yarısını kullanır; bu yüzden limiti yükselten bir .wslconfig girdisi gerekir. Ve quantize edilmiş cache olsa bile çok uzun context'ler maliyetlidir; tavsiye 32K'dan başlamak ve yalnızca gerektiğinde artırmaktır.

Neden önemli

Expert offloading, büyük model çıkarımı için donanım sorusunu yeniden çerçevelendir: 80GB sınıfı bir GPU yerine, orta seviye bir kart ve bol miktarda sistem RAM yeterlidir; DDR5, gigabayt başına VRAM'den çok daha ucuzdur. 100B sınıfı modelleri yerel olarak çalıştırmak isteyen — iç kodu veya müşteri verilerini bulut GPU'lardan uzak tutmak isteyen — geliştiriciler için bu, daha önce erişilemez olan bir iş yükünü masaüstü kurulumuna dönüştürür. Dikkat edilmesi gereken nokta: bu teknik yalnızca MoE mimarilerine uygulanabilir; dense modeller bundan yarar sağlamaz.

  • #llama-cpp
  • #local-llm
  • #mixture-of-experts
  • #gpu
  • #quantization

İlgili yazılar