蒸留後プルーニング(ジョウリュウゴプルーニング)
蒸留で圧縮したモデルに対してさらに不要なパラメータを除去(プルーニング)する複合圧縮手法。蒸留とプルーニングの相乗効果で、単独手法より高い圧縮率と精度を両立する。
蒸留後プルーニングとは
蒸留後プルーニング(Pruning after Distillation / Distillation-then-Pruning)は、モデル蒸留とプルーニング(枝刈り)を組み合わせた複合的なモデル圧縮パイプラインです。まず大規模な教師モデルから中規模の生徒モデルへ蒸留し、次に生徒モデルから重要度の低いパラメータを除去(プルーニング)します。さらに量子化を加えた3段階圧縮も一般的で、70Bモデルを実質1-2B相当のコストで推論可能にすることもあります。
なぜ組み合わせるのか
蒸留とプルーニングは異なる角度からモデルを圧縮します。蒸留はアーキテクチャレベルの圧縮(層数・ヘッド数の削減)、プルーニングはパラメータレベルの圧縮(個々の重みの除去)です。両者を組み合わせることで、単独手法では達成できない圧縮率と精度のバランスを実現します。
| 圧縮手法 | 圧縮率 | 精度維持 | 組み合わせ効果 |
|---|---|---|---|
| 蒸留のみ | 5-10× | 85-95% | 基準 |
| プルーニングのみ | 2-5× | 80-90% | 基準 |
| 蒸留→プルーニング | 10-50× | 80-90% | 相乗効果 |
| 蒸留→プルーニング→量子化 | 50-200× | 75-85% | 最大圧縮 |
プルーニングの種類
非構造化プルーニング(Unstructured Pruning)
個々の重みパラメータを独立にゼロ化します。最も柔軟で高い圧縮率を達成できますが、スパースな行列計算には専用ハードウェア(NVIDIA A100 のスパーステンソルコア等)が必要です。
構造化プルーニング(Structured Pruning)
ニューロン単位、アテンションヘッド単位、または層全体を除去します。除去後のモデルは通常の密行列として計算できるため、特殊ハードウェアが不要です。LLM では不要なアテンションヘッドの除去が主流です。
半構造化プルーニング(Semi-structured, N:M Sparsity)
N個のパラメータのうちM個をゼロにする規則的なスパーシティです。NVIDIA の 2:4 スパーシティ(4つの重みのうち2つをゼロに)は Ampere 以降のGPUで高速に計算でき、理論上2倍の高速化が得られます。
蒸留後プルーニングのワークフロー
- 教師モデルの準備: 大規模な事前学習済みモデル(例: Llama 2 70B)
- 蒸留: 教師の知識を中規模モデル(例: 7B)に転移
- 重要度評価: 蒸留済みモデルの各パラメータの重要度を算出(Magnitude, Fisher Information, Taylor Expansion等)
- プルーニング: 重要度の低いパラメータをゼロ化またはヘッドを除去
- ファインチューニング: プルーニングによる精度低下を回復するための追加学習
- (オプション)量子化: INT8/INT4への量子化でさらに圧縮
具体的な圧縮パイプライン例
LLM向け: Llama 2 70B → 実用デプロイ
- Step 1: 70B → 7B に蒸留(10× 圧縮)
- Step 2: 7B を 50% 非構造化プルーニング(実効 3.5B 相当)
- Step 3: INT4 量子化(メモリ 4× 圧縮)
- 結果: 70B(140GB FP16)→ 約1.75GB(80× 圧縮)、RTX 4060で推論可能
BERT向け: BERT-large → モバイル
- Step 1: BERT-large → DistilBERT に蒸留(2.5× 圧縮)
- Step 2: 2:4 半構造化プルーニング(2× 高速化)
- Step 3: INT8 量子化(2× メモリ削減)
- 結果: 1.3GB → 約32MB、スマートフォンCPUで20ms推論
研究動向
Sheared LLaMA(2023)
構造化プルーニングと蒸留を同時に行う「Shearing」手法で、LLaMA 2 7B から 1.3B と 2.7B のモデルを生成しました。同サイズの一から学習したモデルより高性能で、蒸留+プルーニングの有効性を実証しました。
SliceGPT(2024)
重み行列を直交変換で回転させた後に列を削除する構造化プルーニング手法です。蒸留済みモデルに適用することで、追加のファインチューニングなしで25%のパラメータ削減と最小限の精度低下を達成しました。
FAQ
Q1: 蒸留してからプルーニングする順序は逆でも良いですか?
A1: プルーニング→蒸留の順序も研究されていますが、蒸留→プルーニングの方が一般的に良い結果を出します。蒸留済みモデルは教師の知識が凝縮されており、プルーニング後のファインチューニングで効率的に精度を回復できるためです。
Q2: どのくらいの精度低下を許容すべきですか?
A2: ユースケース次第ですが、一般的には教師モデル比で5-15%の精度低下が許容範囲です。チャットボットなど主観的なタスクでは10-15%の低下でもユーザー体験に影響しにくく、分類やNERなど精密さが求められるタスクでは5%以内に抑えるべきです。
Q3: プルーニング後のファインチューニングはどのくらい必要ですか?
A3: 元の学習データの1-10%程度のデータで、数千ステップのファインチューニングが典型的です。プルーニング率が高いほど(50%以上)回復に必要なデータとステップ数が増えます。SparseGPTのようにワンショット(追加学習なし)でプルーニングできる手法も登場しています。