INT8
8bit整数量子化
1要素1byte
weight-only
重みだけINT8
計算時にdequantizeされる場合がある
W8A8
weightもactivationもINT8
本当にINT8 Tensor Coreに乗れば速い
BF16 / FP16
基準
1要素2byte
FP8
1要素1byte
浮動小数なので、INT8より雑に落としても破綻しにくい
RTX 30以前では FP8 Tensor Core がないのでうまみがない
INT8 Tensor Coreは昔からある
なぜ今までINT8が使われていなかったか
DiTではそのまま量子化すると壊れやすかった
INT8で保存しても、計算時にbf16へ戻す実装が多くINT8 Tensor Coreで速くなるとは限らなかった
関連
LLM
LLM.int8()
SmoothQuant
GPTQ
AWQ
画像生成
Post-training Quantization on Diffusion Models
Q-Diffusion
Q-DiT
ConvRot
Ideogram 4.0 INT8/GGUF
Fused INT8 GEMM
ComfyUIがnative INT8 ConvRot対応対応
https://github.com/Comfy-Org/ComfyUI/pull/14636Support int8 models.
bit下げれば小さくなって速くなると思ってたけど、正確には違うのかnomadoor.icon
VRAMが足りてないときは、小さくなることでblock swap / offloadが無くなるので速くはなる
あと、単純にモデル読み込みの時間も短くなる
ただ、演算自体を速くするには、W8A8みたいにactivation?が低bitに対応してないといけない
あと、単純にモデルサイズが思ったよりデカい、という話なら最近の量子化は混合精度量子化が非常に多く、結構な数のレイヤーがFP16やBF16のまま残ってることもある(精度を落とすとクリティカルに性能が落ちる場合など)morisoba65536.icon