大模型量化知识总结
目录1. 一句话理解模型量化2. 量化有什么用3. 关键概念3.1 权重量化、激活量化、KV cache 量化3.2 PTQ 和 QAT3.3 静态量化和动态量化4. 常见量化方法对比5. QLoRA 是什么6. 微调时量化 vs 导出后量化6.1 微调时量化QLoRA6.2 导出后量化GPTQ 等 PTQ7. 在 LLaMA-Factory 中怎么使用7.1 安装依赖7.2 QLoRA 训练配置示例7.3 训练时使用 8-bit7.4 使用已经量化好的 GPTQ/AWQ 模型7.5 合并 LoRA7.6 导出 GPTQ 量化模型8. 怎么选量化方案9. 常见坑1. 一句话理解模型量化模型量化Model Quantization就是把模型中原本用 FP32、FP16、BF16 等高精度格式保存或计算的数值压缩成 INT8、INT4、NF4、FP4 等更低位宽格式。大模型里最占空间的是权重。以参数量粗略估算精度每个参数约占空间7B 模型权重粗略占用作用FP324 bytes约 28 GB训练早期常见推理太重FP16/BF162 bytes约 14 GB常见训练/推理精度INT81 byte约 7 GB推理省显存质量通常较稳INT4/NF4/FP40.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 和 QATPTQPost-Training Quantization训练后量化模型训练完成后再做量化。部署场景最常见如 GPTQ、AWQ、GGUF 量化。QATQuantization-Aware Training量化感知训练训练过程中模拟或引入量化影响让模型适应低精度。成本更高工程复杂度也更高。3.3 静态量化和动态量化静态量化先用校准数据确定量化参数之后参数固定。GPTQ、AWQ 通常属于这一类。动态量化加载或推理时动态处理使用更方便常见代表是 bitsandbytes 的 8-bit/4-bit 加载。4. 常见量化方法对比方法常见位宽主要用途是否常需校准数据优点注意点bitsandbytes LLM.int88-bit推理、加载大模型否使用简单Transformers 集成好加速效果依赖环境bitsandbytes 4-bit / QLoRA4-bit, NF4/FP4低显存 LoRA 微调否微调门槛低LLaMA-Factory 易用基座冻结主要训练 LoRAGPTQ2/3/4/8-bit 常见部署推理是精度保持较好生态成熟量化耗时依赖校准集和推理 kernelAWQ3/4-bit 常见部署推理是关注关键权重硬件友好推理常较快不同框架支持差异明显HQQ2-8 bit快速量化、无需校准否不需要校准速度快生态和兼容性要按框架确认EETQ8-bit推理通常否简单快速位宽选择不如 GPTQ/AWQ 丰富GGUF多种如 Q4_K_Mllama.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 以及 bitsandbytespipinstall-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: nf4QLoRA 常用 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。