SparseGPT(LLMプルーニング)(すぱーすじーぴーてぃー えるえるえむぷるーにんぐ)
SparseGPTは2023年にETH Zurichが発表したGPT系大規模言語モデル向けの重み枝刈り(プルーニング)手法。再学習なしで50〜60%スパース化を達成し、OPT-175BやGPT-3レベルのモデルを100GPU時間以内に処理できる。スパース解法ベースの非構造化プルーニングで、重みの重要度評価にHessian行列の近似解を使う。
SparseGPTとは
SparseGPTは2023年にFrantar&AlistarらがETH Zurichで発表した、再学習(fine-tuning)不要でGPT系の大規模言語モデルを高速に枝刈りできるプルーニング手法です。OPT-175B・GPT-3(175B)・BLOOM-176Bといった1000億パラメータ超のモデルでも、A100 GPU 1枚あたり数時間〜100GPU時間以内で50〜60%のスパース化を達成します。
技術的な仕組み
SparseGPTの核心はHessian行列の近似逆行列を使った重要度評価と重み修正の同時実行です。通常のマグニチュードプルーニング(絶対値が小さい重みを削除)と異なり、削除した重みの影響を残留重みで補正するため、精度劣化が最小化されます。
処理フロー:
- 各レイヤーの重み行列に対してHessian近似を計算
- スパーシティターゲット(例:50%)に基づき重みを選択的にゼロ化
- 残留重みをOBQ(Optimal Brain Quantization)派生の補正式で更新
- 次レイヤーへ進む(レイヤーワイズ処理)
主要スペックと性能比較
| 手法 | 必要再学習 | スパーシティ | perplexity上昇 | 処理時間 |
|---|---|---|---|---|
| SparseGPT | 不要 | 50〜60% | 1〜3pt | OPT-175B: 約5時間(1xA100) |
| Magnitude Pruning | 不要 | 50% | 10〜20pt | 分単位 |
| LLM-Pruner | 要fine-tune | 20〜30% | 5〜10pt | 数日 |
| Sheared LLaMA | 要fine-tune | 50%以上 | 2pt未満 | 400GPU時間 |
| FLAP | 不要 | 20〜50% | 1〜5pt | 1〜10時間 |
2:4スパーシティとの組み合わせ
NVIDIA Ampere(A100/RTX 3090)以降のアーキテクチャには2:4構造化スパーシティハードウェアサポートがあり、4つの連続重みのうち2つをゼロにするパターンでTensorCoreが2倍の実効スループットを発揮します。SparseGPTは非構造化スパース化ですが、2:4制約を加えたモードも提供されており、精度とハードウェア効率を両立できます。
OPT-30B(2:4 SparseGPT適用後):
- Perplexity: 11.2 → 12.1(WikiText-2)
- GPU memory: 60GB → 30GB
- Throughput: 約1.7倍向上
実装と使い方
公式実装はGitHub IST-DASLab/sparsegpt(PyTorch)。OPT-125Mで50%スパース化する場合の基本コマンド:
python sparsegpt.py --model facebook/opt-125m --sparsity 0.5 --dataset c4
2:4構造化スパーシティを適用する場合:
python sparsegpt.py --model facebook/opt-6.7b --sparsity 0.5 --semi-sparse-gpu
Hugging Face Transformers形式のモデルに対応。--wbits 4でGPTQと組み合わせたスパース+量子化の同時適用も可能で、OPT-175Bをperplexityほぼ維持しながら約6倍の圧縮を達成した研究もあります。
活用場面と注意点
向いている用途:
- 超大規模モデルのresearch規模での推論コスト削減
- A100/H100クラスタでの2:4スパーシティ活用
- 量子化との組み合わせによる最大圧縮
注意点:
- 非構造化スパースはCPU/GPU実装によって実速度が変わる(sparsityがそのままlatency削減にならないことも)
- 構造化プルーニング(SliceGPT・Sheared LLaMA)と比べてdeployしやすさは劣る
- LLaMA-2 70Bクラスでもperplexityが70Bの非スパース版より2〜4ptは上がる
FAQ
Q: SparseGPTはLLaMAシリーズに使えますか? A: はい。公式リポジトリにはLLaMA-2/3対応コードが含まれており、LLaMA-2 7B〜70Bで50%スパース化の実績があります。
Q: スパース化後のモデルをそのままvLLMで動かせますか? A: 非構造化スパース化の場合、標準的なvLLMはスパース行列を密行列として扱うためメモリ削減効果は得られません。2:4スパーシティはNVIDIA提供のcutlassカーネル経由で高速化可能です。
Q: SparseGPTとGPTQを組み合わせるメリットは? A: 重みを50%ゼロ化(スパース化)+残留重みを4bit量子化することで、元の1/8〜1/10のメモリフットプリントを達成できます。ただしperplexity劣化は累積するため、タスクごとに評価が必要です。