Serving model bahasa besar berkecepatan tinggi pada PC dengan GPU konsumen
(github.com/SJTU-IPADS)- PowerInfer adalah mesin inferensi hibrida CPU/GPU untuk melayani LLM secara lokal di PC pribadi dengan satu GPU konsumen
- Desain intinya memanfaatkan lokalitas aktivasi pada inferensi LLM: neuron hot yang sering aktif dimuat lebih dulu ke GPU, sementara neuron cold yang berubah menurut input dihitung di CPU
- Dalam evaluasi, PowerInfer mencapai rata-rata 13.20 tokens/s dan maksimum 29.08 tokens/s pada berbagai LLM, termasuk OPT-175B, dengan satu RTX 4090, dan dikatakan hanya 18% lebih rendah dibanding A100
- Dibandingkan llama.cpp, pada demo Falcon(ReLU)-40B-FP16 di RTX 4090 24GB, PowerInfer menunjukkan peningkatan kecepatan 11x; dalam evaluasi tercatat hingga 11.69x, sambil mempertahankan akurasi model
- Cakupan dukungan saat ini berfokus pada model dengan fungsi aktivasi ReLU/ReGLU/Squared ReLU, dengan keterbatasan bahwa Mistral, original Llama, dan Qwen belum didukung
Masalah yang ingin diselesaikan PowerInfer
- PowerInfer adalah mesin inferensi CPU/GPU untuk menjalankan LLM dengan cepat di perangkat lokal
- Ditujukan untuk PC dengan satu GPU konsumen, dengan tujuan inferensi dan serving LLM berlatensi rendah
- Inti desainnya adalah bahwa aktivasi neuron dalam inferensi LLM menunjukkan distribusi hukum pangkat
- Sebagian neuron hot aktif secara konsisten di berbagai input
- Banyak neuron cold berubah tergantung input tertentu
Metode inferensi hibrida CPU/GPU
- PowerInfer memuat lebih dulu neuron hot ke GPU agar dapat diakses cepat, sementara neuron cold dihitung di CPU
- Pendekatan ini berfokus pada pengurangan kebutuhan memori GPU dan transfer data CPU-GPU
- Selain itu, ia mengintegrasikan prediktor adaptif dan operator sparse yang sadar-neuron untuk mengoptimalkan aktivasi neuron dan sparsitas komputasi
- Dalam inferensi hibrida CPU-GPU, semua dense activation block otomatis di-offload ke GPU, lalu FFN dipecah dan di-offload ke GPU bila memungkinkan
Evaluasi performa dan demo
- Pada satu RTX 4090, PowerInfer mencapai rata-rata 13.20 tokens/s dan maksimum 29.08 tokens/s pada berbagai LLM, termasuk OPT-175B
- Hasil ini dijelaskan hanya 18% lebih rendah dibanding GPU A100 kelas server papan atas
- Disebut hingga 11.69x lebih cepat daripada llama.cpp sambil mempertahankan akurasi model
- Dalam demo, Falcon(ReLU)-40B-FP16 dijalankan pada satu RTX 4090 24GB dan menunjukkan peningkatan kecepatan 11x dibanding llama.cpp
- PowerInfer dan llama.cpp sama-sama dijalankan pada perangkat keras yang sama dan menggunakan penuh VRAM RTX 4090
- Dalam evaluasi terpisah, pada RTX 4090 24GB dengan model FP16 ReLU dan panjang input 64, Falcon 40B menunjukkan peningkatan kecepatan hingga 11x, dan Llama 2 70B hingga 3x
- Pada RTX 2080Ti 11GB dengan model INT4 ReLU dan panjang input 8, Falcon 40B menunjukkan peningkatan kecepatan hingga 8x, dan Llama 2 70B hingga 3x
Model dan platform yang didukung
- Model yang saat ini dapat digunakan di PowerInfer adalah Falcon-40B, keluarga Llama2, keluarga ProSparse Llama2, dan Bamboo-7B
- Bobot model yang didukung disediakan dalam format PowerInfer GGUF, berbasis GGUF dengan bobot LLM dan bobot predictor disertakan bersama
- Model PowerInfer GGUF yang tersedia di Hugging Face meliputi:
- 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
- Platform yang telah diuji adalah sebagai berikut:
- CPU x86-64 dengan dukungan AVX2 di Linux, baik dengan maupun tanpa GPU NVIDIA
- CPU x86-64 dengan dukungan AVX2 di Windows, baik dengan maupun tanpa GPU NVIDIA
- Lingkungan CPU-only macOS dengan chip Apple M
- Dinyatakan bahwa Mac bukan target optimasi, sehingga peningkatan performa saat ini belum besar
- Backend Metal untuk sparse inference di macOS direncanakan hadir
Alur instalasi dan eksekusi
- Dependensi build adalah CMake 3.17 atau lebih baru, Python 3.8 atau lebih baru, dan pip 19.3 atau lebih baru
- Build GPU NVIDIA menggunakan opsi
-DLLAMA_CUBLAS=ON - Build GPU AMD berbasis ROCm/HIP menggunakan
-DLLAMA_HIPBLAS=ONdan menetapkanAMDGPU_TARGETS - Build CPU-only juga dimungkinkan
- Perintah inferensi dasar menggunakan executable
maindengan menentukan path model, jumlah token keluaran, jumlah thread, dan prompt - Batas penggunaan VRAM GPU ditetapkan dengan opsi
--vram-budget - Serving, evaluasi perplexity, dan batched generation di PowerInfer mendukung perintah dengan cara yang sama seperti llama.cpp, tetapi argumen
-ngldiganti menjadi--vram-budgetdi PowerInfer
Kuantisasi dan kompatibilitas
- PowerInfer mendukung dan mengoptimalkan kuantisasi model INT4
Q4_0 - Dengan executable
quantize, model PowerInfer GGUF dapat dikuantisasi ke formatQ4_0 - Dense inference mode didukung secara terbatas dan dapat digunakan dengan cara serupa seperti di llama.cpp
- Dense inference mode bukan mode kompatibilitas untuk semua model
- Model ReluLLaMA dan ProSparse memiliki fungsi aktivasi yang diubah
- Model Bamboo memiliki arsitektur model yang diubah
- Dinyatakan bahwa bobot model dari llama.cpp juga dapat dijalankan demi kompatibilitas inferensi, tetapi tidak memberikan peningkatan performa
Keterbatasan dan FAQ
- Model yang saat ini didukung terbatas pada model yang menggunakan fungsi aktivasi ReLU/ReGLU/Squared ReLU
- Mistral, original Llama, Qwen, dan lainnya saat ini belum didukung
- Jika
CUDA_ERROR_OUT_OF_MEMORYterjadi, indeks GPU dapat dibuat ulang dengan--reset-gpu-index - Dalam implementasi saat ini, offloading model mungkin tidak seakurat yang diharapkan, sehingga nilai
--vram-budgetdapat diturunkan sedikit atau offloading FFN dapat dimatikan dengan--disable-gpu-index - Dijelaskan bahwa penurunan metrik performa pada model ReLU saat ini, terutama model 70B, terjadi karena fine-tuning hanya menggunakan 5B token, bukan sekitar 2T token yang umumnya diperlukan untuk pelatihan LLM
Pembaruan terbaru dan rencana
- Pada 5 Januari 2026, Tiiny AI Pocket Lab diumumkan, yang disebut menjalankan GPT-OSS-120B int4 secara lokal pada 20 tokens/s
- Pada 27 Juli 2025, SmallThinker-21BA3B-Instruct dan SmallThinker-4BA0.6B-Instruct dirilis
- Pada 11 Juni 2024, diperkenalkan framework inferensi teroptimasi untuk smartphone, PowerInfer-2, yang disebut mencapai 11.68 tokens/s pada TurboSparse-Mixtral-47B
- Pada hari yang sama, Turbo Sparse juga diumumkan; dijelaskan bahwa Mistral dan Mixtral dibuat menjadi sekitar 90% sparse dan hanya 4B parameter yang diaktifkan pada model kelas Mixtral
- Item yang telah selesai mencakup rilis kode inti PowerInfer, dukungan Llama-2 dan Falcon-40B, dukungan Bamboo-7B, dukungan Windows, rilis kode evaluasi perplexity, dan dukungan pemisahan FFN online
- Item yang masih tersisa mencakup dukungan text-generation-webui, dukungan Metal untuk Mac, rilis kode model OPT, rilis kode pelatihan predictor, dan dukungan Multi-GPU
Makalah dan proyek dasar
- Detail teknis lebih lanjut dirangkum dalam makalah PowerInfer
- PowerInfer menggunakan pustaka operator yang dapat dimodifikasi dari ggml dan runtime eksekusi dari llama.cpp
- Dukungan model sparse berbasis ReLU menyebut THUNLP
- PowerInfer menyatakan terinspirasi oleh riset Deja Vu
1 komentar
Komentar Hacker News
Dalam kebanyakan machine learning tidak ada konsep neuron hot/cold, jadi butuh waktu untuk memahaminya, dan tampaknya makalahnya juga tidak mendefinisikannya secara langsung
Pada ReLU, jika output sering 0 maka itu bisa dianggap “cold”, jadi masuk akal, tetapi LLaMA asli tidak memakai ReLU. Setelah melihat GitHub lagi, ternyata pendekatan ini memang hanya berfungsi pada model ReLU, dan ada kelompok yang melakukan “fine-tuning” model menjadi ReLU untuk mendapatkan sparsity: https://huggingface.co/SparseLLM
Jadi ini tidak bisa diterapkan begitu saja ke sembarang model yang mudah ditemukan di internet, tetapi kemajuannya sendiri terlihat besar. Ke depan, mungkin akan ada pergeseran menuju kompromi antara model yang lebih besar dan fungsi aktivasi yang kurang ideal, dan saya juga penasaran bagaimana sparsity akan dihitung jika regulasi AS·UE memakai FLOPs atau jumlah parameter sebagai acuan
Untuk riset selanjutnya, tampaknya mungkin untuk tetap mempertahankan fungsi aktivasi yang ada seperti SwiGLU milik LLaMA, tetapi mendefinisikan wilayah saturasi sebagai neuron hot/cold dengan memanfaatkan kuantisasi
Akan sangat bagus jika Mixtral yang sudah tidak disensor bisa dijalankan dengan ini. Mungkin kuantisasi di atas 3-bit juga jadi memungkinkan di RTX 4090
Secara teknis Mixtral sendiri sudah punya aktivasi sparse yang dikendalikan jaringan saraf, tetapi seperti meme Inception, kita harus “masuk lebih dalam”
Karena semuanya ini adalah fork llama.cpp, saya berharap suatu saat masuk ke proyek upstream
Karena katanya sedang mengerjakan Mistral-7B, implementasi Mistral khusus GPU buatan saya memakai sedikit di atas 5GB VRAM: https://github.com/Const-me/Cgml
Berjalan cukup baik di kebanyakan GPU kelas konsumen, tetapi saat ini hanya mendukung Windows
Ini benar-benar keren. llama.cpp memang banyak disukai, tetapi cara offloading ke GPU eksternal adalah pendekatan yang relatif sederhana: memproses prompt di GPU dan membagi model di tengah
Menarik bahwa sparsity aktivasi cukup besar hingga layak dimanfaatkan, dan dari sudut pandang machine learning tradisional, ini biasanya dianggap sebagai akses memori yang sangat acak
Suatu saat akan bagus kalau neuron cold bisa di-offload ke GPU terintegrasi. Saya juga penasaran dengan pertimbangan kernel Metal, karena saya kira keuntungan performanya datang dari hybrid memory pool. Kalau bukan itu, sepertinya hanya akan membantu Mac AMD lama, meski mungkin ada sesuatu yang saya lewatkan
Jika tidak ada penyalinan antara GPU dan CPU, dan memori terpadu sudah dipakai, peningkatan kecepatannya mungkin kecil, tetapi akan bagus jika lebih banyak fungsi chip bisa dimanfaatkan sekaligus. Untuk menghindari penurunan performa karena panas, sepertinya lebih baik hanya memakai efficiency core, dan mode game mungkin juga bekerja seperti itu
Dalam implementasi ini, tampaknya dibutuhkan cukup banyak pengetahuan tentang model itu sendiri untuk menentukan bagian mana yang ditempatkan di memori sistem dan bagian mana yang ditempatkan di memori GPU
Idealnya, saya penasaran apakah ini bisa dihitung otomatis, atau apakah model-model di masa depan akan menyediakan antarmuka untuk mengotomatisasi algoritma penempatan seperti ini. Jika algoritmanya harus disesuaikan untuk setiap arsitektur model, pemeliharaan proyek ini akan jadi cukup berat
Peningkatan kecepatan 10x benar-benar mengesankan. Jika bisa direproduksi di model lain juga, proses mengidentifikasi neuron hot/cold mungkin akan menjadi bagian umum dari pengembangan model untuk optimasi inferensi
Bagi orang yang tidak akan bereksperimen langsung, bagian penting dari README kira-kira ini. PowerInfer telah diuji pada CPU x86-64 Linux (AVX2), CPU x86-64 Linux dengan GPU NVIDIA, dan chip Apple M di macOS
Namun, optimasi Mac belum dilakukan sehingga peningkatan performa saat ini tidak besar. Fitur yang akan segera ditambahkan mencakup model Mistral-7B dan backend inferensi sparse Metal untuk macOS
convert.pyjuga layak disebutBagian yang menyebut mereka merancang mesin inferensi hibrida GPU-CPU dengan memanfaatkan distribusi “sejumlah kecil neuron hot yang aktif secara konsisten di seluruh input, dan sejumlah besar neuron cold yang bervariasi tergantung input” itu sangat bagus
Penjelasannya adalah neuron hot dimuat lebih dulu ke GPU untuk akses cepat, sementara neuron cold dihitung di CPU, sehingga kebutuhan memori GPU dan transfer data CPU-GPU bisa berkurang drastis
Semua orang membandingkannya dengan llama.cpp karena itu jalan yang mudah. Semua orang perlu tahu bahwa llama.cpp itu lambat. Perlu dibandingkan dengan exllamav2 atau implementasi lain yang dioptimalkan
main.cppdan kode llama.cpp umum apa adanya, jadi bisa dibandingkan secara langsunghttps://github.com/ggerganov/llama.cpp/pull/4543 [Review] Merge PowerInfer with llama.cpp mainline #4543
https://github.com/ggerganov/llama.cpp/discussions/4534#disc... Ada juga penjelasan bahwa “peningkatan kecepatan 11x itu agak cherry-picking, karena kode GPU llama.cpp untuk Falcon 40B belum dioptimalkan dengan baik”
Selain itu, sepertinya exllama juga punya efek samping dari sisi konsistensi: https://www.reddit.com/r/LocalLLaMA/comments/17w57eu/llm_for...
Akan sangat keren jika nantinya bisa membuat file prediktor sparse untuk model arbitrer. Saat ini tampaknya hanya berlaku untuk 4 model yang mereka tangani
Dari halaman dan kodenya, sepertinya alat untuk melakukan tahap itu belum disertakan. Untuk sementara saya akan menunggu dulu, dan semoga fitur-fitur ini pada akhirnya digabungkan kembali sebagai opsi llama.cpp. Ini bukan hanya memakai library matriks ggml, tetapi berbasis pada kode llama.cpp umum
Kalau hanya melihat ungkapan “GPU kelas konsumen”, terkesan seperti bisa dijalankan di berbagai model, tetapi seperti tulisan-tulisan semacam ini pada umumnya, saya penasaran apakah sebenarnya khusus RTX 4090
Teknik ini sendiri adalah cara umum untuk menjalankan model yang lebih besar di GPU kecil, dan sangat meningkatkan performa offloading CPU. Bukan hanya ada contoh menjalankan model terbesar di 4090 dengan fp16, tetapi menjalankan model yang sama di 2080Ti dengan kuantisasi 4-bit juga menunjukkan peningkatan kecepatan sekitar 3x untuk LLaMA
Jadi di desktop, model 33B tampaknya akan menjadi default baru, dan bahkan dengan satu 3090 atau 4090 saja, kemungkinan besar 70B akan bisa dijalankan pada kecepatan chat real-time