量子化
そもそもの意味は「連続的な量を離散的な値で近似して表すこと」
AIモデルの話で出てきた時は基本的には「元のモデルデータを少ないビット数で『だいたい同じ』形になるようにルール付けてデータ粒度を間引く」事を指す
例えば横1000マス×縦1000マスの方眼紙にグラフを描いて居たのを横100マス×縦1000マスの方眼紙になんか似たような形になるようにプロットする…ような事をしてる。
こうすることで例えば上の例ならデータ量(合計マス数)としては1/10に減らせる。
実は意外と身近な使い方をよくされており、例えばデジタル音声ファイルはアナログの音声(根本的にアナログは無限の解像度を持っている)をCDでは44.1kHz(1秒間に44,100回)の高低レンジに刻んで、波形を見た目が階段見たいな状態にして保存再生してる。
写真画像データとかも基本的には「アナログ視界(無限の解像度)」をpxの縦横行列に置き換えることで擬似的に再現してる。
極論すればデジタル化してる時点で何らかの量子化はされてる事になる。
点描画とかはある意味アナログ世界でデジタルに量子化したものなのかも知れない
限りなく一段が小さい方階段は概ね斜めの坂道と同じだよね?という考え方
ボールがスムーズに転がれば良い、という条件なら段差を多少荒くしても変わらないよね?と言うのが量子化の粒度を荒く(ビット数を減らす等)しても動作する理由みたいな感じ。
(AIモデルを)量子化するための手法は、
GPTQ、AWQ、bnb nf4、GGUFと色々あるが困ったことに?全部違うもの。
メモリとかストレージ消費を減らしたい、という点は共通してる。
基本的にllm向けの話だったがFlux.1を皮切りに大型化する画像生成の次世代モデルでも活用され始めている。
多分画像生成では一番見かけてるやつ、元々CPU推論向けに作られた量子化方式。
他の量子化は基本的にはGPU処理に特化してるのに対してCPUでも処理しやすい様に作られている(らしい)
フォーマットは頑張れば人間もなんとなくわかる程度にシンプル、概ねSafetensorsに近いフォーマットで層単位での量子化割合を変えることができる
1層目がFP32で2層目が4BITといった感じのフォーマットが可能
処理はシンプルに量子化解除(dequantize)してから層単位で処理をする事でVRAMとかを節約してる
今使うファイルだけzipから解凍して取り出して使うみたいなイメージ
ComfyUIだと後述される(予定の)nf4形式では
Loraが使えないなどの問題が色々出るので事実上対応してる量子化はGGUFのみに近い
quantize