コンシューマ向けGPUを搭載したPCでの高速大規模言語モデルサービング
(github.com/SJTU-IPADS)- PowerInferは、単一のコンシューマ向けGPUを搭載した個人向けPCでLLMをローカルサービングするためのCPU/GPUハイブリッド推論エンジン
- 中核設計は、LLM推論の活性化の局所性を利用し、頻繁に活性化されるhotニューロンはGPUに事前配置し、入力ごとに変化するcoldニューロンはCPUで計算する方式
- 評価では、PowerInferは単一のRTX 4090 GPUでOPT-175Bを含む複数のLLMにおいて平均13.20 tokens/s、最大29.08 tokens/sを達成し、A100比で18%低い水準だと述べている
- llama.cppと比べると、Falcon(ReLU)-40B-FP16デモではRTX 4090 24GB基準で11倍の高速化、評価では最大11.69倍の向上を示し、モデル精度は維持されると説明している
- 対応範囲はReLU/ReGLU/Squared ReLU活性化関数モデルが中心で、Mistral・original Llama・Qwenなどは現時点ではサポートしていないという制約がある
PowerInferが解決しようとしている問題
- PowerInferは、ローカルデバイス上でLLMを高速に実行するためのCPU/GPU推論エンジン
- 単一のコンシューマ向けGPUを搭載したPCを対象とし、低レイテンシなLLM推論とサービングを目標とする
- 設計の核心は、LLM推論におけるニューロン活性化がべき乗則分布を示す点にある
- 一部のhotニューロンは入力全体にわたって一貫して活性化される
- 多数のcoldニューロンは特定の入力に応じて変化する
CPU/GPUハイブリッド推論方式
- PowerInferはhotニューロンをGPUに事前ロードして高速にアクセスし、coldニューロンはCPUで計算する
- この方式は、GPUメモリ要求量とCPU-GPU間データ転送の削減に重点を置く
- さらに適応型予測器とニューロン認識疎演算子を統合し、ニューロン活性化と計算スパース性を最適化する
- CPU-GPUハイブリッド推論では、すべてのdense activation blockを自動的にGPUへオフロードし、その後、可能であればFFNを分割してGPUへオフロードする
性能評価とデモ
- 単一のRTX 4090 GPUで、OPT-175Bを含む複数のLLMにおいて平均13.20 tokens/s、最大29.08 tokens/sを達成
- この結果は、最上位サーバー向けA100 GPUと比べて18%低い水準だと説明している
- llama.cpp比で最大11.69倍高速で、モデル精度は維持されると述べている
- デモでは、単一のRTX 4090 24GBでFalcon(ReLU)-40B-FP16を実行し、llama.cpp比で11倍の高速化を示した
- PowerInferとllama.cppはいずれも同じハードウェアで実行され、RTX 4090のVRAMを完全に使用した
- 別の評価では、RTX 4090 24GBとFP16 ReLUモデル、入力長64の条件で、Falcon 40Bは最大11倍、Llama 2 70Bは最大3倍の高速化を示した
- RTX 2080Ti 11GBとINT4 ReLUモデル、入力長8の条件では、Falcon 40Bが最大8倍、Llama 2 70Bが最大3倍の高速化を示した
対応モデルとプラットフォーム
- 現在PowerInferで利用できるモデルは、Falcon-40B、Llama2 family、ProSparse Llama2 family、Bamboo-7B
- 対応モデルの重みはPowerInfer GGUF形式で提供され、GGUFベースにLLM重みとpredictor重みをあわせて含む
- Hugging Faceで提供されているPowerInfer GGUFモデルには以下が含まれる
- 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
- テスト済みプラットフォームは以下のとおり
- LinuxのAVX2対応x86-64 CPU、NVIDIA GPUの有無を問わず対応
- WindowsのAVX2対応x86-64 CPU、NVIDIA GPUの有無を問わず対応
- macOSのApple MチップCPU-only環境
- Macは最適化対象ではないため、現時点では性能改善は大きくないと述べている
- macOS向けsparse inference用のMetalバックエンドを予定している
インストールと実行フロー
- ビルド依存関係はCMake 3.17以上、Python 3.8以上、pip 19.3以上
- NVIDIA GPUビルドは
-DLLAMA_CUBLAS=ONオプションを使用する - AMD GPUビルドはROCm/HIPベースで
-DLLAMA_HIPBLAS=ONとAMDGPU_TARGETSを指定する - CPU-onlyビルドも可能
- 基本的な推論コマンドは、
main実行ファイルにモデルパス、出力トークン数、スレッド数、プロンプトを指定する方式 - GPU VRAM使用量の上限は
--vram-budgetオプションで指定する - PowerInferのserving、perplexity evaluation、batched generationはllama.cppと同様のコマンドをサポートするが、
-ngl引数はPowerInferでは--vram-budgetに置き換えられる
量子化と互換性
- PowerInferはINT4
Q4_0モデル量子化を最適化してサポートする quantize実行ファイルでPowerInfer GGUFモデルをQ4_0形式に量子化できる- dense inference modeは限定的にサポートされ、llama.cppに近い形で利用できる
- dense inference modeはすべてのモデル向けの互換モードではない
- ReluLLaMAとProSparseモデルは活性化関数が変更されている
- Bambooモデルはモデルアーキテクチャが変更されている
- llama.cppのモデル重みでも推論互換性のために実行できるが、性能向上はないと述べている
制約とFAQ
- 現在の対応モデルはReLU/ReGLU/Squared ReLU活性化関数を使うモデルに限定される
- Mistral、original Llama、Qwenなどは現時点ではサポートしていない
CUDA_ERROR_OUT_OF_MEMORYが発生した場合は、--reset-gpu-indexでGPUインデックスを再作成できる- 現在の実装では、モデルオフロードが期待どおり正確でない場合があり、
--vram-budgetの値をやや下げるか、--disable-gpu-indexでFFNオフロードを無効化できる - 現在のReLUモデル、特に70Bモデルで性能指標が低下しているのは、一般的なLLM学習に必要な約2Tトークンではなく、5Bトークンのみでファインチューニングしたためだと説明している
最近のアップデートと計画
- 2026年1月5日にTiiny AI Pocket Labを公開し、GPT-OSS-120B int4をローカルで20 tokens/sで実行すると述べている
- 2025年7月27日にSmallThinker-21BA3B-InstructとSmallThinker-4BA0.6B-Instructを公開
- 2024年6月11日にスマートフォン向け最適化推論フレームワークPowerInfer-2を紹介し、TurboSparse-Mixtral-47Bで11.68 tokens/sを達成すると述べている
- 同日、Turbo Sparseを公開し、MistralとMixtralモデルを約90%のスパース性にし、Mixtral級モデルでは4Bパラメータのみを活性化すると説明している
- 完了済み項目には、PowerInferコアコード公開、Llama-2とFalcon-40B対応、Bamboo-7B対応、Windows対応、perplexity evaluationコード公開、FFNオンライン分割対応が含まれる
- 残りの項目には、text-generation-webui対応、Mac向けMetal対応、OPTモデルコード公開、predictor trainingコード公開、Multi-GPU対応が含まれる
論文とベースプロジェクト
- より詳しい技術内容はPowerInfer論文にまとめられている
- PowerInferはggmlの修正可能な演算子ライブラリとllama.cppの実行ランタイムを使用している
- ReLUベースのsparseモデル対応にはTHUNLPへの言及がある
- PowerInferはDeja Vu研究から着想を得たと述べている
1件のコメント
Hacker News の意見
ほとんどの機械学習では hot/cold ニューロンという概念がないため理解に時間がかかり、論文でも直接定義していないようです。
ReLU では出力が頻繁に 0 なら「cold」と見なせるので筋が通りますが、もともとの LLaMA は ReLU を使っていません。GitHub を見直すと、この方式は実際には ReLU モデルでしか動作せず、疎性を得るためにモデルを ReLU で「ファインチューニング」しているグループがあります: https://huggingface.co/SparseLLM
そのため、インターネットでよく見つかる任意のモデルに適用できるわけではありませんが、進展自体は大きく見えます。今後は、より大きなモデルとあまり理想的でない活性化関数との妥協に移っていくかもしれませんし、米国・EU の規制が FLOPs やパラメータ数を基準にする場合、疎性をどう計算するのかも気になります。
今後の研究としては、LLaMA の SwiGLU のような既存の活性化関数は維持しつつ、量子化を使って飽和領域を hot/cold ニューロンとして定義する方向が考えられそうです。
検閲解除済みの Mixtral をこれで動かせるなら本当にうれしいです。RTX 4090 で 3 ビット超の量子化も可能になるかもしれません。
Mixtral も技術的にはニューラルネットワークが制御する疎な活性化をすでに備えていますが、Inception ミームのように「さらに深く潜る」必要があります。
これ全体が llama.cpp のフォークなので、いつか上流プロジェクトに入ることを期待しています。
Mistral-7B に取り組んでいるとのことなので、私の GPU 専用 Mistral 実装は VRAM を 5GB ちょっと使います: https://github.com/Const-me/Cgml
ほとんどのコンシューマー向け GPU でかなりよく動きますが、現時点では Windows のみ対応です。
本当に素晴らしいです。llama.cpp は愛されていますが、外付け GPU へのオフロード方式は、プロンプト処理を GPU で行い、モデルを途中で分割する比較的単純な方法です。
活用できるほど 活性化の疎性が大きいという点が興味深く、従来の機械学習の観点では、メモリアクセスは非常にランダムだと見なされがちです。
いつか cold ニューロンを内蔵 GPU にオフロードできるといいですね。Metal カーネルを検討している点も気になります。性能上の利点はハイブリッドメモリプールから来ると思っていたからです。そうでないなら旧型の AMD Mac にしか役立たないように思えますが、何か見落としているのかもしれません。
GPU と CPU 間のコピーがなく、すでに ユニファイドメモリを使っている状況なら速度向上は小さいかもしれませんが、チップのより多くの機能を同時に活用できるなら良さそうです。熱による性能低下を避けるには効率コアだけを使うのがよさそうで、ゲームモードもおそらくそのような方式だと思います。
この実装では、どの部分をシステムメモリに置き、どの部分を GPU メモリに置くかを決めるには、モデル自体についてある程度の知識が必要なようです。
理想的にはこれを自動計算できるのか、あるいは今後のモデルがこうした 配置アルゴリズムを自動化できるインターフェースを提供するようになるのか気になります。モデルアーキテクチャごとにアルゴリズムを合わせる必要があるなら、このプロジェクトの保守はかなり大変になるでしょう。
10 倍の高速化は本当に印象的です。他のモデルでも再現できるなら、推論最適化のために hot/cold ニューロンを特定する工程が、モデル開発の一般的な一部になる可能性が高いです。
README で、自分で実験しない人にとって重要な部分はこのあたりです。PowerInfer は Linux の x86-64 CPU(AVX2)、Linux の x86-64 CPU と NVIDIA GPU、macOS の Apple M チップでテストされています。
ただし Mac 向けの最適化はしていないため、現時点での性能向上は大きくないとのことです。近日追加予定の機能としては、Mistral-7B モデルと macOS 向けの Metal 疎推論バックエンドがあります。
convert.pyファイルにも触れる価値があります。「入力全体で一貫して活性化される少数の hot ニューロンと、入力によって変わる多数の cold ニューロン」という分布を利用して GPU-CPU ハイブリッド推論エンジンを設計したという点が素晴らしいです。
hot ニューロンは高速アクセスのためにあらかじめ GPU に載せ、cold ニューロンは CPU で計算することで、GPU メモリ要件と CPU-GPU 間のデータ転送を大幅に削減するという説明です。
みんなが llama.cpp と比較するのは、それが簡単な道だからです。llama.cpp は遅いということを全員が知っておくべきです。exllamav2 や他の最適化実装と比較すべきです
main.cppと通常の llama.cpp のコードをそのまま使うフォークなので、直接比較できます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... 「11倍の高速化はややチェリーピックで、Falcon 40B 向けの llama.cpp GPU コードがあまり最適化されていないため」という説明もあります
さらに exllama には一貫性の面で副作用もあるようです: https://www.reddit.com/r/LocalLLaMA/comments/17w57eu/llm_for...
任意のモデルに対するスパース予測器ファイルを生成できるようになれば、本当に素晴らしいでしょう。現時点では、彼らが処理した4つのモデルだけが対象のようです
ページとコードを見る限り、そのステップを実行するツールは含まれていないように見えます。ひとまず少し待つつもりで、これらの機能が最終的に llama.cpp のオプションとして再びマージされるといいですね。これは ggml 行列ライブラリだけを使っているのではなく、通常の llama.cpp コードベースです
「コンシューマー向け GPU」という表現だけを見ると、複数のモデルで動かせそうに見えますが、こうした記事によくあるように、実際には RTX 4090 専用なのか気になります
この手法自体は、小さな GPU でより大きなモデルを動かせるようにする一般的な方法で、CPU オフロード性能を大きく改善します。4090 で最大モデルを fp16 で動かした事例だけでなく、2080Ti で同じモデルを4ビット量子化で動かしても、LLaMA 基準で約3倍の高速化が見られました
そのためデスクトップでは 33B モデルが新たなデフォルトになり、単体の 3090 や 4090 だけでも 70B をリアルタイムのチャット速度で動かせるようになる可能性が高そうです