重みプルーニング(LLM)(オモミプルーニングエルエルエム)
LLMのニューラルネットワーク重みのうち絶対値が小さいものをゼロに設定し、モデルを小型化・高速化する手法。
重みプルーニング(LLM)
重みプルーニング(Weight Pruning)はニューラルネットワークの重み行列において値が小さい(重要度が低い)パラメータをゼロに設定し、モデルのスパース化を通じてサイズ削減と推論高速化を実現する技術です。2023年のSparseGPTとWandaにより大規模言語モデルへの実用性が実証されました。
プルーニングの分類
非構造化プルーニング(Unstructured Pruning)
個々の重みを独立にゼロ化する最も細粒度のアプローチ。高い圧縮率を達成できますが、スパースパターンが不規則なためGPUの行列演算には非効率。汎用スパースライブラリ(cuSPARSELt)が必要。
構造化プルーニング(Structured Pruning)
フィルタ・ヘッド・レイヤー単位でゼロ化。スパースパターンが規則的なため標準的なDNNアクセラレータで効率的に推論可能。精度劣化は非構造化より大きい傾向。
半構造化プルーニング(2:4 Sparsity)
4要素のブロックごとに2要素をゼロ化するNVIDIA Ampere以降のアーキテクチャ向け規格。50%スパース性を保ちながらTensorCoreの2倍スループットを実現。
SparseGPT(2023)
Elias Frantar & Dan Alistarh(ETH Zurich)が提案した1ショットプルーニング手法。ヘッセ行列の逆行列を近似計算することで、再学習なしで大規模LLMを50〜60%スパース化。OPT-175Bで50%スパース化でほぼ精度変化なし、70%スパース化でもわずかなPerplexity上昇にとどまりました。
Wanda(2023)
Mingjie Sun ら(CMU)が提案。重みの重要度を|重み| × ||入力アクティベーション||で計算し、上位重みを残す。ヘッセ行列計算が不要でSparseGPTより計算コストが1/10以下。
NVIDIA 2:4 Sparsity
Ampere/Hopper GPU向けの半構造化スパース形式。カーネルは圧縮行列を扱うように設計されており、FP16行列積に対して理論上2倍の演算スループット。
プルーニング後のファインチューニング
高スパース比のモデルは精度回復のため少量のキャリブレーションデータでのファインチューニングが有効。LoRAと組み合わせたSparseLoRA(2024)が特に効果的で、プルーニング後に数時間のQLoRAで精度を大幅回復できます。
まとめ
- 非構造化/構造化/2:4半構造化の3種類で用途が異なる
- SparseGPTは再学習不要で50%スパース化を実現
- Wandaは計算コスト1/10でSparseGPT相当の品質
- NVIDIA 2:4はハードウェアサポートにより実効2倍高速化
- プルーニング後のLoRAファインチューニングで精度回復が可能