SmoothQuant: 大規模な言語モデルの正確かつ効率的なポストトレーニング量子化

大規模モデルのトレーニング後量子化 (PTQ) に関する記事ですが、記事の内容を簡単にまとめておきます。
論文アドレス: https://arxiv.org/abs/2211.10438
Github: https://github.com/mit-han-lab/smoothquant

1. 定量的な概念

まず、3 つの定量化方法を紹介します。

  1. テンソルごとの量子化: 各テンソルは同じステップ サイズを使用します
  2. トークンごとの量子化: テンソル内の同じトークンは同じステップ サイズを使用します
  3. チャネルごとの量子化: テンソルの同じチャネルは同じステップ サイズを使用します。
    ここに画像の説明を挿入
  • 結果から、チャネルごとの量子化のみが高い精度を維持します。
  • ただし、チャネルごとの量子化は、ハードウェアで高速化された GEMM カーネルにうまくマッピングされないため (ハードウェアが効率的に実行できないため、計算時間が増加します)、以前の研究ではアクティベーションにトークンごとの量子化を採用していました。
    ここに画像の説明を挿入

2. 動機とアイデア

ここに画像の説明を挿入
この図は、LLM 定量化におけるいくつかの困難を明確に示しています。

  1. 活性化層は重みよりも定量化が困難ですが、通常、重みの分散は小さく、定量化が容易です。
  2. アクティベーション層の外れ値が大部分と大きく異なるため、有効な量子化レベルが低くなります。
  3. 活性化層の外れ値は、(各トークン内で) 連続的に出現し、各チャネルでの分散が小さいという特徴があるため、チャネルごとの量子化効果はトークンごとの量子化よりも優れています。

したがって、著者の中心的なアイデアは次のとおりです。

  • 量子化の難易度を活性化層から重み層に移行します。つまり、活性化層を縮小し、重み層を拡大し、線形層の数学的等価性を維持します。これにより、活性化層の分散が減少し、重みの分散が増加します。
    ここに画像の説明を挿入

3. 具体的な方法

  • 活性化層の各チャネルの最大振幅が同じレベルに達するようにするには、sj = max ( ∣ X j ∣ ) , j = 1 , 2 , ... , s_j=max(|X_j|), j とします。 =1,2,...,sj=最大x ( Xj) j=1 2 ... C i C_iC私はアクティベーションレイヤーの各チャンネルを滑らかにします。
  • ただし、これでは重みの分散分布が考慮されていないため、重みの量子化が困難になるため、平滑化係数 s が活性化層と重みの両方を考慮するようにハイパーパラメータ移行強度 α が導入されます。
    ここに画像の説明を挿入ここに画像の説明を挿入

ハイパーパラメータ設計

  • 著者は、アブレーション実験を通じて、より小さな重みと活性化量子化誤差を取得し、量子化後のモデルのパフォーマンスを維持するには、α = 0.4 ~ 0.6 であることを発見しました。
  • 通常は 0.5 に設定されます (図 5 は、SmoothQuant の計算プロセスを導入した α =0.5 の例です)。アクティベーション層でより重要な外れ値を持つ大規模なモデル (GLM-130B など) の場合、より大きな α を設定する必要があります。 0.75 などの設定。
    ここに画像の説明を挿入

4. 結果

  • SmoothQuant はアクティベーション層と重みを平滑化した後、テンソルごとまたはトークンごとの量子化を使用して W8A8 を実現します。
  • さまざまな定量化手法に従って、著者は 3 つの戦略 O1、O2、および O3 を提案し、計算遅延は順番に減少します。他の量子化方式と比較して、高い精度を維持することができます。
  • さらに、著者は SmoothQuant を PyTorch および FasterTransformer に統合して、最大 1.56 倍の推論加速を実現し、メモリ使用量を半分にしました。モデルが大きくなるほど、加速効果はより顕著になります。

(下の表は3つの表を統合したものです)
ここに画像の説明を挿入

5. アプリケーション

Transformer に SmoothQuant を適用

  • 線形層は、LLM モデルのパラメーターと計算の大部分を占めます。スケール スムージングは​​セルフ アテンション レイヤーとフィードフォワード レイヤーの入力アクティベーションに対して実行され、すべての線形レイヤーは W8A8 を使用して量子化されます。
  • アテンション計算における BMM 演算子の量子化。まず、INT8 は、線形層とアテンション層の BMM (バッチ行列乗算) などの計算量の多い演算子の入力と重みを量子化するために使用されますが、Softmax や LayerNorm などの他の軽量要素の演算は FP16 としてのアクティブ化を維持します。このような設計は、精度と推論効率のバランスをとるのに役立ちます。
    ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/LoveJSH/article/details/132114469