デプスプルーニング / ShortGPT(デプスプルーニング)
LLMの一部Transformerレイヤーを除去することでモデルを圧縮する手法。ShortGPTはレイヤー重要度スコアを用い、冗長レイヤーを削除して推論高速化・メモリ削減を達成する。
デプスプルーニング / ShortGPT とは
デプスプルーニング(Depth Pruning)は、大規模言語モデル(LLM)のTransformerレイヤーを選択的に除去することでモデルサイズを圧縮する技術。2024年登場のShortGPTはこの手法の代表的実装であり、各レイヤーの「Block Influence(BI)スコア」を算出して寄与の低いレイヤーを削除、LLaMA-2 13Bで約25%のレイヤー削減を達成しながら多くのベンチマークで性能をほぼ維持した。
なぜデプスプルーニングが注目されるのか
従来のモデル圧縮は量子化(精度削減)が主流だったが、デプスプルーニングはレイヤー数そのものを削減するため以下のメリットがある:
- 推論レイテンシ削減: レイヤー数比例で forward pass が短縮
- KVキャッシュ削減: レイヤー数減少 → 必要なKVキャッシュメモリが線形に減少
- 量子化との直交性: GPTQ/AWQと組み合わせて更なる圧縮が可能
- ファインチューニング再利用: プルーニング後にLoRAで能力回復可能
主要な手法比較
| 手法 | 発表年 | 削減軸 | 特徴 | 対象モデル |
|---|---|---|---|---|
| ShortGPT | 2024 | レイヤー除去 | BIスコアで重要度評価 | LLaMA-2, Mistral |
| SliceGPT | 2024 | 行/列次元 | PCAで次元削減 | LLaMA-2, Phi-2 |
| LaCo | 2024 | レイヤーマージ | 隣接レイヤーを統合 | LLaMA系 |
| Angular Pruning | 2024 | アテンションヘッド | 角度類似度で除去 | OPT, LLaMA |
| DepthPrune (2025) | 2025 | 動的レイヤー | 入力依存で実行 | Qwen2.5, Gemma2 |
ShortGPTの仕組み
Block Influence (BI) スコア
各Transformerブロックへの入力ベクトルと出力ベクトルのコサイン類似度(1 - cosine similarity)をBIスコアとして定義。BI≈0のブロックは「入力をほぼ変換していない」= 冗長と判定。
# BIスコア計算の概念コード
import torch
def compute_bi_score(layer, hidden_states, attention_mask):
with torch.no_grad():
input_norm = hidden_states / hidden_states.norm(dim=-1, keepdim=True)
output = layer(hidden_states, attention_mask=attention_mask)[0]
output_norm = output / output.norm(dim=-1, keepdim=True)
# コサイン距離 (0=変化なし=冗長)
bi = 1.0 - (input_norm * output_norm).sum(dim=-1).mean().item()
return bi
プルーニング手順
- キャリブレーションデータ(代表的なテキスト数百件)で全レイヤーのBIスコアを計算
- BIスコア昇順にソート → 下位N%のレイヤーを候補リストアップ
- 連続レイヤーの削除は避ける(残差接続の整合性維持)
- 削除後にLoRAなどで1-2%の精度を回復
実装・ライブラリ
| ライブラリ | 対応手法 | 特徴 |
|---|---|---|
| llm-compressor (vLLM) | SliceGPT, DepthPruning | vLLM連携、エンタープライズ向け |
| transformers + PEFT | ShortGPT互換 | HuggingFace統合 |
| LLMShearing | 構造化プルーニング全般 | Stanford製、再トレーニング込み |
| Torch FX | カスタム実装 | 低レベル制御 |
ベンチマーク: LLaMA-2 13B での比較
| 手法 | 削減率 | MMLU | HellaSwag | 推論速度 | メモリ |
|---|---|---|---|---|---|
| 元モデル | 0% | 55.4 | 82.1 | 1.0x | 26GB |
| ShortGPT 20% | 20% | 52.1 | 79.3 | 1.18x | 21GB |
| ShortGPT 25% | 25% | 50.8 | 77.6 | 1.24x | 20GB |
| SliceGPT 20% | 20% | 51.6 | 78.9 | 1.20x | 20GB |
| ShortGPT+LoRA | 25% | 54.2 | 80.7 | 1.24x | 21GB |
量子化との組み合わせ(2025年ベストプラクティス)
デプスプルーニング単体でも有効だが、量子化と組み合わせると大幅な圧縮率を達成:
- DepthPruning 25% + GPTQ INT4 → 元モデルの約15%サイズ
- DepthPruning 20% + AWQ INT4 → 推論速度 2.5-3.0x 向上
- Speculative Decoding との組み合わせ → Draft ModelにDepthPrunedモデルを使用
選択のポイント
デプスプルーニングが有効なケース:
- KVキャッシュを大量に使うlong context推論
- エッジデバイス(VRAM 8-16GB)でのローカル実行
- 量子化だけでは精度劣化が大きい場合の補完
量子化を優先すべきケース:
- レイヤー削減による精度劣化を許容できない高精度タスク
- 再トレーニングコストを避けたい場合
よくある質問(FAQ)
Q1: ShortGPTとSliceGPTはどう違うのか? A: ShortGPTはレイヤーごと除去(depth方向)し、SliceGPTはPCAで各レイヤーのhidden dim幅を削減(width方向)。ShortGPTは実装が単純で高速だが、SliceGPTの方が精度劣化が小さい傾向がある。
Q2: 削除したレイヤーを回復することはできるか? A: 一度除去したレイヤーは物理的に削除されるため回復不可。ただしLoRAファインチューニングで残りレイヤーを調整し、タスク精度を元モデルの95-98%まで回復できる。
Q3: 量子化と組み合わせた場合のリスクは? A: デプスプルーニング後に量子化すると誤差が累積しやすい。推奨順序は「量子化 → デプスプルーニング → LoRA回復」の順で実施すると安定する(2025年実験知見)。
まとめ
- デプスプルーニングはTransformerレイヤー除去によるLLM圧縮手法
- ShortGPT/SliceGPT/LaCoが2024年の代表実装
- 量子化と直交・組み合わせで大幅な圧縮率を達成可能
- KVキャッシュ削減効果が特に顕著でlong context推論に有効
- LoRAによる精度回復を組み合わせることで実用レベルを維持