文件名 各种量化技术表格.md

各种量化技术表格

本文目录

正文

这是一份为你定制的完整综合指南。在执行数十万级的高并发任务或者分析 TTFT(首字延迟)、TPOT(每输出 Token 耗时)等关键指标时,量化格式与推理框架的匹配度会直接决定系统的极限吞吐量。

一、 LLM 量化技术、部署框架与资源消耗综合表 (以 Qwen3-14B 为例)

下表将之前的参数与资源占用进行了合并,并加入了 vLLMllama.cpp 的支持情况说明:

量化格式 / 后缀标识 底层位数 核心参数、特点与后缀解释 Qwen3-14B 大小 推荐分配显存 vLLM 支持度 llama.cpp 支持度
原生 FP16 / BF16 16-bit 未经量化的基准线。提供完美的预测精度,但对显存带宽(Memory Bandwidth)压力极大。 ~28.0 GB 34 - 40 GB 原生极佳 支持
_Q8_0 8-bit Q: Quantization, 8: 8位, 0: 基础对称量化。

几乎无损的整数压缩,不使用高级分层分块。
~14.9 GB 18 - 22 GB 实验性/部分 原生极佳
-FP8 8-bit $E_4M_3$ 格式。若硬件(Hopper/Ada)物理支持,无格式转换开销,极大降低 TPOT 并提升并发度。 ~14.9 GB 18 - 22 GB 原生极佳 不常用/支持弱
_Q6_K ~6.5 bpw K: K-Quants (高级分块), 6: 主6位。

比 Q8 略小,比 Q4 精度高。
~11.5 GB 14 - 16 GB 实验性/部分 原生极佳
_Q4_K_M (推荐) ~4.8 bpw M: Medium。

甜点配置。关键层高精度,其余4位。平衡了困惑度(Perplexity)与显存占用。
~8.5 GB 11 - 13 GB 实验性/部分 原生极佳
-AWQ 4-bit A: Activation-aware (激活感知)。

保护1%显著权重,对 GPU 显存读取极其友好,吞吐量极高。
~7.5 GB 10 - 12 GB 原生极佳 不支持(需转GGUF)
-GPTQ-Int4 4-bit G: 基于二阶海森矩阵补偿。

常配置 group-size=128act-order=true
~7.5 GB 10 - 12 GB 原生极佳 不支持(需转GGUF)
_IQ2_XXS ~2.0 bpw I: Importance (重要性矩阵), XXS: 极小版。

极限压缩方案,能力退化严重。
~3.6 GB 5 - 6 GB 不支持 原生极佳
-NF4 (QLoRA) 4-bit NF: NormalFloat。

专为微调设计的正态分布4位格式,不用于直接推理部署。
N/A N/A 不支持(需先合并权重) 不支持

部署框架总结vLLM 是为服务端高并发、极致吞吐量打造的,它与 AWQ、GPTQ、FP8 配合最佳;而 llama.cpp 是为消费级硬件和 CPU/GPU 混合卸载打造的,它是 GGUF (Q4/Q6/IQ等) 的绝对主场。虽然 vLLM 最近开始实验性支持 GGUF,但在生产级压测中,通常不会在 vLLM 上跑 GGUF。


二、 如果模型后缀只写 gguf、awq、GPTQ,属于默认哪种?

当开源社区或 Hugging Face 上的模型名称没有明确标注具体参数时,行业内通常遵循以下默认潜规则:

  1. **只标 ****.gguf**
    • GGUF 本质上只是一个“文件容器”(就像 .mp4)。如果一个作者只上传了一个 model.gguf 文件且没有 Q 标签,它通常是未量化的 FP16 原生格式转换过来的,或者是作者默认打包了最均衡的 **Q4_K_M** 格式。具体需要看文件大小来反推。
  2. **只标 ****-AWQ**
    • 默认代表 4-bit 量化,Group Size = 128,通常使用 GEMM(矩阵乘矩阵)算子优化版本。这是目前 AWQ 跑性能 Benchmark 最稳定的一套配置。
  3. **只标 ****-GPTQ**
    • 默认代表 4-bit 量化(Int4),Group Size = 128,且通常开启了 Act-Order = True(激活顺序优化)。

三、 关于 QLoRA 与矩阵维度的深度解答

1. QLoRA 不是微调算法吗?怎么也算量化?

你说得完全正确,LoRA (Low-Rank Adaptation) 本质上是微调算法。它之所以经常出现在“量化”的讨论版块里,是因为前面的 “Q” (Quantization)

在全量微调大模型时,即使是 14B 的模型,优化器状态和梯度更新也会轻易撑爆 80G 显存。QLoRA 的核心贡献是将“量化技术”作为“微调”的前置辅助手段:

它把庞大的基座模型强行用 NF4 (4位正态浮点) 格式加载到显存里,并冻结死(不更新梯度,只参与前向传播的计算)。这样省下了海量的显存,让你可以把那些额外的、需要更新的 LoRA 矩阵塞进显卡里。因此,它解决的也是“降低显存开销”这个核心量化命题。

2. QLoRA 训练的额外矩阵,参数与原始矩阵是否需要一致?不一致怎么办?

完全不需要一致,这就是 LoRA (低秩自适应) 的数学魔法。

假设基座模型中的某个线性层原始权重矩阵为 $W$,它的维度非常大,比如是 $d \times d$(假设 $4096 \times 4096$)。

LoRA 的做法是不直接去更新 $W$,而是在旁边“外挂”两个极小的矩阵 $A$ 和 $B$。

  • 降维矩阵 $A$ 的维度是 $d \times r$
  • 升维矩阵 $B$ 的维度是 $r \times d$
  • 这里的 $r$ 就是“秩” (Rank),通常设置得非常小,比如 8、16 或 64。前向传播的计算逻辑:

当输入数据 $x$ 进来时,原路走 $W$,新路走 $A$ 和 $B$。

由于矩阵乘法的结合律:$A \times B$ 的结果,其维度正好也是 $d \times d$!

也就是说,虽然 $A$ 和 $B$ 各自的参数量极少,但它们相乘后的维度与原始矩阵 $W$ 完全一致

合并(Merge)逻辑:

微调结束后,我们只需要做一步简单的矩阵加法:$W_{new} = W + (A \times B)$。

合并后,多余的 $A$ 和 $B$ 就可以直接丢弃了,模型结构和推理时与原生模型没有任何区别。

3. 一般 QLoRA 怎么配置?

在实际编写微调脚本(如使用 peftbitsandbytes 库)时,标准的 QLoRA 核心配置分为两部分:

部分 A:量化基座配置 (BitsAndBytesConfig)

  • load_in_4bit = True:开启 4 位加载。
  • bnb_4bit_quant_type = "nf4":指定使用 NF4 格式(比普通 INT4 精度更高)。
  • bnb_4bit_compute_dtype = torch.bfloat16:这是关键!存储用 4位,但计算时反量化回 BF16/FP16,以保证梯度计算不崩溃。

部分 B:LoRA 适配器配置 (LoraConfig)

  • r = 1664:秩大小。$r$ 越大,模型能学到的新知识越多,但需要的显存和合并后的文件稍大。
  • lora_alpha = 32128:缩放因子。行业惯例通常将 alpha 设置为 $r$ 的 2 倍。
  • target_modules = ["q_proj", "k_proj", "v_proj", "o_proj"]:你要把这些小矩阵挂载到哪些层上。早期只挂在 Attention 的 Q 投影和 V 投影上,现在的最佳实践是挂载到所有线性层 (all-linear),效果最接近全量微调。

# ###