1 ポイント 投稿者 GN⁺ 2023-12-21 | 1件のコメント | WhatsAppで共有
  • 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倍の高速化を示した

対応モデルとプラットフォーム

インストールと実行フロー

  • ビルド依存関係はCMake 3.17以上、Python 3.8以上、pip 19.3以上
  • NVIDIA GPUビルドは-DLLAMA_CUBLAS=ONオプションを使用する
  • AMD GPUビルドはROCm/HIPベースで-DLLAMA_HIPBLAS=ONAMDGPU_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-InstructSmallThinker-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件のコメント

 
GN⁺ 2023-12-21
Hacker News の意見
  • ほとんどの機械学習では hot/cold ニューロンという概念がないため理解に時間がかかり、論文でも直接定義していないようです。
    ReLU では出力が頻繁に 0 なら「cold」と見なせるので筋が通りますが、もともとの LLaMA は ReLU を使っていません。GitHub を見直すと、この方式は実際には ReLU モデルでしか動作せず、疎性を得るためにモデルを ReLU で「ファインチューニング」しているグループがあります: https://huggingface.co/SparseLLM
    そのため、インターネットでよく見つかる任意のモデルに適用できるわけではありませんが、進展自体は大きく見えます。今後は、より大きなモデルとあまり理想的でない活性化関数との妥協に移っていくかもしれませんし、米国・EU の規制が FLOPs やパラメータ数を基準にする場合、疎性をどう計算するのかも気になります。
    今後の研究としては、LLaMA の SwiGLU のような既存の活性化関数は維持しつつ、量子化を使って飽和領域を hot/cold ニューロンとして定義する方向が考えられそうです。

    • こうした規制がいつ、どのように生まれたのか気になります。開発しながら FLOPs/パラメータ数規制まで気にしなければならないというのは、かなり奇妙に感じます。
    • LLaMA 互換をうたう README で ReLU モデル専用という大きな但し書きを省いているのは、かなり大きな問題です。
    • https://huggingface.co/SparseLLM/ReluFalcon-40Bにも「We utilize PowerInfer for inference」と書かれています。
  • 検閲解除済みの Mixtral をこれで動かせるなら本当にうれしいです。RTX 4090 で 3 ビット超の量子化も可能になるかもしれません。

    • 検閲解除 LLM は通常、「ロボトミー化」されたりアラインメントされたりしたバージョンより、少なくともベンチマークでは良い結果が出る傾向があるのに、なぜ反対票を受けるのか気になります。
    • デモでは 24GB VRAM RTX 4090 でより大きなモデルを動かしています。Mixture of Experts に疎な活性化を実装するのは簡単ではないかもしれませんが、CPU だけで処理したり、はるかに安価な GPU 処理まで可能にしたりする、優れた方向性に見えます。
      Mixtral も技術的にはニューラルネットワークが制御する疎な活性化をすでに備えていますが、Inception ミームのように「さらに深く潜る」必要があります。
    • デュアル GPU は一般的なコンシューマー構成と見てもよさそうで、近いうちに対応されるといいですね。4 ビットならコンテキスト領域まで余裕を持って収められます。
      これ全体が llama.cpp のフォークなので、いつか上流プロジェクトに入ることを期待しています。
    • 良さそうです: https://www.youtube.com/watch?v=q2KpPUOsBCs
  • Mistral-7B に取り組んでいるとのことなので、私の GPU 専用 Mistral 実装は VRAM を 5GB ちょっと使います: https://github.com/Const-me/Cgml
    ほとんどのコンシューマー向け GPU でかなりよく動きますが、現時点では Windows のみ対応です。

    • かなり興味深そうです。Intel Core i7 ノート PC でも動くのか気になります。
    • ollama を使ってみるとよいです。llmcpp を使用し、必要なのは約 4GB だけです。
  • 本当に素晴らしいです。llama.cpp は愛されていますが、外付け GPU へのオフロード方式は、プロンプト処理を GPU で行い、モデルを途中で分割する比較的単純な方法です。
    活用できるほど 活性化の疎性が大きいという点が興味深く、従来の機械学習の観点では、メモリアクセスは非常にランダムだと見なされがちです。
    いつか cold ニューロンを内蔵 GPU にオフロードできるといいですね。Metal カーネルを検討している点も気になります。性能上の利点はハイブリッドメモリプールから来ると思っていたからです。そうでないなら旧型の AMD Mac にしか役立たないように思えますが、何か見落としているのかもしれません。

    • Apple Silicon と Metal については、cold ニューロンを CPU/Accelerate に、hot ニューロンを GPU に分けて両方を活用しようとしているのかもしれません。
      GPU と CPU 間のコピーがなく、すでに ユニファイドメモリを使っている状況なら速度向上は小さいかもしれませんが、チップのより多くの機能を同時に活用できるなら良さそうです。熱による性能低下を避けるには効率コアだけを使うのがよさそうで、ゲームモードもおそらくそのような方式だと思います。
  • この実装では、どの部分をシステムメモリに置き、どの部分を GPU メモリに置くかを決めるには、モデル自体についてある程度の知識が必要なようです。
    理想的にはこれを自動計算できるのか、あるいは今後のモデルがこうした 配置アルゴリズムを自動化できるインターフェースを提供するようになるのか気になります。モデルアーキテクチャごとにアルゴリズムを合わせる必要があるなら、このプロジェクトの保守はかなり大変になるでしょう。

    • おおむねその通りのようです。「Predictor」の重みを元のモデルと結合するスクリプトは提供されていますが、GitHub のトップページではその重みをどう作るのかが明確には見えません。
      10 倍の高速化は本当に印象的です。他のモデルでも再現できるなら、推論最適化のために hot/cold ニューロンを特定する工程が、モデル開発の一般的な一部になる可能性が高いです。
  • README で、自分で実験しない人にとって重要な部分はこのあたりです。PowerInfer は Linux の x86-64 CPU(AVX2)、Linux の x86-64 CPU と NVIDIA GPU、macOS の Apple M チップでテストされています。
    ただし Mac 向けの最適化はしていないため、現時点での性能向上は大きくないとのことです。近日追加予定の機能としては、Mistral-7B モデルと macOS 向けの Metal 疎推論バックエンドがあります。

    • ダウンロード可能な llama2 モデルと convert.py ファイルにも触れる価値があります。
  • 「入力全体で一貫して活性化される少数の hot ニューロンと、入力によって変わる多数の cold ニューロン」という分布を利用して GPU-CPU ハイブリッド推論エンジンを設計したという点が素晴らしいです。
    hot ニューロンは高速アクセスのためにあらかじめ GPU に載せ、cold ニューロンは CPU で計算することで、GPU メモリ要件と CPU-GPU 間のデータ転送を大幅に削減するという説明です。

  • みんなが llama.cpp と比較するのは、それが簡単な道だからです。llama.cpp は遅いということを全員が知っておくべきです。exllamav2 や他の最適化実装と比較すべきです

    • この場合は、コードが文字どおり llama.cpp を修正したものなので、llama.cpp と比較するのが妥当です。ggml 行列計算ライブラリだけを使っている程度ではなく、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 は文法制約をサポートしていないので、llama.cpp に縛られています
      さらに exllama には一貫性の面で副作用もあるようです: https://www.reddit.com/r/LocalLLaMA/comments/17w57eu/llm_for...
    • ExLlama は GPU 専用ではないですか? この高速化は GPU+CPU 分割のユースケース向けです
    • より速く、かつアプリにパッケージングして配布できるものを勧めるなら、何がよいのか気になります
  • 任意のモデルに対するスパース予測器ファイルを生成できるようになれば、本当に素晴らしいでしょう。現時点では、彼らが処理した4つのモデルだけが対象のようです
    ページとコードを見る限り、そのステップを実行するツールは含まれていないように見えます。ひとまず少し待つつもりで、これらの機能が最終的に llama.cpp のオプションとして再びマージされるといいですね。これは ggml 行列ライブラリだけを使っているのではなく、通常の llama.cpp コードベースです

  • 「コンシューマー向け GPU」という表現だけを見ると、複数のモデルで動かせそうに見えますが、こうした記事によくあるように、実際には RTX 4090 専用なのか気になります

    • 4090 専用という点は特に思い当たりません。普通は重要なのは VRAM なので、24GB が必要なら 3090 でも可能ですし、12GB のカード2枚も選択肢になります
      この手法自体は、小さな GPU でより大きなモデルを動かせるようにする一般的な方法で、CPU オフロード性能を大きく改善します。4090 で最大モデルを fp16 で動かした事例だけでなく、2080Ti で同じモデルを4ビット量子化で動かしても、LLaMA 基準で約3倍の高速化が見られました
      そのためデスクトップでは 33B モデルが新たなデフォルトになり、単体の 3090 や 4090 だけでも 70B をリアルタイムのチャット速度で動かせるようになる可能性が高そうです