Tracks
量子化は、コンシューマー向けGPUで大規模言語モデルを動かすための最も実用的な方法の1つです。大量のVRAMを要する高精度の重みの代わりに、NVIDIA RTX 4090のようなGPUに収まる圧縮された4-bitモデルを使うことができます。GoogleのGemmaモデルは、強力なオープンAIをローカルで動かしやすくするためのこの流れの一翼を担っています。
このチュートリアルでは、Gemma 4 12B をllama.cppでローカル実行し、ベース版のモデルと、量子化対応学習(QAT)でファインチューニングされた別バージョンを比較します。
あわせて、Googleのモデルに関する他のチュートリアル「Gemma 4とOllamaでAIエージェントを構築」や「Gemma 4のファインチューニング方法」もご覧ください。
量子化とは?
量子化は、モデルの重みの精度を下げることで圧縮する手法です。
大規模言語モデルは通常、品質を保てる一方で多くのメモリを要するBF16やFP16といった高精度フォーマットで保存されます。量子化では、それらの重みを8-bitや4-bitといった低ビットの形式に変換し、VRAM使用量を抑えてローカルで動かしやすくします。Hugging Faceは、8-bit量子化でメモリ使用量をおおよそ半減でき、4-bit量子化ならさらに削減できると述べています。
ただしトレードオフとして、モデルが量子化に最適化されていない場合、とくに低精度では出力品質が低下することがあります。平たく言えば、BF16やFP16は通常もっとも高品質ですがメモリを多く消費します。8-bitモデルは小さくなりつつ品質をおおむね維持し、4-bitモデルはさらに小さくなる一方で、精度や安定性がやや損なわれる可能性があります。
ローカル推論では、このトレードオフはしばしば受け入れられます。高価なデータセンター向けハードウェアを使わず、コンシューマー向けGPUでより大きなモデルを動かせるためです。
量子化対応学習(QAT)とは?
量子化対応学習(QAT)は、低精度の挙動をシミュレーションしながら学習または微調整を行う手法です。これにより、量子化後もモデルの安定性が高まり、低ビット幅でのローカル推論性能を向上させられます。
QATの特徴は?
一般的な手法である学習後量子化は、学習を終えたモデルを後から圧縮します。これは簡便で実用的ですが、低精度の重みに対応するように学習されていないため、品質がいくらか低下する場合があります。
Google AI Edgeのドキュメントによれば、学習後量子化はモデルサイズを縮小しレイテンシを改善できる変換ステップであり、多くの場合、精度低下はわずかです。ただし最終的な品質はモデルや量子化レベルに依存する可能性があります。
量子化対応学習(QAT)は、別のアプローチを取ります。学習後だけを量子化するのではなく、学習や微調整の過程で低精度の挙動をシミュレーションします。これにより、後で小さな形式に変換しても安定性を保つ方法をモデルに学習させます。つまり、モデルを圧縮した際の品質低下を最小化できます。

こうした理由から、Gemma 4 のQATはローカルAIに有用です。量子化を前提に構築されているため、メモリ使用量を抑えながら元のモデル品質をより多く維持できます。コンシューマー向けGPUでモデルを動かすユーザーにとっては、低ビットでの安定性向上、VRAM使用量の削減、より実用的なローカル推論につながります。
ステップ1:依存関係のインストールとllama.cppのビルド
モデルをダウンロードする前に、まずローカル実行環境を準備します。本チュートリアルは、NVIDIA RTX 4090 GPUと24 GBのVRAMを搭載したマシンで検証しました。推論ランタイムにはllama.cpp、モデル形式にはGGUF、量子化モデルファイルにはUD-Q4_K_XLを使用します。
検証環境:
- GPU: NVIDIA RTX 4090
- VRAM: 24 GB
- ランタイム: llama.cpp
- モデル形式: GGUF
- 量子化: UD-Q4_K_XL
以下の2つのUnsloth GGUFモデルを比較します。
- unsloth/gemma-4-12B-it-GGUF
- unsloth/gemma-4-12B-it-qat-GGUF
まず、GPUが利用可能かを確認します。
nvidia-smi

次に、llama.cppのビルドに必要なシステムパッケージをインストールします。
apt-get update
apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y
公式のllama.cppリポジトリをクローンします。
git clone https://github.com/ggml-org/llama.cpp
次に、CUDAサポートを有効にしてllama.cppをビルドします。これにより、モデルのレイヤーをCPUだけでなくGPU上で実行できます。
cmake llama.cpp -B llama.cpp/build \
-DBUILD_SHARED_LIBS=OFF \
-DGGML_CUDA=ON
必要なバイナリをコンパイルします。
cmake --build llama.cpp/build \
--config Release \
-j \
--clean-first \
--target llama-cli llama-mtmd-cli llama-server llama-gguf-split

ビルド完了後、主に使用するバイナリはllama-serverです。これでGGUFモデルをローカルで実行し、curlで問い合わせ可能なOpenAI互換のAPIエンドポイントを公開できます。
ステップ2:Gemma 4 12Bの非QAT版とQAT版をダウンロード
準備が整ったので、llama.cppで使うGemma 4 12Bの2つのバリアントをHugging Faceからダウンロードします。通常の指示追従モデルと、QAT版をGGUF形式で取得します。
まず、高速ダウンロード対応のHugging Face Hub CLIをインストールします。
pip install -U "huggingface_hub[hf_xet]" hf-xet hf_transfer
高性能なXetダウンロードを有効化します。
export HF_XET_HIGH_PERFORMANCE=1
通常版のGemma 4 12B指示モデルをGGUF形式でダウンロードします。
hf download unsloth/gemma-4-12B-it-GGUF \
--local-dir models/gemma-4-12B-it-GGUF \
--include "*mmproj-BF16*" \
--include "*UD-Q4_K_XL*"
続いて、同じ量子化形式のQAT版をダウンロードします。
hf download unsloth/gemma-4-12B-it-qat-GGUF \
--local-dir models/gemma-4-12B-it-qat-GGUF \
--include "*mmproj-BF16*" \
--include "*UD-Q4_K_XL*"
--include フラグにより、リポジトリ全体ではなく、このチュートリアルに必要なファイルのみを取得します。ここでは、UD-Q4_K_XL のGGUFモデルファイルと、モデルパッケージで使用されるmmproj-BF16 ファイルをダウンロードしています。
ダウンロード完了後、両方のモデルフォルダが存在することを確認します。
ls models
想定出力:
gemma-4-12B-it-GGUF
gemma-4-12B-it-qat-GGUF
この時点で、非QAT版とQAT版の両方がローカルに揃いました。llama-serverで提供を開始できます。
ステップ3:非QATモデルをllama-serverで実行
まずは通常のGemma 4 12B指示モデルを実行し、後で同条件のQAT版と比較するためのベースラインを作成します。
非QATモデルをllama-serverで起動します。
./llama.cpp/llama-server \
-m models/gemma-4-12B-it-GGUF/*UD-Q4_K_XL*.gguf \
--host 0.0.0.0 \
--port 8001 \
--ctx-size 8192 \
--n-gpu-layers 99 \
--temp 1.0 \
--top-p 0.95 \
--top-k 64

これでhttp://localhost:8001にOpenAI互換のローカルサーバーが立ち上がります。
別のターミナルを開き、ローカルサーバーにリクエストを送ります。
time curl http://localhost:8001/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gemma-4-12B-it",
"messages": [
{
"role": "system",
"content": "You are a helpful local AI assistant."
},
{
"role": "user",
"content": "Explain why quantization-aware training is useful for running LLMs on consumer GPUs."
}
],
"temperature": 1.0,
"top_p": 0.95,
"max_tokens": 512
}'
このコマンドでは、OpenAI互換のAPI形式に従うローカルの/v1/chat/completionsエンドポイントを使用しています。プロンプトではモデルに量子化対応学習の有用性を説明させ、max_tokensを512に設定して、両モデルを同じ出力量でテストします。
RTX 4090でのテストでは、非QATモデルのタイミングは次のとおりでした:
- プロンプトトークン:40
- 生成トークン:512
- プロンプト速度:510.22 tokens/sec
- 生成速度:94.65 tokens/sec
- 合計時間:5.516 sec
GPUメモリ使用量:
9247 MiB / 24564 MiB
これで通常のGemma 4 12Bモデルにおけるベースライン性能が得られました。次のステップでは、同じ設定でQAT版を実行し、結果を比較します。
ステップ4:QATモデルの実行とテスト
続いて、同じllama-server設定でGemma 4 12BのQAT版を実行します。両コマンドは同じポートを使用するため、開始前に前の非QATサーバーを停止してください。
QATモデルを起動します。
./llama.cpp/llama-server \
-m models/gemma-4-12B-it-qat-GGUF/*UD-Q4_K_XL*.gguf \
--host 0.0.0.0 \
--port 8001 \
--ctx-size 8192 \
--n-gpu-layers 99 \
--temp 1.0 \
--top-p 0.95 \
--top-k 64
同じOpenAI互換のローカルエンドポイントhttp://localhost:8001でQATモデルが起動します。

同じテストプロンプトをQATモデルに送信します。
time curl http://localhost:8001/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gemma-4-12B-it-qat",
"messages": [
{
"role": "system",
"content": "You are a helpful local AI assistant."
},
{
"role": "user",
"content": "Explain why quantization-aware training is useful for running LLMs on consumer GPUs."
}
],
"temperature": 1.0,
"top_p": 0.95,
"max_tokens": 512
}'
RTX 4090でのテストでは、QATモデルのタイミングは次のとおりでした:
- プロンプトトークン:40
- 生成トークン:512
- プロンプト速度:593.93 tokens/sec
- 生成速度:101.65 tokens/sec
- 合計時間:5.114 sec
GPUメモリ使用量:
8627 MiB / 24564 MiB
ローカルサーバーのURL(http://localhost:8001)をコピーしてブラウザに貼り付けることもできます。

これで内蔵のllama.cpp Web UIが開き、ChatGPTのようなインターフェースでローカルモデルをテストできます。ブラウザから直接QATモデルと対話したり、プロンプトを試したり、日常のローカルAIアシスタントとして活用できます。
QATと非QATの結果を比較
同じプロンプトとサーバー設定で両モデルをテストしたので、RTX 4090上での性能を直接比較できます。
|
指標 |
Gemma 4 12B 非QAT |
Gemma 4 12B QAT |
|
量子化 |
UD-Q4_K_XL |
UD-Q4_K_XL |
|
コンテキストサイズ |
8192 |
8192 |
|
プロンプトトークン |
40 |
40 |
|
生成トークン |
512 |
512 |
|
プロンプト速度 |
510.22 tokens/sec |
593.93 tokens/sec |
|
生成速度 |
94.65 tokens/sec |
101.65 tokens/sec |
|
合計時間 |
5.516 sec |
5.114 sec |
|
VRAM使用量 |
9247 MiB |
8627 MiB |
このランでは、QATモデルは通常の非QATモデルよりも高速かつ軽量でした。VRAMを620 MiB削減し、メモリ使用量を約6.7%低減しました。ローカル推論では、大規模モデルをコンシューマー向けGPUで動かす際に、わずかなVRAMの節約も有効です。
また、QATモデルはトークン生成も高速化し、94.65 tokens/sec から 101.65 tokens/secへ改善しました。これは生成速度が約7.4%向上し、実時間が5.516秒から5.114秒へ短縮されたことを意味します。
日常的な使用でも、QATモデルはより滑らかで応答性が高いと感じられました。応答品質もこのテストでは安定しているように見受けられました。これこそQATの主な利点で、低ビット量子化に強くしつつ、圧縮モデルのメモリ・速度面の利点を維持できる点にあります。
まとめ
GoogleはローカルAIコミュニティのために素晴らしい取り組みを進めています。Gemma 4のようなモデルとQATのような技術によって、強力なAIモデルを完全オフラインで、さらにはコンシューマー向けハードウェア上でローカル実行するという夢が現実味を帯びています。
注目すべきは、単にモデルサイズを小さくする話に留まらないことです。QATにより、サイズを合わせるために品質を妥協するのではなく、低ビット形式でより良く動くよう設計されたモデルが得られます。今回のテストでは、QATモデルは非QAT版よりも高速で軽く、使い心地も滑らかでした。
次はMTP版モデルの検証が楽しみです。速度がさらに、場合によっては2倍に向上する可能性があります。そうなれば、ワークフローのさらなる部分をローカルAIへ移行しやすくなります。モデルをローカルで動かし、OpenCodeのようなツールと連携し、プライベートなローカルアシスタントでプロジェクトファイルを直接編集する、といった使い方も現実的になるでしょう。
この新しいローカルAIの波は、AIシステムの使い方そのものを変えつつあります。テキスト・画像・動画入力を含むマルチモーダルなワークフローなど、かつては大規模なクラウド環境を要したタスクが、徐々にローカルマシンでも可能になってきています。プライバシー、速度、コントロールを重視する開発者・研究者・ビルダーにとって、非常にエキサイティングな方向性です。