推論最適化・実行基盤

INT4とは|群を32個ごとにすると誤差が半分、容量は12.5%から14.1%に

INT4とは何をするのか群の大きさで何が変わるのか8bitと比べてどうなのか

4bitで持つとき、目盛りを表全体で1つにすると誤差は19.81%でした。32個ごとに持つと9.70%まで下がります。

代わりに容量が戻ります。12.5%から14.1%へ。それでも8bitの25.0%よりは小さいままです。

この記事の要点

  • 全体で1つの目盛りだと誤差19.81%
  • 32個ごとにすると9.70%
  • 容量は12.5%から14.1%
  • 8bitは容量25.0%で誤差0.78%

群を32個ごとにすると誤差が半分、容量は12.5%から14.1%に

目盛りを持つ群の大きさを変えて測りました。細かくするほど誤差は下がりますが、容量が戻ります。

INT4で群の大きさを変えると何が起きるのかを、実際に計算して測りました。使ったのは512×768の重みの表、393,216個です。

4bitで持てる刻みは16段階しかありません。その16段階をどの範囲に割り当てるかが、群の大きさで決まります。

python
def quant_group(x, bits, g):
    qmax = 2 ** (bits - 1) - 1
    blocks = flat.reshape(-1, g)
    s = np.max(np.abs(blocks), axis=1, keepdims=True) / qmax
    q = np.clip(np.round(blocks / s), -qmax - 1, qmax)
    return (q * s).reshape(x.shape), blocks.shape[0]
text
群の大きさ    目盛りの数  相対誤差  本体      目盛り    合計      32bitとの比
全体で1つ                1     19.81%    192.0KB      0.0KB    192.0KB       12.5%
4096個ごと             96     15.78%    192.0KB      0.2KB    192.2KB       12.5%
1024個ごと            384     14.23%    192.0KB      0.8KB    192.8KB       12.5%
256個ごと           1,536     12.61%    192.0KB      3.0KB    195.0KB       12.7%
128個ごと           3,072     11.73%    192.0KB      6.0KB    198.0KB       12.9%
64個ごと            6,144     10.76%    192.0KB     12.0KB    204.0KB       13.3%
32個ごと           12,288      9.70%    192.0KB     24.0KB    216.0KB       14.1%

上の表を見てください。全体で1つの目盛りだと19.81%だったものが、32個ごとにすると9.70%まで下がりました。

下がり方は緩やか

群を12,288分の1にしても、誤差は半分にしかなりません。4096個ごとから32個ごとへ128倍細かくして、15.78%から9.70%です。

16段階しかないという制約は変わらないためです。目盛りをどこに置いても、刻みの粗さは残ります

容量が戻ってくる

32個ごとだと目盛りが12,288個必要になり、24.0KBを占めます。本体192.0KBに対して12.5%です。

合計では12.5%から14.1%に戻りました。それでも8bitの25.0%よりは小さいままです。

細かくするほど誤差は下がるが、下がり方は緩やか。

%19.80全体409610242561286432相対誤差512×768の表での実測。合計の容量は12.5%から14.1%へ増える。
図1 ── 群の大きさと相対誤差
出典Frantar et al.「GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers」2026-08-18 確認
reducing the bitwidth down to 3 or 4 bits per weight, with negligible accuracy degradation
原文Frantar et al.「GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers」 この内容の有効期限2027-02-18

INT4とは、重みを4bitで持つ方式

1つの重みを4bitで表します。刻みは16段階しかないので、目盛りの置き方が効きます。

INT4は、1つの重みを4bitの整数で持つ方式です。32bitの8分の1になります。

16段階しかない

4bitで表せるのは16通りです。符号を含めると、マイナス8からプラス7までの整数になります。

この16段階を、実際の値の範囲に割り当てます。範囲が広いほど、1段階の刻みが粗くなります。前の節で群の大きさが効いたのはこのためです。

学習の後で落とす

多くの場合、学習が終わったモデルに対して後から適用します。学習をやり直す必要はありません。

代表的な手法も、近似的な二次の情報にもとづく、一度きりの重みの量子化の方法として提案されています。1回の処理で終わる形です。

規模の効果

同じ手法は、1750億のパラメータを持つモデルを、およそ4GPU時間で量子化できると報告しています。

効果も規模で語られています。1750億のモデルを、初めて1つのGPUのなかで実行できるようにしたとされています。

余談 この計測での注意

使ったのは正規分布から作った人工の表で、実際のモデルの重みではありません。実際の手法は、どの値を優先して合わせるかを計算で決めるので、この計測より誤差は小さくなります。ここで見せているのは、群の大きさと容量の釣り合いという構造です。落とし方そのものは量子化の記事で扱っています。

出典Frantar et al.「GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers」2026-08-18 確認
a new one-shot weight quantization method based on approximate second-order information
原文Frantar et al.「GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers」 この内容の有効期限2027-02-18

同じ容量にそろえて8bitと比べる

容量をそろえると、4bitと8bitの差がはっきりします。誤差は1桁以上違いました。

INT4を選ぶかどうかは、同じ容量にそろえて比べると判断しやすくなります。実際に並べました。

text
精度  群の大きさ    合計      32bitとの比  相対誤差
  8bit  全体で1つ          384.0KB       25.0%      1.09%
  8bit  1024個ごと        384.8KB       25.0%      0.78%
  4bit  128個ごと         198.0KB       12.9%     11.73%
  4bit  64個ごと          204.0KB       13.3%     10.76%
  4bit  32個ごと          216.0KB       14.1%      9.70%

8bitで群を細かくすると、容量はほぼ変わらないまま誤差が1.09%から0.78%になりました。

4bitは容量が半分近くまで下がる代わりに、誤差が9.70%から11.73%です。1桁以上の開きがあります。

どちらを選ぶか

  1. 載らないなら4bit。容量が制約になっている場合
  2. 載るなら8bit。誤差が1桁小さい
  3. 群は8bitでも細かく。容量はほぼ増えずに誤差が下がる
  4. 出力で確かめる。誤差の数字だけでは決まらない

3番目は見落とされがちです。8bitで1024個ごとにしても容量は384.8KBで、全体で1つの384.0KBとほぼ同じでした。

容量が制約になる場面

4bitを選ぶ理由は載るかどうかです。冒頭で引いた手法も、規模の大きなモデルを1つのGPUで動かせるようにしたことを成果として挙げています。

つまり誤差と引き換えに、動かせる場所を増やしているという関係です。載るなら8bitのほうが素直です。

容量をそろえると、誤差の差がはっきりする。

充足 2 / 4容量が実際に制約になっている制約がなければ、誤差が1桁小さい8bitのほうが素直8bitでも群を細かくしている1024個ごとでも容量は384.8KBで、誤差は1.09%から0.78%に下がる群を小さくすれば誤差が消えると考えている128倍細かくしても15.78%から9.70%までしか下がらない誤差の数字だけで判断している最終的な出力が使えるかどうかは、別に確かめる必要がある512×768の表での実測にもとづく。4bitは容量12.5%から14.1%、8bitは25.0%だった。
図2 ── 精度と群の大きさを選ぶときの点検項目
出典Frantar et al.「GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers」2026-08-18 確認
allowing us for the first time to execute an 175 billion-parameter model inside a single GPU
原文Frantar et al.「GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers」 この内容の有効期限2027-02-18

よくある質問

群の大きさはどう決めますか
小さくするほど誤差は下がりますが、目盛りの数だけ容量が戻ります。この計測では32個ごとで誤差9.70%・容量14.1%でした。
4bitと8bitはどちらがよいですか
用途によります。容量は12.9%と25.0%で倍近く違いますが、誤差は11.73%と0.78%で1桁以上違いました。
目盛りはどれだけ場所を取りますか
32個ごとだと12,288個必要になり、24.0KBでした。本体の192.0KBに対して12.5%です。
誤差はどこまで下げられますか
群を小さくしても頭打ちになります。この計測では全体で19.81%、32個ごとで9.70%と、半分までしか下がりませんでした。

まとめ

  • 重みを4bitで持つ方式
  • 群を小さくすると誤差は19.81%から9.70%
  • 容量は12.5%から14.1%に戻る
  • 8bitとは誤差が1桁以上違う

今日から始められること

  1. 落とす前と後で、同じ入力の出力を比べる
  2. 群の大きさを変えて、誤差と容量を並べる
  3. 8bitで同じ容量にしたときの誤差と比べる
  4. 許せる誤差の範囲を先に決める

実務で組んだINT4のワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る