Tüketici sınıfı GPU takılı PC'lerde yüksek hızlı büyük dil modeli serving
(github.com/SJTU-IPADS)- 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
- Şu anda PowerInfer'de kullanılabilen modeller Falcon-40B, Llama2 family, ProSparse Llama2 family ve Bamboo-7B'dir
- Desteklenen model ağırlıkları PowerInfer GGUF biçiminde sunulur; GGUF tabanı üzerinde hem LLM ağırlıklarını hem de predictor ağırlıklarını içerir
- Hugging Face'te sunulan PowerInfer GGUF modelleri şunlardır
- PowerInfer/ReluLLaMA-7B-PowerInfer-GGUF
- PowerInfer/ReluLLaMA-13B-PowerInfer-GGUF
- PowerInfer/ReluFalcon-40B-PowerInfer-GGUF
- PowerInfer/ReluLLaMA-70B-PowerInfer-GGUF
- PowerInfer/ProSparse-LLaMA-2-7B-GGUF
- PowerInfer/ProSparse-LLaMA-2-13B-GGUF
- PowerInfer/Bamboo-base-v0.1-gguf
- PowerInfer/Bamboo-DPO-v0.1-gguf
- Test edilen platformlar şunlardır
- Linux'ta AVX2 destekli x86-64 CPU, NVIDIA GPU'lu veya GPUsuz sistemler dahil
- Windows'ta AVX2 destekli x86-64 CPU, NVIDIA GPU'lu veya GPUsuz sistemler dahil
- macOS'ta Apple M çipli yalnızca CPU ortamı
- Mac'in optimizasyon hedefi olmadığı ve bu nedenle şu anda performans artışının büyük olmadığı belirtiliyor
- macOS'ta sparse inference için Metal backend planlanıyor
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=ONseçeneği kullanılır - AMD GPU derlemesi ROCm/HIP tabanlıdır ve
-DLLAMA_HIPBLAS=ONileAMDGPU_TARGETSbelirtilir - 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-budgetseçeneğiyle belirlenir - PowerInfer'in serving, perplexity evaluation ve batched generation komutları llama.cpp ile aynı kullanım biçimini destekler; ancak
-nglargümanı PowerInfer'de--vram-budgetile değiştirilmiştir
Kuantizasyon ve uyumluluk
- PowerInfer, INT4
Q4_0model kuantizasyonunu optimize edilmiş biçimde destekler quantizeçalıştırılabilir dosyasıyla PowerInfer GGUF modeliQ4_0formatı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_MEMORYoluşursa--reset-gpu-indexile GPU indeksi yeniden oluşturulabilir- Mevcut uygulamada model offload işlemi beklendiği kadar doğru olmayabilir; bu durumda
--vram-budgetdeğeri biraz düşürülebilir veya--disable-gpu-indexile 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
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
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
Teknik olarak Mixtral zaten sinir ağının kontrol ettiği seyrek aktivasyona sahip, ama Inception mem'indeki gibi “daha derine inmek” gerekiyor
Bunun tamamı llama.cpp'nin bir fork'u olduğu için, bir gün ana projeye girmesini umuyorum
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
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
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
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
convert.pydosyası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
main.cppve 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
Ü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...
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
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