LLM構造的プルーニング(エルエルエムコウゾウテキプルーニング)
LLMのアテンションヘッド・FFNニューロン・レイヤー全体などの構造単位を除去してモデルを軽量化する手法。非構造的プルーニングと異なりGPU推論で直接高速化が得られる。
LLM構造的プルーニングとは
LLM構造的プルーニング(Structured Pruning)は、大規模言語モデルの構造単位(アテンションヘッド・FFNニューロン・レイヤー全体など)を丸ごと除去してモデルを軽量化する手法です。2023年以降、LLaMAなどのオープンソースLLMに対して活発に研究されています。
非構造的プルーニングとの違い
非構造的プルーニング(Unstructured Pruning)は個々の重みをゼロに設定してスパースな行列を作りますが、スパース行列の高速演算には専用ハードウェア(SparseCore等)が必要です。
構造的プルーニングでは構造単位を完全に除去するため、除去後も密な行列演算(Dense Matrix Multiplication)で動作します。そのため:
- 標準GPUで直接高速化
- ONNX/TensorRTへのエクスポートが容易
- レイテンシ削減が測定・予測しやすい
プルーニング対象の構造単位
1. アテンションヘッドプルーニング
マルチヘッドアテンションの各ヘッドの重要度を評価し、重要度が低いヘッドを除去。
- 重要度指標: テイラー展開近似(勾配×重みの絶対値積)
- LLaMA-7B(32ヘッド)→ 24ヘッドで約1.2倍高速化
2. FFNニューロンプルーニング
Feed-Forward Networkの中間次元を削減。
- 通常は埋め込み次元の4倍(LLaMA-7B: 4096→16384)を2-3倍に削減
- ActivationベースPruning(L1ノルム・勾配利用)
3. レイヤープルーニング
Transformerブロック全体を除去(→ llm-layer-dropping参照)
実装ツール
- LLaMA Pruner(2023): LLaMA向け依存グラフ自動解析+プルーニング
- Wanda(2023): 重みとアクティベーション積の大きさでpruning
- SliceGPT(2024): PCA投影でスライスベースの構造削減
- FLAP(2024): アクティベーション分散を利用した構造プルーニング
プルーニング後の回復
構造プルーニング後は性能が低下するため、通常はファインチューニング(QLoRA等)で回復が必要です。プルーニング率20-30%なら少量データ(数万件)のQLoRAで性能の大半を回復できます。
実用例
LLaMA-7Bに対してLLaMA Prunerを適用し20%削減した結果:
- パラメータ: 7B → 5.5B
- WikiText-2 Perplexity: 7.1 → 8.3(+1.2ポイント)
- スループット: 1.3倍向上(A100 GPU)
設計上のトレードオフ
構造的プルーニングは推論ハードウェアを選ばない点で実用性が高い一方、プルーニング率を高くすると性能劣化が顕著になります。一般的に20-30%のプルーニングが性能とコストのバランスが取れた実用域とされています。