1 puan yazan GN⁺ 2023-12-21 | 1 yorum | WhatsApp'ta paylaş
  • PowerInfer, tek bir tüketici sınıfı GPU bulunan kişisel bir PC'de LLM'leri yerelde serve etmek için tasarlanmış bir CPU/GPU hibrit çıkarım motorudur
  • Temel tasarım, LLM çıkarımındaki aktivasyon yerelliğinden yararlanır; sık etkinleşen hot nöronlar önceden GPU'ya yüklenir, girdiye göre değişen cold nöronlar ise CPU'da hesaplanır
  • Değerlendirmelerde PowerInfer, tek RTX 4090 GPU ile OPT-175B dahil çeşitli LLM'lerde ortalama 13.20 tokens/s, en fazla 29.08 tokens/s elde ettiğini ve bunun A100'e kıyasla %18 daha düşük bir seviye olduğunu belirtiyor
  • llama.cpp ile karşılaştırıldığında Falcon(ReLU)-40B-FP16 demosunda RTX 4090 24GB üzerinde 11x hız artışı sağladığını, değerlendirmelerde ise en fazla 11.69x iyileşme gördüğünü ve model doğruluğunu koruduğunu açıklıyor
  • Destek kapsamı ağırlıklı olarak ReLU/ReGLU/Squared ReLU aktivasyon fonksiyonlu modellerle sınırlı; Mistral, original Llama ve Qwen şu anda desteklenmiyor

PowerInfer'in çözmeye çalıştığı sorun

  • PowerInfer, LLM'leri yerel cihazlarda hızlı çalıştırmak için bir CPU/GPU çıkarım motorudur
  • Tek tüketici sınıfı GPU içeren PC'leri hedefler ve düşük gecikmeli LLM çıkarımı ile serving'i amaçlar
  • Tasarımın merkezinde, LLM çıkarımında nöron aktivasyonlarının üs yasası dağılımı göstermesi yer alır
    • Bazı hot nöronlar farklı girdiler genelinde tutarlı biçimde etkinleşir
    • Çok sayıdaki cold nöron ise belirli girdilere göre değişir

CPU/GPU hibrit çıkarım yöntemi

  • PowerInfer, hot nöronları hızlı erişim için önceden GPU'ya yükler, cold nöronları ise CPU'da hesaplar
  • Bu yaklaşım, GPU bellek gereksinimini ve CPU-GPU veri aktarımını azaltmaya odaklanır
  • Ayrıca uyarlanabilir predictor ve nöron farkındalıklı sparse operatörleri entegre ederek nöron aktivasyonunu ve hesaplama seyrekliğini optimize eder
  • CPU-GPU hibrit çıkarımında önce tüm dense activation block'lar otomatik olarak GPU'ya offload edilir, ardından mümkünse FFN bölünerek GPU'ya offload edilir

Performans değerlendirmesi ve demo

  • Tek RTX 4090 GPU üzerinde OPT-175B dahil çeşitli LLM'lerde ortalama 13.20 tokens/s ve en fazla 29.08 tokens/s elde edildi
  • Bunun, üst düzey sunucu sınıfı A100 GPU'ya kıyasla %18 daha düşük bir seviye olduğu belirtiliyor
  • llama.cpp'ye göre en fazla 11.69x daha hızlı olduğu ve model doğruluğunu koruduğu ifade ediliyor
  • Demoda, tek RTX 4090 24GB üzerinde Falcon(ReLU)-40B-FP16 çalıştırılarak llama.cpp'ye kıyasla 11x hız artışı gösterildi
    • Hem PowerInfer hem de llama.cpp aynı donanımda çalıştırıldı ve RTX 4090'ın VRAM'i tamamen kullanıldı
  • Ayrı bir değerlendirmede, RTX 4090 24GB ve FP16 ReLU modelleriyle, giriş uzunluğu 64 koşulunda Falcon 40B en fazla 11x, Llama 2 70B ise en fazla 3x hız artışı gösterdi
  • RTX 2080Ti 11GB ve INT4 ReLU modelleriyle, giriş uzunluğu 8 koşulunda Falcon 40B en fazla 8x, Llama 2 70B ise en fazla 3x hız artışı gösterdi

Desteklenen modeller ve platformlar

Kurulum ve çalıştırma akışı

  • Derleme bağımlılıkları CMake 3.17 veya üzeri, Python 3.8 veya üzeri ve pip 19.3 veya üzeridir
  • NVIDIA GPU derlemesinde -DLLAMA_CUBLAS=ON seçeneği kullanılır
  • AMD GPU derlemesi ROCm/HIP tabanlıdır ve -DLLAMA_HIPBLAS=ON ile AMDGPU_TARGETS belirtilir
  • Yalnızca CPU derlemesi de mümkündür
  • Temel çıkarım komutu, main çalıştırılabilir dosyasına model yolu, çıktı token sayısı, thread sayısı ve prompt verilerek kullanılır
  • GPU VRAM kullanım sınırı --vram-budget seçeneğiyle belirlenir
  • PowerInfer'in serving, perplexity evaluation ve batched generation komutları llama.cpp ile aynı kullanım biçimini destekler; ancak -ngl argümanı PowerInfer'de --vram-budget ile değiştirilmiştir

Kuantizasyon ve uyumluluk

  • PowerInfer, INT4 Q4_0 model kuantizasyonunu optimize edilmiş biçimde destekler
  • quantize çalıştırılabilir dosyasıyla PowerInfer GGUF modeli Q4_0 formatına kuantize edilebilir
  • Dense inference mode sınırlı biçimde desteklenir ve llama.cpp'ye benzer şekilde kullanılabilir
  • Dense inference mode, tüm modeller için bir uyumluluk modu değildir
    • ReluLLaMA ve ProSparse modellerinde aktivasyon fonksiyonu değiştirilmiştir
    • Bamboo modellerinde model mimarisi değiştirilmiştir
  • llama.cpp model ağırlıklarıyla da çıkarım uyumluluğu için çalıştırılabilir, ancak performans artışı sağlamadığı belirtiliyor

Kısıtlar ve SSS

  • Şu anda desteklenen modeller, ReLU/ReGLU/Squared ReLU aktivasyon fonksiyonlarını kullanan modellerle sınırlıdır
  • Mistral, original Llama ve Qwen şu anda desteklenmez
  • CUDA_ERROR_OUT_OF_MEMORY oluşursa --reset-gpu-index ile GPU indeksi yeniden oluşturulabilir
  • Mevcut uygulamada model offload işlemi beklendiği kadar doğru olmayabilir; bu durumda --vram-budget değeri biraz düşürülebilir veya --disable-gpu-index ile FFN offload kapatılabilir
  • Mevcut ReLU modellerinde, özellikle 70B modelindeki performans metriği düşüşünün, genel LLM eğitimi için gereken yaklaşık 2T token yerine yalnızca 5B token ile fine-tune yapılmış olmasından kaynaklandığı belirtiliyor

Son güncellemeler ve planlar

  • 5 Ocak 2026'da Tiiny AI Pocket Lab tanıtıldı ve GPT-OSS-120B int4'ü yerelde 20 tokens/s hızında çalıştırdığı belirtildi
  • 27 Temmuz 2025'te SmallThinker-21BA3B-Instruct ve SmallThinker-4BA0.6B-Instruct yayımlandı
  • 11 Haziran 2024'te akıllı telefonlar için optimize edilmiş çıkarım çerçevesi PowerInfer-2 tanıtıldı ve TurboSparse-Mixtral-47B üzerinde 11.68 tokens/s elde edildiği belirtildi
  • Aynı gün Turbo Sparse yayımlandı; Mistral ve Mixtral modellerinin yaklaşık %90 seyrekliğe getirildiği ve Mixtral sınıfı modellerde yalnızca 4B parametrenin etkinleştirildiği açıklandı
  • Tamamlanan maddeler arasında PowerInfer çekirdek kodunun yayımlanması, Llama-2 ve Falcon-40B desteği, Bamboo-7B desteği, Windows desteği, perplexity evaluation kodunun yayımlanması ve FFN çevrimiçi bölme desteği yer alıyor
  • Kalan maddeler arasında text-generation-webui desteği, Mac için Metal desteği, OPT model kodunun yayımlanması, predictor training kodunun yayımlanması ve Multi-GPU desteği bulunuyor

Makale ve dayandığı projeler

  • Daha ayrıntılı teknik bilgiler PowerInfer makalesinde yer alıyor
  • PowerInfer, ggml'in değiştirilebilir operatör kütüphanesini ve llama.cpp'nin çalışma zamanını kullanır
  • ReLU tabanlı sparse model desteğinde THUNLP anılıyor
  • PowerInfer, Deja Vu araştırmasından ilham aldığını belirtiyor

1 yorum

 
GN⁺ 2023-12-21
Hacker News yorumları
  • Çoğu makine öğrenmesi bağlamında hot/cold nöronlar diye bir kavram olmadığından bunu anlamam biraz zaman aldı; makale de bunu doğrudan tanımlamıyor gibi görünüyor
    ReLU'da çıktı sık sık 0 oluyorsa buna “cold” demek mantıklı olabilir, ancak LLaMA aslında ReLU kullanmıyor. GitHub'a tekrar bakınca bu yaklaşımın gerçekte yalnızca ReLU modellerinde çalıştığını gördüm; seyrekliğe ulaşmak için modeli ReLU ile “fine-tune” eden bir grup da var: https://huggingface.co/SparseLLM
    Yani internette sık bulunan herhangi bir modele doğrudan uygulanamıyor, ama ilerlemenin kendisi yine de büyük görünüyor. İleride daha büyük modellerle daha az ideal aktivasyon fonksiyonları arasında bir ödünleşime kayılabilir; ayrıca ABD/AB düzenlemeleri FLOPs ya da parametre sayısını temel alırsa seyrekliğin nasıl hesaplanacağını da merak ediyorum
    Gelecekteki araştırmalar için, LLaMA'nın SwiGLU gibi mevcut aktivasyonlarını koruyup, kuantizasyon kullanarak doygunluk bölgelerini hot/cold nöronlar olarak tanımlamak mümkün görünüyor

    • Bu tür düzenlemelerin ne zaman ve nasıl ortaya çıktığını merak ediyorum. Geliştirme yaparken FLOPs/parametre sayısı düzenlemesini de düşünmek zorunda olmak epey tuhaf hissettiriyor
    • LLaMA uyumlu olduğunu iddia eden bir README'de yalnızca ReLU modelleri için geçerli olan bu büyük koşulun atlanmış olması oldukça ciddi bir sorun
    • https://huggingface.co/SparseLLM/ReluFalcon-40B sayfasında da “We utilize PowerInfer for inference” yazıyor
  • Sansürü kaldırılmış Mixtral bunu kullanarak çalıştırılabilse gerçekten harika olurdu. RTX 4090 üzerinde 3 bitten yüksek kuantizasyon bile mümkün olabilir

    • Sansürü kaldırılmış LLM'ler genelde “lobotomize” edilmiş ya da hizalanmış sürümlerden en azından benchmark'larda daha iyi sonuç veriyor; buna rağmen neden eksi oy aldığını merak ediyorum
    • Demoda, 24GB VRAM'li RTX 4090 üzerinde daha büyük bir model çalıştırılıyor. Mixture of Experts üzerinde seyrek aktivasyonu uygulamak kolay olmayabilir, ama bu yalnızca CPU ile çalıştırmayı ya da çok daha ucuz GPU'larla çalıştırmayı mümkün kılabilecek harika bir yön gibi görünüyor
      Teknik olarak Mixtral zaten sinir ağının kontrol ettiği seyrek aktivasyona sahip, ama Inception mem'indeki gibi “daha derine inmek” gerekiyor
    • Çift GPU da genel tüketici sınıfı bir kurulum sayılabilir; yakında destek gelirse güzel olur. 4 bitte bağlam alanı için bile yeterince yer olabilir
      Bunun tamamı llama.cpp'nin bir fork'u olduğu için, bir gün ana projeye girmesini umuyorum
    • İyi görünüyor: https://www.youtube.com/watch?v=q2KpPUOsBCs
  • Mistral-7B üzerinde çalıştıklarını söylediklerine göre, benim yalnızca GPU kullanan Mistral implementasyonum VRAM'de 5GB'ı biraz geçiyor: https://github.com/Const-me/Cgml
    Çoğu tüketici sınıfı GPU'da oldukça iyi çalışıyor, ama şu anda yalnızca Windows destekleniyor

    • Oldukça ilginç görünüyor. Intel Core i7 dizüstü bilgisayarda da çalışır mı merak ediyorum
    • ollama kullanabilirsin. llmcpp kullanıyor ve yaklaşık 4GB yeterli oluyor
  • Gerçekten çok etkileyici. llama.cpp çok seviliyor ama harici GPU offloading yaklaşımı, prompt işleme kısmını GPU'da yapıp modeli ortadan bölen nispeten basit bir yöntem
    Aktivasyon seyrekliğinin işe yarayacak kadar büyük olması ilginç; geleneksel makine öğrenmesi açısından bakınca bellek erişiminin oldukça rastgele olduğunu düşünürdüm
    Bir gün cold nöronları entegre GPU'ya offload etmek mümkün olsa güzel olurdu. Metal kernel'larını düşünmeleri de ilgimi çekiyor, çünkü performans avantajının hibrit bellek havuzundan geldiğini sanıyordum. Öyle değilse bu daha çok eski AMD Mac'lere yarar gibi görünüyor ama belki de bir şeyi kaçırıyorum

    • Apple Silicon ve Metal için, fikir cold nöronları CPU/Accelerate üzerinde, hot nöronları GPU üzerinde tutup ikisini birden kullanmak olabilir
      GPU ile CPU arasında kopyalama yoksa ve zaten birleşik bellek kullanılıyorsa hız artışı sınırlı olabilir; yine de çipin daha fazla özelliğini aynı anda kullanabilmek güzel olur. Isıya bağlı performans düşüşünü önlemek için yalnızca verimlilik çekirdeklerini kullanmak daha iyi olabilir; muhtemelen oyun modu da buna benzer çalışıyordur
  • Bu implementasyonda modelin hangi kısmının sistem belleğinde, hangi kısmının GPU belleğinde tutulacağını belirlemek için modelin kendisi hakkında belli bir bilgi gerekiyor gibi görünüyor
    İdeal olarak bunun otomatik hesaplanıp hesaplanamayacağını ya da gelecekteki modellerin bu tür yerleştirme algoritmalarını otomatikleştirecek arayüzler sunup sunmayacağını merak ediyorum. Eğer algoritmayı her model mimarisine göre uyarlamak gerekiyorsa, bu projeyi sürdürmek epey zorlaşacaktır

    • Büyük ölçüde doğru gibi görünüyor. Orijinal modelle birleştirilecek “Predictor” ağırlıklarını sağlayan bir betik var, ama GitHub'ın ilk sayfasında bu ağırlıkların nasıl üretildiği açık görünmüyor
      10 kat hız artışı gerçekten etkileyici. Eğer bu diğer modellerde de yeniden üretilebilirse, hot/cold nöronları belirleme süreci çıkarım optimizasyonu için model geliştirmenin genel bir parçası hâline gelebilir
  • README'de, kendisi deneme yapmayacak kişiler için önemli kısım kabaca şu: PowerInfer; Linux x86-64 CPU'da (AVX2), Linux x86-64 CPU + NVIDIA GPU'da ve macOS Apple M çiplerinde test edilmiş
    Ancak Mac optimizasyonu yapılmadığı için şu anda performans artışı büyük değil deniyor. Yakında eklenecek özellikler arasında Mistral-7B modeli ve macOS için Metal seyrek çıkarım backend'i var

    • İndirilebilir llama2 modelleri ve convert.py dosyasından da bahsetmeye değer
  • “Girdiler genelinde tutarlı biçimde etkinleşen az sayıdaki hot nöron ile girdiye göre değişen çok sayıdaki cold nöron” dağılımını kullanarak bir GPU-CPU hibrit çıkarım motoru tasarlamış olmaları müthiş
    Açıklamaya göre hot nöronlar hızlı erişim için önceden GPU'ya yerleştiriliyor, cold nöronlar ise CPU'da hesaplanarak GPU bellek gereksinimi ve CPU-GPU veri aktarımı büyük ölçüde azaltılıyor

  • Herkesin bunu llama.cpp ile karşılaştırması kolay yol olduğu için. Herkes llama.cpp'nin yavaş olduğunu bilmeli. exllamav2 ya da başka optimize edilmiş uygulamalarla karşılaştırmak gerekir

    • Bu durumda bunu llama.cpp ile karşılaştırmak doğru, çünkü kod kelimenin tam anlamıyla llama.cpp'nin değiştirilmiş hali. Yalnızca ggml matris hesaplama kütüphanesini kullanan seviyede değil; main.cpp ve genel llama.cpp kodunu aynen kullanan bir fork olduğu için doğrudan karşılaştırılabilir.
      https://github.com/ggerganov/llama.cpp/pull/4543 [Review] Merge PowerInfer with llama.cpp mainline #4543
      https://github.com/ggerganov/llama.cpp/discussions/4534#disc... Ayrıca “11 kat hız artışı biraz cherry-picking, çünkü Falcon 40B için llama.cpp GPU kodu iyi optimize edilmemiş” açıklaması da var
    • exllama dilbilgisi kısıtlarını desteklemediği için llama.cpp'ye bağlıyım
      Üstelik exllama'nın tutarlılık açısından yan etkileri de var gibi görünüyor: https://www.reddit.com/r/LocalLLaMA/comments/17w57eu/llm_for...
    • ExLlama yalnızca GPU için değil mi? Bu hız artışı GPU+CPU bölünmüş kullanım senaryosu için
    • Hem daha hızlı olup hem de uygulamaya paketlenip dağıtılabilecek ne önerilir, merak ediyorum
  • Rastgele bir model için seyrek kestirici dosyası üretilebilirse gerçekten harika olur. Şu an yalnızca onların işlediği 4 model için geçerli gibi görünüyor
    Sayfaya ve koda bakınca bu adımı yapan aracın dahil edilmediği anlaşılıyor. Şimdilik biraz beklemeyi düşünüyorum; umarım bu özellikler sonunda tekrar llama.cpp seçeneği olarak birleştirilir. Bu yalnızca ggml matris kütüphanesini kullanan bir şey değil, genel llama.cpp kod tabanına dayanıyor

  • Sadece “tüketici sınıfı GPU” ifadesine bakınca birçok modelde çalıştırılabiliyormuş gibi görünüyor ama, bu tür yazılarda sık olduğu gibi gerçekte yalnızca RTX 4090'a mı özel, merak ediyorum

    • Bunun 4090'a özel olduğunu düşündüren belirgin bir şey yok. Genelde önemli olan VRAM; 24GB gerekiyorsa 3090 da olur, iki adet 12GB kart da bir seçenek olur
      Tekniğin kendisi, daha küçük GPU'larda daha büyük modelleri çalıştırmayı mümkün kılan genel bir yaklaşım ve CPU offloading performansını büyük ölçüde iyileştiriyor. Sadece 4090'da en büyük modelin fp16 ile çalıştırıldığı örnek yok; 2080Ti'da aynı model 4 bit quantization ile çalıştırıldığında da LLaMA için yaklaşık 3 kat hız artışı görülmüş
      Bu yüzden masaüstünde 33B model yeni varsayılan haline gelebilir ve tek bir 3090 ya da 4090 ile bile 70B'yi gerçek zamanlı sohbet hızında çalıştırmak mümkün olabilir gibi görünüyor