大規模言語モデル (LLM) 圧縮は常に多くの注目を集めています。トレーニング後の量子化は、一般的に使用されるアルゴリズムの 1 つです。ただし、既存の PTQ メソッドのほとんどは整数量子化であり、ビット数が以下の場合は8 では、量子化モデルの精度が大幅に低下します。整数 (INT) 量子化と比較して、浮動小数点 (FP) 量子化はロングテール分布をより適切に表現できるため、FP 量子化をサポートするハードウェア プラットフォームが増えています。この記事では、大規模モデルの FP 定量化のソリューションを提供します。 EMNLP 2023 で公開された記事。
この記事を理解するには、まず次のことを行う必要があります。浮動小数点形式と浮動小数点量子化に関する基本的な知識があること、まず、浮動小数点数は次の式で表すことができます:
s は符号ビットを表し、m は仮数ビットを表し、e は指数ビットを表します。 p は 0 から 2^e - 1 までの値で、現在の数値をどの指数区間に分割するかを示すために使用されます。d は 0 または 1 の値をとり、i 番目の仮数ビットを示すために使用されます。 b はバイアスで、指数間隔を調整するために使用される整数値です。
#次のセクションでは、浮動小数点定量化がどのように機能するかを説明します。まず、入力値は「スケールとクリップ」と呼ばれるステップを通過する必要があります。このステップでは、まず入力値を浮動小数点数が表現できる最大範囲 (±Qmax) にクリップします。具体的な計算式は次のとおりです。#整数量子化と同様に、FP 量子化でも、入力を適切な間隔にスケーリングするために完全精度のスケーリング係数が追加されることがわかります。行列乗算を計算する場合、スケーリング係数は低ビット行列乗算とは別に計算されるため、大きなオーバーヘッドは発生しません。この完全精度のスケーリング係数を組み込んだ後、さまざまな量子化テンソルを、それに応じてさまざまな最大値および最小値の間隔にクリップできます。実際の使用では、入力テンソルの値の範囲に基づいて必要な量子化間隔が決定され、式 (4) を使用して対応するバイアスが導出されます。式 (4) のバイアスは実際の値のスケーリング係数として使用できることに注意してください。式 (2)(3) を参照してください。
#浮動小数点量子化の次のステップは、決定された量子化間隔の値を対応する量子化間隔に割り当てることです。このプロセスは比較と量子化と呼ばれます:
##上図は量子化プロセスを直感的に示したもので、現在の入力値は式 5 と比較された後、異なる量子化間隔に量子化されます。
量子化されたアクティベーションと重みを取得した後、前述したように、ここでのスケーリング係数が最初に計算され、次の効率的な行列乗算が実現され、行列乗算の高速化が完了します。
##そして、この記事では、FP 量子化の精度が指数ビットと量子化間隔の設定に密接に関係していることを指摘しています。
以前の論文では、異なる FP フォーマット (つまり、浮動小数点数の指数ビット/仮数ビットの設定) 間で量子化誤差に大きな違いがあることが確認されています。適切な FP 形式が選択された場合にのみ、FP 量子化は INT 量子化よりも適切にロングテール分布を表現できます
# この記事では、検索ベースの浮動小数点量子化アルゴリズムを使用して、浮動小数点数に最適な指数と仮数のビット設定、および対応する量子化間隔を包括的な検索方法で決定するソリューションを提案します。 さらに、さまざまなタイプの Transformer モデル (Bert、LLaMA、ViT) では、定量化の難しさに深刻な影響を与える別の現象があります。モデル それらの間の大きさの違いは非常に大きいですが、同じチャネル間の大きさの違いは非常に一貫しています。以前の研究 LLM.int8 と SmoothQuant でも同様の現象が見つかりましたが、この記事では、この現象は LLM にだけ存在するだけでなく、他の Transformer モデル (以下に示す LLaMA、BERT、および DeIT-S) にも同様の活性化分布が見つかったことを指摘しています。 図からわかるように、これらの異常に大きいチャネルは残りのチャネルよりもはるかに大きいため、活性化テンソルを定量化する過程で、量子化精度は主にこれらの外れ値によって決まり、それによって他のチャネル値の量子化範囲が抑制され、最終的には量子化精度に対する全体的な影響が軽減されます。これにより、特にビット数が特定のレベルに低下した場合に、量子化の最終結果が崩れる原因になります。以下の図に示すように、効率的な行列乗算中にスケーリング係数を抽出できるのはテンソル単位およびトークン単位の量子化のみであり、チャネル単位の量子化は効率的な行列乗算をサポートしていないことに注意してください。
#問題を解決し、効率的な行列乗算を維持するために、この論文では少量の修正されたデータ セットを使用します。各チャネルのアクティベーションの最大値を事前に計算し、スケーリング係数を計算します。次に、スケーリング係数は、各チャネルの 2 の累乗を乗算した各テンソルの実数に分割されます。この 2 のべき乗は、FP の指数偏差で表すことができます。プロセス全体は次の式で表すことができます。
さらに、キャリブレーションが完了した後、チャネルごとの指数バイアスは変化しなくなるため、重みの量子化とともに事前に計算して、このチャネルごとの指数バイアスを量子化された重みに統合して、量子化の精度を向上させることができます。完全なプロセスは次のとおりです。 プリオフセットの後、元のアクティベーション関数の各チャネルの完全精度オフセットを観察できます。位置はテンソルベースの実数スケーリング係数になり、分解された整数オフセットが重み内の元の整数オフセットの位置に移動されます。詳細については、式 4 を参照してください。 (事前にシフトされた指数バイアス) を使用すると、効率的な行列乗算の原理を維持しながら、量子化精度をより向上させることができます。この方法を直感的に表示すると、次の図のようになります。 #最後に、この記事では浮動小数点量子化 (FPQ) 手法について説明します。LLaMA、BERT、および ViTs モデルでは、4 ビット量子化が SOTA をはるかに超える結果を達成しました。特に、この記事では、4 ビット量子化 LLaMA-13B モデルがゼロショット推論タスクで 63.1 の平均スコアを達成していることを示しています。これは、完全精度モデルよりも 5.8 ポイント低いだけであり、以前のモデルよりも高い平滑化量を持っています。 SOTA メソッド 12.7 は、現在知られている数少ない実現可能な 4 ビット量子化スキームの 1 つです。
以上が4 ビット浮動小数点量子化をサポートする最初の LLM は、LLaMA、BERT などの展開上の問題を解決するために登場しました。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。