量子化
別名:モデルの量子化、4ビット、8ビット
更新日:
定義
量子化とは、モデルの数値を、1つあたりより少ないビット数で保存することです。たとえば元が16ビットや32ビットだったところを4ビットや8ビットにします。モデルが小さくなりメモリの負担も軽くなりますが、通常は精度が少し下がります。
モデルの大部分は、重みと呼ばれる非常に長い数値の並びです。学習した状態では、各重みはふつう32ビットか16ビットの浮動小数点数です。量子化は、それをより粗い形に書き換えます。Appleのドキュメントでは、数値を表すビット数を減らすことと定義されています。
同じモデルが、4bit、8bit、Q4などのラベルが付いた、サイズの違う複数のダウンロードとして出てくるのはこのためです。どれも同じモデルを、違うレベルで圧縮したものです。
どれくらい小さくなるか
サイズはビット数にほぼそのまま比例します。重み1つあたりのビット数を半分にすれば、ファイルもほぼ半分になります。
公開されている例を1つ挙げると、具体的にわかります。80億パラメータの言語モデルでは、16ビットのファイルが約15GiB、8ビットが約8GiB、よく使われる4ビットのビルドが約4.6GiBです。4ビットのビルドは、一部をより高い精度のまま残すため、重み1つあたりちょうど4ビットではなく約4.9ビットになります。
失うもの
精度が少し下がります。数値が粗くなると、モデルの計算があらゆるところでわずかにずれ、その誤差が積み重なります。どれくらい表に出るかは、モデルと、どこまで量子化するかによります。
Appleのガイダンスでは、8ビットへの圧縮、モデルによっては6ビットや4ビットへの圧縮でも、精度はわずかに下がるだけで済むことがあるとしています。
サイズ以外に得られるもの
Appleは、モデルを圧縮して得られる可能性のある利点として、メモリ使用量の削減、レイテンシの低下、消費電力の削減を、単独または組み合わせで挙げています。ノートパソコンでは、メモリが一番効いてくることがよくあります:無理なく収まるモデルなら、ほかに開いているものにも余裕が残ります。
ラベルの読み方
ラベルは重みの精度を表しています。
- fp32またはfloat32:完全な精度。ほとんどのモデルはこの精度で学習されます。
- fp16、bf16、float16:半精度。モデルが公開されるときによく使われる形式です。
- 8bitまたはint8:完全な精度の4分の1。
- 4bitまたはint4:完全な精度の8分の1。大きなモデルをノートパソコンで動かすときの一般的な選択です。
- Q4、Q5、Q8のあとに文字が付いたもの:よく使われるファイル形式の1つで、考え方は同じです。文字は使われた方式を表します。
量子化とパレット化
Appleのツールには、重みを少ないビット数で保存する方法が2つあります。線形量子化は、元の値の範囲を、狭い範囲の整数に対応付けます。パレット化は重みのクラスタリングとも呼ばれ、重みをクラスタにまとめ、各重みを短いルックアップテーブルのインデックスとして保存します。
Appleのガイダンスでは、パレット化はふつうNeural Engineで最もよく機能し、Macのグラフィックスチップで動くモデルには4ビット量子化がよく機能する場合があるとしています。
よくある質問。
モデルの「4ビット」とは?
重みが1つあたり約4ビットで保存されているという意味です。元は16ビットか32ビットです。ファイルはずっと小さくなり、モデルの精度はわずかに下がります。
量子化するとモデルは悪くなる?
少しだけ悪くなります。精度をいくらか犠牲にして、サイズを小さくし、メモリ使用量を減らします。Appleのガイダンスでは、8ビット、モデルによっては6ビットや4ビットでも、精度の低下はわずかで済むとしています。
4ビットと8ビット、どちらのモデルがいい?
8ビットのモデルのほうが元のモデルに近く、4ビットのモデルはその約半分のサイズです。メモリに余裕があれば8ビット、なければ4ビットを選びます。
量子化するとモデルは速くなる?
速くなることがあります。Appleは、得られる可能性のある利点として、メモリ使用量の削減や消費電力の削減とともに、レイテンシの低下を挙げています。
どんなモデルでも量子化できる?
ほとんどのモデルは、公開されている重みを変換するツールで量子化できます。どれくらい性能が保たれるかは、モデルによって違います。
量子化は圧縮と同じ?
モデル圧縮の一種です。ほかには、重みを取り除く枝刈り(プルーニング)や、重みをルックアップテーブルの項目として保存するパレット化があります。