跳至内容

量化感知训练:提升 Gemma 4 本地推理的实用指南

使用 llama.cpp 在本地运行 Gemma 4 12B QAT,了解量化感知训练如何改进 4-bit GGUF 推理、降低显存占用、提升速度,并让本地 AI 在消费级 GPU 上更稳定。
更新 2026年8月3日  · 8分钟

用 AI 探索

在 ChatGPT 中打开在 Claude 中打开在 Perplexity 中打开

量化是让大型语言模型在消费级 GPU 上运行的最实用方法之一。与其使用需要大量显存的高精度权重,我们可以使用压缩的 4 位模型,让其适配如 NVIDIA RTX 4090 这样的 GPU。Google 的 Gemma 系列模型正是这股推动开放且强大的 AI 更易本地运行趋势的一部分。

在本教程中,我们将使用 llama.cpp 在本地运行 Gemma 4 12B,并对比基础版本与通过 量化感知训练(QAT) 微调后的版本。

同时,建议阅读我们关于 Google 模型的其他教程:使用 Gemma 4 和 Ollama 构建 AI 代理,以及如何微调 Gemma 4

什么是量化?

量化是一种模型压缩技术,通过降低模型权重的精度来实现。

大型语言模型通常以 BF16 或 FP16 等高精度格式存储,质量更好但需要大量内存。量化会将这些权重转换为更低位宽的格式(如 8 位或 4 位),从而降低显存占用,使模型更易于在本地运行。Hugging Face 指出,8 位量化大致可将内存使用减半,而 4 位量化能进一步降低。

权衡在于,较低精度有时会降低输出质量,尤其当模型未针对量化进行优化时。通俗讲,BF16 和 FP16 通常提供最佳质量但占用更多内存;8 位模型更小且通常能保持较强质量;4 位模型更小,但可能损失一定准确性或稳定性。

对于本地推理而言,这种权衡往往是值得的,因为它让更大的模型可以在消费级 GPU 上运行,而无需昂贵的数据中心硬件。

什么是量化感知训练?

量化感知训练(QAT)是一种在训练或微调过程中模拟低精度行为的训练技术。这有助于模型在量化后保持更高的稳定性,并在低位宽下提升本地推理性能。

QAT 有何不同?

常见方法——训练后量化,是在模型训练完成后进行压缩。它简单易行,但模型可能因未经历低精度权重的训练而损失部分质量。

根据 Google AI Edge 文档,训练后量化是一个转换步骤,能降低模型大小并改善时延,通常仅带来很小的精度损失。不过,最终质量仍取决于模型本身与量化级别。

量化感知训练(QAT)采取了不同的路径。QAT 不是仅在训练后再量化,而是在训练或微调期间模拟低精度行为,帮助模型学会在稍后转换为更小格式时保持稳定,从而在压缩时尽可能减少质量损失。

这正是 Gemma 4 QAT 对本地 AI 有用的原因。它在设计时就考虑了量化,因此在占用更少内存的同时,能更好地保留原始模型质量。对于在消费级 GPU 上运行模型的用户而言,这意味着更好的低位稳定性、更低的显存占用,以及更实用的本地推理。

步骤 1:安装依赖并构建 llama.cpp

在下载模型之前,我们先准备本地运行环境。本文在一台配备 NVIDIA RTX 4090、24 GB 显存的机器上进行测试。我们将使用 llama.cpp 作为推理运行时,GGUF 作为模型格式,并使用 UD-Q4_K_XL 量化的模型文件。

测试环境:

  • GPU:NVIDIA RTX 4090
  • 显存:24 GB
  • 运行时:llama.cpp
  • 模型格式:GGUF
  • 量化:UD-Q4_K_XL

我们将对比以下两个 Unsloth GGUF 模型:

  • unsloth/gemma-4-12B-it-GGUF
  • unsloth/gemma-4-12B-it-qat-GGUF

首先,检查您的 GPU 是否可用。

nvidia-smi

RTX 4090 GPU overview

接下来,安装构建 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。这允许模型层在 GPU 上运行,而不只是使用 CPU。

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

Building Llama.cpp from source

构建完成后,我们将主要使用的二进制是 llama-server。它可在本地运行 GGUF 模型,并提供 OpenAI 兼容的 API 端点,便于通过 curl 进行请求。

步骤 2:下载 Gemma 4 12B 的非 QAT 和 QAT 模型

现在 llama.cpp 已就绪,我们可以从 Hugging Face 下载 Gemma 4 12B 的两个模型变体。我们将下载常规的指令微调模型以及 QAT 版本(均为 GGUF 格式)。

首先,安装带有更快下载支持的 Hugging Face Hub CLI。

pip install -U "huggingface_hub[hf_xet]" hf-xet hf_transfer

启用高性能 Xet 下载。

export HF_XET_HIGH_PERFORMANCE=1

下载 GGUF 格式的常规模型(Gemma 4 12B 指令版)。

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:使用 llama-server 运行非 QAT 模型

我们先运行常规的 Gemma 4 12B 指令模型,以便后续用相同设置与 QAT 版本进行对比。

使用 llama-server 启动非 QAT 模型。

./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

Serving the gemma-4-12B-it-GGUF model

这会在 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
}'

在该命令中,我们调用本地的 /v1/chat/completions 端点,其遵循 OpenAI 兼容的 API 格式。提示词要求模型解释量化感知训练;max_tokens 设为 512,以确保两个模型变体测试时输出长度一致。

在我们的 RTX 4090 测试中,非 QAT 模型的计时结果如下:

  • 提示词 Token 数:40
  • 补全 Token 数: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 模型。

Serving the gemma-4-12B-it-qat-GGUF

现在向 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 模型的计时结果如下:

  1. 提示词 Token 数:40
  2. 补全 Token 数:512
  3. 提示处理速度:593.93 tokens/sec
  4. 生成速度:101.65 tokens/sec
  5. 总耗时:5.114 sec

GPU 显存占用为:

8627 MiB / 24564 MiB

您也可以复制本地服务器 URL(http://localhost:8001)并在浏览器中打开:

Testing the gemma-4-12B-it-qat using the llama.cpp WebUI

这会打开内置的 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

提示词 Token 数

40

40

补全 Token 数

512

512

提示处理速度

510.22 tokens/sec

593.93 tokens/sec

生成速度

94.65 tokens/sec

101.65 tokens/sec

总耗时

5.516 sec

5.114 sec

显存占用

9247 MiB

8627 MiB

在本次运行中,QAT 模型既更快也更轻。它比非 QAT 模型少用 620 MiB 显存,约减少 6.7%。对于本地推理而言,这很有价值,因为在消费级 GPU 上运行大模型时,节省的每一份显存都很重要。

QAT 模型的生成速度也更快,从 94.65 tokens/sec 提升到 101.65 tokens/sec,约提升 7.4%,将壁钟时间从 5.516 秒缩短到 5.114 秒。

在日常使用中,QAT 模型的交互更顺滑、更灵敏。本次测试中响应质量也更稳定——这正是 QAT 的主要价值:帮助模型在低位量化下更少地损失质量,同时保留压缩模型在内存与速度上的优势。

结语

Google 正在为本地 AI 社区做出卓越贡献。借助 Gemma 4 等模型和 QAT 等技术,在完全离线、甚至在消费级硬件上运行强大的 AI 模型正逐步变为现实。

更令人兴奋的是,这不仅仅是缩小模型体积。有了 QAT,我们并非单纯为适配而牺牲质量,而是得到在低位格式下运行更佳的模型,全面提升本地 AI 体验。在本次测试中,QAT 模型相较非 QAT 版本更快、更轻、更顺畅。

我也期待测试该模型的 MTP 版本,它可能进一步提升速度,或许可达 2 倍。这将大幅降低将更多工作流迁移到本地 AI 的门槛。我可以在本地运行模型,将其与 OpenCode 等工具连接,直接用私有本地助手编辑项目文件。

这股本地 AI 浪潮正在改变我们看待 AI 系统使用方式的方式。那些曾经需要大型云端部署的任务,尤其是涉及文本、图像与视频输入的多模态工作流,正逐步在本地机器上实现。对于重视隐私、速度与控制的开发者、研究者与建设者而言,这是非常令人振奋的方向。

主题

热门 AI 课程

Tracks

开发 AI 应用程序

21小时
学习使用最新的 AI 开发工具创建 AI 驱动的应用程序,包括 OpenAI API、Hugging Face 和 LangChain。
查看详情Right Arrow
开始课程
查看更多Right Arrow