📑 目录
- 1. 一句话理解模型量化
- 2. 量化有什么用
- 3. 关键概念
- 3.1 权重量化、激活量化、KV cache 量化
- 3.2 PTQ 和 QAT
- 3.3 静态量化和动态量化
- 4. 常见量化方法对比
- 5. QLoRA 是什么
- 6. 微调时量化 vs 导出后量化
- 6.1 微调时量化:QLoRA
- 6.2 导出后量化:GPTQ 等 PTQ
- 7. 在 LLaMA-Factory 中怎么使用
- 7.1 安装依赖
- 7.2 QLoRA 训练配置示例
- 7.3 训练时使用 8-bit
- 7.4 使用已经量化好的 GPTQ/AWQ 模型
- 7.5 合并 LoRA
- 7.6 导出 GPTQ 量化模型
- 8. 怎么选量化方案
- 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. 量化有什么用
降低显存门槛
比如 7B/14B/32B 模型在 FP16 下可能放不进消费级显卡,4-bit 后可以显著降低加载门槛。降低推理成本
同样显存可以放更大的模型,或者同一张卡服务更多并发。提升推理速度
低比特权重减少内存带宽压力;但是否真正变快取决于推理框架、kernel、GPU 架构、batch size 和量化格式。让低资源微调变得可行
QLoRA 的思路是冻结 4-bit 量化后的基座模型,只训练少量 LoRA 参数,从而显著降低微调显存。便于本地和边缘部署
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 微调”:
- 把预训练基座模型以 4-bit 加载。
- 冻结量化后的基座权重。
- 插入少量可训练的 LoRA 参数。
- 训练时梯度通过量化模型回传,但真正更新的是 LoRA adapter。
QLoRA 论文提出了几个关键点:
- NF4:适合近似正态分布权重的 4-bit 数据类型。
- Double Quantization:再量化量化常数,进一步省显存。
- Paged Optimizers:缓解训练过程中的显存峰值。
6. 微调时量化 vs 导出后量化
6.1 微调时量化:QLoRA
目标是让训练跑得动。
在 LLaMA-Factory 里,典型做法是在 LoRA 训练配置中加入:
finetuning_type:loraquantization_bit:4quantization_method:bitsandbytesquantization_type:nf4double_quantization:true这表示:用 4-bit 方式加载基座模型,并在其上训练 LoRA。
6.2 导出后量化:GPTQ 等 PTQ
目标是让最终模型更适合部署。
典型流程是:
- 先完成 LoRA/QLoRA 微调,得到 adapter。
- 如果需要完整模型,先把 LoRA adapter 合并回未量化的基座模型。
- 再对合并后的完整模型做导出量化,如 GPTQ。
7. 在 LLaMA-Factory 中怎么使用
7.1 安装依赖
如果使用 CUDA 环境,通常需要安装 LLaMA-Factory 以及 bitsandbytes:
pipinstall-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启动。
### modelmodel_name_or_path:Qwen/Qwen3-4B-Instruct-2507trust_remote_code:true### methodstage:sftdo_train:truefinetuning_type:loralora_rank:8lora_target:all### quantizationquantization_bit:4quantization_method:bitsandbytesquantization_type:nf4double_quantization:true### datasetdataset:identity,alpaca_en_demotemplate:qwen3_nothinkcutoff_len:2048max_samples:1000preprocessing_num_workers:16dataloader_num_workers:4### outputoutput_dir:saves/qwen3-4b/qlora/sftlogging_steps:10save_steps:500plot_loss:trueoverwrite_output_dir:truesave_only_model:falsereport_to:none### trainper_device_train_batch_size:1gradient_accumulation_steps:8learning_rate:1.0e-4num_train_epochs:3.0lr_scheduler_type:cosinewarmup_ratio:0.1bf16:trueddp_timeout:180000000resume_from_checkpoint:null启动:
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 不稳定,或者显存略充足,可以尝试:
quantization_bit:8quantization_method:bitsandbytes8-bit 通常比 4-bit 更保守,显存节省少一些,但数值风险也较低。
7.4 使用已经量化好的 GPTQ/AWQ 模型
如果只是加载一个已经 GPTQ/AWQ 量化好的模型,通常直接把model_name_or_path指向对应模型即可,例如:
model_name_or_path:TechxGenus/Meta-Llama-3-8B-Instruct-GPTQ或:
model_name_or_path:TechxGenus/Meta-Llama-3-8B-Instruct-AWQ注意:如果模型本身已经是 PTQ 量化模型,再设置quantization_bit不一定会产生你期望的效果。训练、推理、导出的量化入口要分清。
7.5 合并 LoRA
训练得到 LoRA adapter 后,如果希望导出完整模型:
### modelmodel_name_or_path:Qwen/Qwen3-4B-Instruct-2507adapter_name_or_path:saves/qwen3-4b/qlora/sfttemplate:qwen3_nothinktrust_remote_code:true### exportexport_dir:saves/qwen3_sft_mergedexport_size:5export_device:cpuexport_legacy_format:false执行:
llamafactory-cliexportexamples/merge_lora/qwen3_lora_sft.yaml重点:合并时使用未量化的基座模型,不要在这个配置里写训练时的quantization_bit: 4。
7.6 导出 GPTQ 量化模型
LLaMA-Factory 官方示例里的 GPTQ 导出配置类似:
### modelmodel_name_or_path:Qwen/Qwen3-4B-Instruct-2507template:qwen3_nothinktrust_remote_code:true### exportexport_dir:saves/qwen3_gptqexport_quantization_bit:4export_quantization_dataset:data/c4_demo.jsonlexport_size:5export_device:cpuexport_legacy_format:false执行:
llamafactory-cliexportexamples/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. 常见坑
把 QLoRA 和 GPTQ 混为一谈
QLoRA 是训练策略;GPTQ 是更典型的训练后量化部署方法。合并 LoRA 时用了量化基座
LLaMA-Factory 官方文档提醒,合并 LoRA 时应使用未量化基座,不要设置训练时的quantization_bit。以为 4-bit 一定更快
4-bit 一定省显存,但不一定在所有硬件/框架上更快。是否加速取决于 kernel、batch size、模型结构、推理引擎。校准数据随便选
GPTQ/AWQ 等 PTQ 方法的校准数据会影响量化效果,最好接近真实使用场景。忽略 bitsandbytes 版本和平台兼容性
Windows、NPU、ROCm、CUDA 版本都可能影响 bitsandbytes 可用性。遇到错误先核对 PyTorch、CUDA、bitsandbytes 版本。以为量化后还能随便全参训练
低精度权重直接训练往往不稳定。QLoRA 的关键是冻结量化基座,只训练 LoRA adapter。