1 poin oleh GN⁺ 2023-12-21 | 1 komentar | Bagikan ke WhatsApp
  • 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

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=ON dan menetapkan AMDGPU_TARGETS
  • Build CPU-only juga dimungkinkan
  • Perintah inferensi dasar menggunakan executable main dengan 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 -ngl diganti menjadi --vram-budget di PowerInfer

Kuantisasi dan kompatibilitas

  • PowerInfer mendukung dan mengoptimalkan kuantisasi model INT4 Q4_0
  • Dengan executable quantize, model PowerInfer GGUF dapat dikuantisasi ke format Q4_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_MEMORY terjadi, indeks GPU dapat dibuat ulang dengan --reset-gpu-index
  • Dalam implementasi saat ini, offloading model mungkin tidak seakurat yang diharapkan, sehingga nilai --vram-budget dapat 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

 
GN⁺ 2023-12-21
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

    • Saya penasaran kapan dan bagaimana regulasi seperti itu muncul. Terasa cukup aneh bahwa saat mengembangkan sesuatu kita juga harus memikirkan regulasi FLOPs/jumlah parameter
    • Cukup masalah besar kalau README yang mengklaim kompatibel dengan LLaMA menghilangkan catatan penting bahwa ini khusus model ReLU
    • Di https://huggingface.co/SparseLLM/ReluFalcon-40B juga tertulis “We utilize PowerInfer for inference”
  • 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

    • Saya penasaran kenapa dapat downvote, padahal LLM yang tidak disensor biasanya tampil lebih baik daripada versi yang “dilotomi” atau disejajarkan, setidaknya di benchmark
    • Dalam demo, mereka menjalankan model yang lebih besar di RTX 4090 VRAM 24GB. Menerapkan aktivasi sparse ke Mixture of Experts mungkin tidak mudah, tetapi ini terlihat sebagai arah yang sangat bagus yang bahkan bisa memungkinkan pemrosesan hanya dengan CPU atau GPU yang jauh lebih murah
      Secara teknis Mixtral sendiri sudah punya aktivasi sparse yang dikendalikan jaringan saraf, tetapi seperti meme Inception, kita harus “masuk lebih dalam”
    • Dual GPU rasanya masih bisa dianggap konfigurasi konsumen umum, dan semoga segera didukung. Pada 4-bit, ruang konteks pun bisa muat dengan lega
      Karena semuanya ini adalah fork llama.cpp, saya berharap suatu saat masuk ke proyek upstream
    • Terlihat bagus: https://www.youtube.com/watch?v=q2KpPUOsBCs
  • 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

    • Terlihat cukup menarik. Saya penasaran apakah ini bisa jalan juga di laptop Intel Core i7
    • Coba pakai ollama. Itu memakai llmcpp dan hanya butuh sekitar 4GB
  • 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

    • Untuk Apple Silicon dan Metal, mungkin idenya adalah membagi neuron cold ke CPU/Accelerate dan neuron hot ke GPU agar keduanya terpakai
      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

    • Sepertinya benar begitu. Mereka memang menyediakan skrip untuk menggabungkan bobot “Predictor” dengan model asli, tetapi dari halaman pertama GitHub tidak terlalu jelas bagaimana bobot itu dibuat
      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

    • Model llama2 yang bisa diunduh dan berkas convert.py juga layak disebut
  • Bagian 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

    • Dalam kasus ini, wajar membandingkannya dengan llama.cpp karena kodenya secara harfiah merupakan modifikasi dari llama.cpp. Ini bukan sekadar memakai library komputasi matriks ggml, melainkan fork yang menggunakan main.cpp dan kode llama.cpp umum apa adanya, jadi bisa dibandingkan secara langsung
      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... Ada juga penjelasan bahwa “peningkatan kecepatan 11x itu agak cherry-picking, karena kode GPU llama.cpp untuk Falcon 40B belum dioptimalkan dengan baik”
    • exllama tidak mendukung pembatasan tata bahasa, jadi terikat pada llama.cpp
      Selain itu, sepertinya exllama juga punya efek samping dari sisi konsistensi: https://www.reddit.com/r/LocalLLaMA/comments/17w57eu/llm_for...
    • Bukankah ExLlama khusus GPU? Peningkatan kecepatan ini ditujukan untuk kasus penggunaan pembagian GPU+CPU
    • Jika ingin merekomendasikan sesuatu yang lebih cepat dan bisa dipaketkan ke aplikasi untuk didistribusikan, saya penasaran apa yang paling baik
  • 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

    • Tidak terpikir ada hal yang benar-benar khusus 4090. Biasanya yang penting adalah VRAM, jadi kalau butuh 24GB maka 3090 juga bisa, dan dua kartu 12GB juga menjadi pilihan
      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