AI・機械学習
上級

蒸留後プルーニング(ジョウリュウゴプルーニング)

蒸留で圧縮したモデルに対してさらに不要なパラメータを除去(プルーニング)する複合圧縮手法。蒸留とプルーニングの相乗効果で、単独手法より高い圧縮率と精度を両立する。

0 回閲覧
0 いいね

蒸留後プルーニングとは

蒸留後プルーニング(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倍の高速化が得られます。

蒸留後プルーニングのワークフロー

  1. 教師モデルの準備: 大規模な事前学習済みモデル(例: Llama 2 70B)
  2. 蒸留: 教師の知識を中規模モデル(例: 7B)に転移
  3. 重要度評価: 蒸留済みモデルの各パラメータの重要度を算出(Magnitude, Fisher Information, Taylor Expansion等)
  4. プルーニング: 重要度の低いパラメータをゼロ化またはヘッドを除去
  5. ファインチューニング: プルーニングによる精度低下を回復するための追加学習
  6. (オプション)量子化: 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のようにワンショット(追加学習なし)でプルーニングできる手法も登場しています。