LLMの量子化とは?4bit・8bitの違いと、VRAM・精度への影響

LLMの量子化はモデルの数値を少ない桁数にして軽くする手法

LLMの量子化(英語でquantization)は、モデルの中の数値を少ない桁数に置き換えて、モデルを軽くする手法です。LLM(大規模言語モデル)の中には、学習で定まった「パラメータ(重み)」と呼ばれる数値が何十億個も入っています。また、この数値は普通1つあたり16bitで保存されていて、量子化ではこの16bitを8bitや4bitに減らします。

bit(ビット)は、数値を記録するときの桁数のことです。桁数が少ないほど、データは小さくなります。

70億パラメータのモデルの重みの大きさ

ビット数 1パラメータあたり 重みの大きさ(目安)
16bit(量子化前) 2バイト 約14GB
8bit 1バイト 約7GB
4bit 0.5バイト 約3.5GB

量子化しても桁数が減るだけでパラメータ数は同じ

量子化で減るのは数値1つあたりの桁数で、パラメータ数は変わりません。たとえば80億(8B)パラメータのモデルは、4bitに量子化しても80億個の数値を持ったままです。

配布ページのモデル名に付く「8B」と「Q4」は、別々の情報です。8Bがパラメータ数、Q4がビット数を指しています。量子化は学習をやり直す操作ではなく、学習済みの同じ数値を少ない桁数で記録し直す操作です。

4bitにするとモデルの大きさは16bitの約1/4

16bitを4bitにすると、数値1つに使う桁数が1/4になるので、重みの大きさもおよそ1/4になります。8bitなら重みの大きさは半分です。70億パラメータのモデルなら、16bitで約14GBある重みが、8bitで約7GB、4bitで約3.5GBになります。

「約」と付けたのは、実際の量子化版には数値のほかに丸め方の情報も入るからです。llama.cppの表では、Llama-3.1-8BのQ4_K_Mは1重みあたり4.8944bitで、ファイルの大きさは4.58GiBでした。4bitちょうどより少し大きくなると考えておきましょう。

量子化しないとLLMは普通のPCではメモリに入りきらない

量子化が必要なのは、LLMの重みがそのままでは一般的なPCのメモリに収まらないからです。llama.cppの説明では、Llama 3.1の8Bモデルは元の大きさが32.1GBあり、Q4_K_Mに量子化すると4.9GBになります。70Bモデルなら、280.9GBが43.1GBまで小さくなります。

数十GBのモデルは、家庭用のPCではまず読み込むことができません。量子化は、この差を埋めて大きなモデルを自分のPCで動作させるための手段です。

GitHubのllama.cppリポジトリにあるtools/quantize/README.mdのページ上部
量子化の手順とモデルの大きさの表があるllama.cppの説明ページです。GitHub — llama.cpp tools/quantize/README.md
Quantization reduces the precision of model weights (e.g., from 32-bit floats to 4-bit integers), which shrinks the model's size and can speed up inference.(quantize の冒頭)— GitHub より
公式情報を見る →

量子化の仕組みは細かい数値を少ない段階へ丸めること

量子化の仕組みは、細かい小数を定められた少ない段階のどれかへ丸めることです。つまり、テストの点数を「A・B・C」の評価に置き換えるのに近く、細かな差は一部なくなりますが、記録に必要な桁数は少なくなります。丸めた値と元の値のずれは、量子化誤差と呼ばれています。

ビット数と、記録することができる値の段階の数

ビット数 値の段階の数
8bit 256段階
4bit 16段階
3bit 8段階
2bit 4段階

4bitなら値は16段階に限られる

4bitで記録することができる数値は、2の4乗の16段階だけです。8bitにすると段階は256まで増えます。Hugging Faceも、int8で記録することができる値は256個しかないのに対し、元のfloat32はとても広い範囲の値を持つとしています。

そこで量子化では、元の数値の範囲を16段階や256段階に割り振り、それぞれの数値を一番近い段階に合わせます。割り振りに使うのは、スケール(目盛りの幅)とゼロ点という2つの値です。数値をスケールで割ってから丸め、範囲の外にはみ出した値は端の段階に合わせます。

数値を小さなまとまりに分けて丸めると誤差が減る

数値を小さなまとまりに分けて、まとまりごとに目盛りを定めると、丸めによる誤差が小さくなります。Hugging Faceの説明では、目盛りはテンソル(数値の大きなまとまり)全体で1組持つことも、もっと細かい単位で持つこともできます。ただし、細かく持つほど精度は上がる代わりに、目盛りを記録する分だけメモリも増えるという関係です。

はみ出した数値だけを別に計算するのも、誤差を抑える工夫です。LLM.int8()の論文では、ごく一部の外れ値だけを16bitで計算し、残りの99.9%超の値を8bitで計算する方法で、元の性能を保っています。

学習後に量子化するPTQと量子化を前提に学習するQAT

量子化のやり方は、学習を終えたモデルを後から量子化するPTQと、量子化されることを前提に学習するQATの2つがあります。PTQ(学習後量子化)では、学習済みのモデルに代表的なデータを通して数値の範囲を測り、そのまま変換します。つまり、追加の学習がいらないので手軽です。

QAT(量子化を考慮した学習)では、学習の途中で量子化の誤差を模擬して、モデルをその誤差に慣らしておきます。学習の手間がかかる代わりに、量子化したあとの性能が落ちにくくなります。

Hugging Face Optimumのドキュメント「Quantization」のページ上部
量子化の考え方を説明したHugging Faceのドキュメントです。Hugging Face — Optimum: Quantization
Only 256 values can be represented in int8, while float32 can represent a very wide range of values.(Quantization to int8)— Hugging Face より
公式情報を見る →

量子化モデルの名前に付くGGUF・GPTQ・AWQの意味

量子化版の名前に付くGGUF・GPTQ・AWQのうち、GGUFはファイル形式、GPTQとAWQは量子化の方式を指しています。ただし、どれも「量子化版」の印に見えますが指しているものが異なります。

量子化版の名前に付く記号の意味

名前 何を指すか 発表
GGUF モデルを保存するファイル形式。llama.cppやOllamaで読み込む —
Q4_K_Mなど GGUFの中の量子化の種類。Q4は4bit系 2023年6月(k-quants)
GPTQ 重みを3〜4bitに減らす量子化の方式 2022年10月
AWQ 重要な重みを守りながら量子化する方式 2023年6月

GGUFはllama.cppやOllamaで使うファイル形式

GGUFは量子化の方式ではなく、モデルを保存するファイル形式です。GGUFの仕様書によると、GGUFはGGMLやGGMLをもとにした実行環境で推論するためにモデルを保存する形式とのこと。旧形式のGGML・GGMF・GGJTの後継にあたり、1つのファイルだけで配布することができます。

llama.cppでは、元のモデルをいったんGGUFに変換し、そのGGUFを量子化する2段階で量子化版を作ります。そのため同じGGUFでも、16bitのまま(F16)のファイルもあれば、4bitのファイルもあります。Googleも、Gemma 3の4bit版をOllamaやllama.cpp向けに公開しました。

Q4_K_Mなどファイル名の記号の読み方

GGUFのファイル名の「Q4」「Q8」はビット数、「K_M」「K_S」はllama.cppのk-quantsという量子化の種類を指しています。GGUFの仕様書は、ファイル名にモデル名・パラメータ数(8Bなど)・バージョン・重みの記録方式(Q4_K_M・Q4_0・F16など)を並べる命名規則を定めています。

k-quantsは、2023年6月3日にllama.cppへ追加された2〜6bitの量子化方式です。Q4_K_Sはすべての重みを4bit系で量子化し、Q4_K_Mは一部の重みを6bit系で残します。そのぶんMのほうがファイルは少し大きく、性能の低下は小さくなります。

GPTQとAWQはGPUで動作させる前提の量子化方式

GPTQとAWQは、重みを4bit前後まで減らしてGPUで速く動作させるために作られた量子化の方式です。GPTQは2022年10月に発表されました。

また、GPTQの論文では1,750億パラメータのGPTモデルを約4GPU時間で1重みあたり3〜4bitまで減らしても、精度の低下は無視できるほどだったと報告されています。この大きさのモデルを、初めて1枚のGPUで動作させることもできたとのこと。

AWQは2023年6月に発表された方式で、すべての重みが同じように重要なわけではないという考えに基づいています。重要な重みは全体の1%ほどで、その1%を守るだけで量子化の誤差を大きく減らすことができます。

どの重みが重要かは、重みそのものではなくモデルに入ってくる値(活性化)の分布から見分けます。AWQに合わせた推論の仕組みは、デスクトップとモバイルのGPUで、Hugging Faceの16bitの実装より3倍超速く動作しました。

GitHubのggmlリポジトリにあるGGUF仕様書docs/gguf.mdのページ上部
GGUFの形式と命名規則を定めた仕様書のページです。GitHub — ggml docs/gguf.md
arXivの論文ページ「GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers」の上部
GPTQを発表したFrantarらの論文のページです。arXiv — GPTQ(arXiv:2210.17323)
arXivの論文ページ「AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration」の上部
AWQを発表したLinらの論文のページです。arXiv — AWQ(arXiv:2306.00978)
GGUF is a file format for storing models for inference with GGML and executors based on GGML.(GGUF の冒頭)— GitHub より
公式情報を見る →
reducing the bitwidth down to 3 or 4 bits per weight, with negligible accuracy degradation relative to the uncompressed baseline.(Abstract)— arXiv より
公式情報を見る →
Protecting only 1% salient weights can greatly reduce quantization error.(Abstract)— arXiv より
公式情報を見る →

量子化でLLMの精度はどれくらい落ちるか

量子化による精度の低下は8bitならほとんど無く、4bitで少しあり、3bit以下になると大きくなります。精度の目安としてよく使われるのが、パープレキシティという指標です。モデルが文章の次の語をどれだけ予測できたかから計算する値で、低いほど予測が合っています。

LLaMA 7Bを量子化したときのファイルの大きさとパープレキシティ

量子化の種類 ファイルの大きさ パープレキシティ(低いほど良い)
F16(量子化前) 13.0GB 5.9066
Q6_K 5.15GB 5.9110
Q4_K_M 3.80GB 5.9601
Q3_K_M 3.06GB 6.1503
Q2_K 2.67GB 6.7764

出典: llama.cpp PR #1684(k-quants)の表。

8bitなら性能は元のモデルとほぼ同じ

8bitに量子化したモデルの性能は、元の16bitのモデルとほとんど変わりません。2022年8月のLLM.int8()の論文は、1,750億パラメータのモデルを8bitに変換して、性能を落とさずにそのまま使うことができたと報告しました。推論に必要なメモリは半分になっています。

llama.cppの表でも、6bitのQ6_Kのパープレキシティは5.9110で、16bitの5.9066と比較した差は0.1%以内でした。6bitまで減らしても、元のモデルとの差はこの程度に収まります。

性能の低下は4bitで小さく、3bit以下で大きい

4bitでの性能の低下は小さく、3bit、2bitと減らすほど低下が大きくなります。LLaMA 7BのQ4_K_Mのパープレキシティは5.9601で、16bitとの差はわずかです。ところが、Q3_K_Mでは6.1503まで、Q2_Kでは6.7764まで上がります。

ファイルの大きさは、Q4_K_Mの3.80GBからQ2_Kの2.67GBまでしか減りません。3bit以下では、ファイルが小さくなる幅の割に性能が大きく落ちます。1bitまで減らした量子化版の限界は、詳しく解説しています。

量子化を前提に学習したQAT版は4bitでも性能が落ちにくい

量子化を前提に学習したQAT版は、4bitに量子化しても性能の低下を小さく抑えることができます。Googleは2025年4月18日に、Gemma 3のQAT版を公開しました。また、量子化がしばしば性能の低下を招くと認めたうえで、GoogleはQATを約5,000ステップ行い、Q4_0に量子化したときのパープレキシティの悪化を54%減らしたとしています。

量子化の誤差を学習で取り戻した4bit版は、他のモデルでも公開が続いています。Liquid AIの例も、取り上げています。

arXivの論文ページ「LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale」の上部
8bitの量子化で性能を保ったDettmersらの論文のページです。arXiv — LLM.int8()(arXiv:2208.07339)
GitHubのllama.cppのプルリクエスト「k-quants #1684」のページ上部
2023年6月にk-quantsを追加したllama.cppのプルリクエストです。GitHub — llama.cpp PR #1684: k-quants
Google Developers Blogの記事「Gemma 3 QAT Models」のページ上部
2025年4月18日にGemma 3のQAT版を発表したGoogleの記事です。Google Developers Blog — Gemma 3 QAT Models
With our method, a 175B parameter 16/32-bit checkpoint can be loaded, converted to Int8, and used immediately without performance degradation.(Abstract)— arXiv より
公式情報を見る →
Perhaps worth noting is that the 6-bit quantized perplexity is within 0.1% or better from the original fp16 model.(PR の説明)— GitHub より
公式情報を見る →
We reduce the perplexity drop by 54% (using llama.cpp perplexity evaluation) when quantizing down to Q4_0.(Understanding performance, precision, and quantization)— Google より
公式情報を見る →

自分のPCに合う量子化版の選び方

自分のPCに合う量子化版は、モデルの重みの大きさを計算してから、その大きさがGPUのメモリ(VRAM)に収まるかどうかで選びます。VRAMは、AIの計算を処理するGPUが備える専用のメモリです。また、GoogleがGemma 3で公開した値を見ると、4bitにすれば同じモデルがずっと小さなVRAMに収まります。

Gemma 3の重みを読み込むのに必要なVRAM

モデル 16bit(BF16) 4bit(int4)
Gemma 3 27B 54GB 14.1GB
Gemma 3 12B 24GB 6.6GB
Gemma 3 4B 8GB 2.6GB
Gemma 3 1B 2GB 0.5GB

重みを読み込む分だけの値で、実行にはKVキャッシュの分のVRAMも必要。出典: Google Developers Blog。

モデルの大きさはパラメータ数×ビット数÷8で見積もろう

重みの大きさは「パラメータ数×ビット数÷8」で見積もることができます。この計算で出る数字の単位はバイトです。また、70億パラメータのモデルを4bitで動作させるなら、70億×4÷8で35億バイト、つまり約3.5GBになります。

ただし、この計算でわかるのは重みを読み込む分だけです。Googleも、公開したVRAMの値は重みを読み込むためだけのもので、実際に動作させるには会話の情報を保持するKVキャッシュのVRAMも必要だとしています。KVキャッシュの量は読み込む文章の長さで変わります。計算した値ちょうどのVRAMでは足りないので、余裕を持たせておきましょう。

メモリに余裕があれば8bit、なければ4bitを選ぼう

VRAMに余裕があれば8bit、収まらなければ4bitの量子化版を選ぶのが基本です。8bitなら性能はほぼ元のままで、4bitでも低下は小さいです。ただし、3bit以下はそれでも収まらないときの最後の手段と考えておくとよいでしょう。

同じVRAMなら、小さなモデルを16bitで動作させるより、大きなモデルを4bitで動作させるほうが良い結果になることがあります。llama.cppの表では、13BのQ4_K_Mは7.32GBでパープレキシティが5.3002となり、ほぼ倍の13.0GBある7Bの16bit版の5.9066より低い値でした。

Googleは、Gemma 3 27BのQAT版ならVRAM 24GBのRTX 3090で、12BならVRAM 8GBのRTX 4060 Laptop GPUで動作するとしています。27Bを16bitのまま読み込むには54GBのVRAMが必要なので、4bitの量子化版にすることで家庭用のGPUでも動作させることができるようになっています。

Note: This figure only represents the VRAM required to load the model weights. Running the model also requires additional VRAM for the KV cache, which stores information about the ongoing conversation and depends on the context length(See the Difference: Massive VRAM Savings)— Google より
公式情報を見る →

まとめ:LLMの量子化で減るメモリと落ちる精度

LLMの量子化は、モデルの中の数値を16bitから8bitや4bitに置き換えて、必要なメモリを減らす手法です。4bitにすると重みの大きさは約1/4になり、パラメータ数は変わりません。仕組みは細かい数値を少ない段階へ丸めることで、GGUFはその量子化版を入れるファイル形式、GPTQとAWQは量子化の方式です。

精度は8bitならほぼ元のままで、4bitで少し落ち、3bit以下で大きく落ちます。量子化版を選ぶときは、パラメータ数×ビット数÷8で重みの大きさを見積もり、KVキャッシュの分の余裕を足したうえで、VRAMに収まる中で一番ビット数の多いものを選びましょう。

FAQ

量子化は量子コンピューターや物理の量子化と関係があるのか?
関係はありません。LLMの量子化は、細かい数値を少ない段階のどれかに置き換えるという意味で「量子化」と呼んでいるだけで、量子コンピューターの技術は使いません。Hugging Faceも量子化について、数値を精度の低いデータ型で持ち、計算とメモリのコストを下げる手法としています。
量子化と知識蒸留の違いは?
量子化は今あるモデルの数値を少ない桁数に置き換えるだけで、モデルを学習し直しません。知識蒸留は、大きなモデルの回答を手本にして小さなモデルを新しく学習させます。LLM.int8()の論文でも、学習済みのモデルを読み込んで8bitに変換し、そのまま使うことができたと報告されています。
量子化するとパラメータ数は減るのか?
減りません。量子化で減るのは数値1つあたりのビット数で、80億パラメータのモデルは量子化しても80億個の数値を持ったままです。4bitにすると数値1つのデータ量が16bitの1/4になるので、モデル全体が軽くなります。