大模型量化知识总结

📑 目录

  • [1. 一句话理解模型量化](#1. 一句话理解模型量化)
  • [2. 量化有什么用](#2. 量化有什么用)
  • [3. 关键概念](#3. 关键概念)
    • [3.1 权重量化、激活量化、KV cache 量化](#3.1 权重量化、激活量化、KV cache 量化)
    • [3.2 PTQ 和 QAT](#3.2 PTQ 和 QAT)
    • [3.3 静态量化和动态量化](#3.3 静态量化和动态量化)
  • [4. 常见量化方法对比](#4. 常见量化方法对比)
  • [5. QLoRA 是什么](#5. QLoRA 是什么)
  • [6. 微调时量化 vs 导出后量化](#6. 微调时量化 vs 导出后量化)
    • [6.1 微调时量化:QLoRA](#6.1 微调时量化:QLoRA)
    • [6.2 导出后量化:GPTQ 等 PTQ](#6.2 导出后量化:GPTQ 等 PTQ)
  • [7. 在 LLaMA-Factory 中怎么使用](#7. 在 LLaMA-Factory 中怎么使用)
    • [7.1 安装依赖](#7.1 安装依赖)
    • [7.2 QLoRA 训练配置示例](#7.2 QLoRA 训练配置示例)
    • [7.3 训练时使用 8-bit](#7.3 训练时使用 8-bit)
    • [7.4 使用已经量化好的 GPTQ/AWQ 模型](#7.4 使用已经量化好的 GPTQ/AWQ 模型)
    • [7.5 合并 LoRA](#7.5 合并 LoRA)
    • [7.6 导出 GPTQ 量化模型](#7.6 导出 GPTQ 量化模型)
  • [8. 怎么选量化方案](#8. 怎么选量化方案)
  • [9. 常见坑](#9. 常见坑)

1. 一句话理解模型量化

模型量化(Model Quantization)就是把模型中原本用 FP32、FP16、BF16 等高精度格式保存或计算的数值,压缩成 INT8、INT4、NF4、FP4 等更低位宽格式。

大模型里最占空间的是权重。以参数量粗略估算:

精度 每个参数约占空间 7B 模型权重粗略占用 作用
FP32 4 bytes 约 28 GB 训练早期常见,推理太重
FP16/BF16 2 bytes 约 14 GB 常见训练/推理精度
INT8 1 byte 约 7 GB 推理省显存,质量通常较稳
INT4/NF4/FP4 0.5 byte 约 3.5 GB 显存压力大幅下降,常用于 QLoRA 或低显存部署

实际占用会更高,因为还包括 KV cache、激活值、优化器状态、LoRA adapter、临时张量、框架开销等。

2. 量化有什么用

  1. 降低显存门槛

    比如 7B/14B/32B 模型在 FP16 下可能放不进消费级显卡,4-bit 后可以显著降低加载门槛。

  2. 降低推理成本

    同样显存可以放更大的模型,或者同一张卡服务更多并发。

  3. 提升推理速度

    低比特权重减少内存带宽压力;但是否真正变快取决于推理框架、kernel、GPU 架构、batch size 和量化格式。

  4. 让低资源微调变得可行

    QLoRA 的思路是冻结 4-bit 量化后的基座模型,只训练少量 LoRA 参数,从而显著降低微调显存。

  5. 便于本地和边缘部署

    GGUF/llama.cpp、AWQ、GPTQ 等格式常用于本地推理、单卡部署或 CPU/边缘环境。

3. 关键概念

3.1 权重量化、激活量化、KV cache 量化

  • 权重量化:压缩模型参数,是 LLM 量化里最常见的对象。
  • 激活量化:压缩前向过程中的中间激活值,收益大,但更容易影响质量和稳定性。
  • KV cache 量化:长上下文推理时,KV cache 可能占用大量显存;部分推理框架支持 KV cache 量化来节省显存。

3.2 PTQ 和 QAT

  • PTQ(Post-Training Quantization,训练后量化):模型训练完成后再做量化。部署场景最常见,如 GPTQ、AWQ、GGUF 量化。
  • QAT(Quantization-Aware Training,量化感知训练):训练过程中模拟或引入量化影响,让模型适应低精度。成本更高,工程复杂度也更高。

3.3 静态量化和动态量化

  • 静态量化:先用校准数据确定量化参数,之后参数固定。GPTQ、AWQ 通常属于这一类。
  • 动态量化:加载或推理时动态处理,使用更方便,常见代表是 bitsandbytes 的 8-bit/4-bit 加载。

4. 常见量化方法对比

方法 常见位宽 主要用途 是否常需校准数据 优点 注意点
bitsandbytes LLM.int8 8-bit 推理、加载大模型 使用简单,Transformers 集成好 加速效果依赖环境
bitsandbytes 4-bit / QLoRA 4-bit, NF4/FP4 低显存 LoRA 微调 微调门槛低,LLaMA-Factory 易用 基座冻结,主要训练 LoRA
GPTQ 2/3/4/8-bit 常见 部署推理 精度保持较好,生态成熟 量化耗时,依赖校准集和推理 kernel
AWQ 3/4-bit 常见 部署推理 关注关键权重,硬件友好,推理常较快 不同框架支持差异明显
HQQ 2-8 bit 快速量化、无需校准 不需要校准,速度快 生态和兼容性要按框架确认
EETQ 8-bit 推理 通常否 简单快速 位宽选择不如 GPTQ/AWQ 丰富
GGUF 多种,如 Q4_K_M llama.cpp/CPU/本地推理 转换量化时需要 本地生态好,CPU 可用 LLaMA-Factory 不直接导出 GGUF,通常用 llama.cpp 转

5. QLoRA 是什么

QLoRA 可以理解为"4-bit 量化基座模型 + LoRA 微调":

  1. 把预训练基座模型以 4-bit 加载。
  2. 冻结量化后的基座权重。
  3. 插入少量可训练的 LoRA 参数。
  4. 训练时梯度通过量化模型回传,但真正更新的是 LoRA adapter。

QLoRA 论文提出了几个关键点:

  • NF4:适合近似正态分布权重的 4-bit 数据类型。
  • Double Quantization:再量化量化常数,进一步省显存。
  • Paged Optimizers:缓解训练过程中的显存峰值。

6. 微调时量化 vs 导出后量化

6.1 微调时量化:QLoRA

目标是让训练跑得动。

在 LLaMA-Factory 里,典型做法是在 LoRA 训练配置中加入:

yaml 复制代码
finetuning_type: lora
quantization_bit: 4
quantization_method: bitsandbytes
quantization_type: nf4
double_quantization: true

这表示:用 4-bit 方式加载基座模型,并在其上训练 LoRA。

6.2 导出后量化:GPTQ 等 PTQ

目标是让最终模型更适合部署。

典型流程是:

  1. 先完成 LoRA/QLoRA 微调,得到 adapter。
  2. 如果需要完整模型,先把 LoRA adapter 合并回未量化的基座模型。
  3. 再对合并后的完整模型做导出量化,如 GPTQ。

7. 在 LLaMA-Factory 中怎么使用

7.1 安装依赖

如果使用 CUDA 环境,通常需要安装 LLaMA-Factory 以及 bitsandbytes:

bash 复制代码
pip install -e ".[torch,bitsandbytes]"

Windows 平台上 bitsandbytes 兼容性要特别注意。LLaMA-Factory GitHub README 提到,在 Windows 平台启用 QLoRA 需要安装支持对应 CUDA 版本的 bitsandbytes 预编译版本。

7.2 QLoRA 训练配置示例

下面是一个偏通用的 SFT QLoRA 配置示例,可保存为 examples/train_lora/qwen_qlora_sft.yaml 之类的文件,再用 llamafactory-cli train 启动。

yaml 复制代码
### model
model_name_or_path: Qwen/Qwen3-4B-Instruct-2507
trust_remote_code: true

### method
stage: sft
do_train: true
finetuning_type: lora
lora_rank: 8
lora_target: all

### quantization
quantization_bit: 4
quantization_method: bitsandbytes
quantization_type: nf4
double_quantization: true

### dataset
dataset: identity,alpaca_en_demo
template: qwen3_nothink
cutoff_len: 2048
max_samples: 1000
preprocessing_num_workers: 16
dataloader_num_workers: 4

### output
output_dir: saves/qwen3-4b/qlora/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true
save_only_model: false
report_to: none

### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
ddp_timeout: 180000000
resume_from_checkpoint: null

启动:

bash 复制代码
llamafactory-cli train examples/train_lora/qwen_qlora_sft.yaml

最小理解:

  • quantization_bit: 4:启用 4-bit 加载,是 QLoRA 的关键。
  • quantization_method: bitsandbytes:使用 bitsandbytes 量化加载。
  • quantization_type: nf4:QLoRA 常用 NF4。
  • double_quantization: true:使用双重量化,进一步省显存。
  • finetuning_type: lora:训练 LoRA adapter,而不是全参训练。

7.3 训练时使用 8-bit

如果 4-bit 不稳定,或者显存略充足,可以尝试:

yaml 复制代码
quantization_bit: 8
quantization_method: bitsandbytes

8-bit 通常比 4-bit 更保守,显存节省少一些,但数值风险也较低。

7.4 使用已经量化好的 GPTQ/AWQ 模型

如果只是加载一个已经 GPTQ/AWQ 量化好的模型,通常直接把 model_name_or_path 指向对应模型即可,例如:

yaml 复制代码
model_name_or_path: TechxGenus/Meta-Llama-3-8B-Instruct-GPTQ

或:

yaml 复制代码
model_name_or_path: TechxGenus/Meta-Llama-3-8B-Instruct-AWQ

注意:如果模型本身已经是 PTQ 量化模型,再设置 quantization_bit 不一定会产生你期望的效果。训练、推理、导出的量化入口要分清。

7.5 合并 LoRA

训练得到 LoRA adapter 后,如果希望导出完整模型:

yaml 复制代码
### model
model_name_or_path: Qwen/Qwen3-4B-Instruct-2507
adapter_name_or_path: saves/qwen3-4b/qlora/sft
template: qwen3_nothink
trust_remote_code: true

### export
export_dir: saves/qwen3_sft_merged
export_size: 5
export_device: cpu
export_legacy_format: false

执行:

bash 复制代码
llamafactory-cli export examples/merge_lora/qwen3_lora_sft.yaml

重点:合并时使用未量化的基座模型,不要在这个配置里写训练时的 quantization_bit: 4

7.6 导出 GPTQ 量化模型

LLaMA-Factory 官方示例里的 GPTQ 导出配置类似:

yaml 复制代码
### model
model_name_or_path: Qwen/Qwen3-4B-Instruct-2507
template: qwen3_nothink
trust_remote_code: true

### export
export_dir: saves/qwen3_gptq
export_quantization_bit: 4
export_quantization_dataset: data/c4_demo.jsonl
export_size: 5
export_device: cpu
export_legacy_format: false

执行:

bash 复制代码
llamafactory-cli export examples/merge_lora/qwen3_gptq.yaml

关键参数:

  • export_quantization_bit:导出量化位宽。
  • export_quantization_dataset:校准数据集路径。
  • export_quantization_nsamples:校准样本数量,默认文档中为 128。
  • export_quantization_maxlen:校准输入最大长度,默认文档中为 1024。

8. 怎么选量化方案

场景 推荐优先尝试 原因
显存不够,想做 SFT 微调 QLoRA 4-bit NF4 最成熟的低显存微调路线
显存略够,想更稳一点 LoRA + 8-bit 或普通 LoRA 质量和稳定性更保守
已有 LoRA,想部署为完整模型 先合并,再 GPTQ/AWQ/GGUF 部署格式和训练格式分离
Transformers 内推理,想简单省显存 bitsandbytes 8-bit/4-bit 接入简单
vLLM/TGI 等服务部署 看框架支持的 AWQ/GPTQ/FP8 推理速度取决于 kernel 支持
CPU/本地客户端推理 GGUF + llama.cpp 本地生态成熟
极低显存但能接受质量风险 3-bit/2-bit/HQQ/AQLM 等 需要实际评测,不建议一上来就用

9. 常见坑

  1. 把 QLoRA 和 GPTQ 混为一谈

    QLoRA 是训练策略;GPTQ 是更典型的训练后量化部署方法。

  2. 合并 LoRA 时用了量化基座

    LLaMA-Factory 官方文档提醒,合并 LoRA 时应使用未量化基座,不要设置训练时的 quantization_bit

  3. 以为 4-bit 一定更快

    4-bit 一定省显存,但不一定在所有硬件/框架上更快。是否加速取决于 kernel、batch size、模型结构、推理引擎。

  4. 校准数据随便选

    GPTQ/AWQ 等 PTQ 方法的校准数据会影响量化效果,最好接近真实使用场景。

  5. 忽略 bitsandbytes 版本和平台兼容性

    Windows、NPU、ROCm、CUDA 版本都可能影响 bitsandbytes 可用性。遇到错误先核对 PyTorch、CUDA、bitsandbytes 版本。

  6. 以为量化后还能随便全参训练

    低精度权重直接训练往往不稳定。QLoRA 的关键是冻结量化基座,只训练 LoRA adapter。

相关推荐
leisoo809710 分钟前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
u01030552713 分钟前
长株潭AI节能应用构建核心方案
人工智能
ACP广源盛1392462567327 分钟前
蚂蚁百灵 Ling‑3.0‑flash 开源 + 昇腾 0‑Day 原生适配@ACP#GSV9001E 在国产算力矩阵中的机会与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
小柯南敲键盘30 分钟前
跨马翻译:跨境电商批量图片翻译与视频字幕一站式工具
人工智能·python·音视频
微硬创新34 分钟前
老旧产线改造:耐达讯自动化16路4‑20mA转PROFINET的工程实践
人工智能·网络协议·自动化·信息与通信
小智GEO观察1 小时前
衡量标准之变:企业传播的价值评估正在经历一次静默重构
人工智能·重构
天工开户011 小时前
2026 Facebook投放正在发生的7个变化
人工智能·经验分享·facebook
Henry-SAP1 小时前
SAP S/4HANA引领物流ERP新生态
人工智能·云原生·sap·erp
梦想的旅途21 小时前
企业微信 API 二次开发:AI 智能体接入外部群架构
人工智能·企业微信
Eloudy1 小时前
ReAct 原理简介
前端·javascript·人工智能·react.js·agent·gpu