真实面经题目 · 原创解析
LLM 量化中 W4A16 表示什么,它在权重位宽和激活精度上有什么取舍?
这题考 LLM 量化命名和工程取舍。W4A16 表示权重 4 bit、激活 16 bit,通常属于 weight-only 或偏权重量化路线,核心收益是降低权重显存和内存带宽,核心代价是权重误差、反量化开销、kernel 适配和部分能力回归。
真实面经题目 · 原创解析
这题考 LLM 量化命名和工程取舍。W4A16 表示权重 4 bit、激活 16 bit,通常属于 weight-only 或偏权重量化路线,核心收益是降低权重显存和内存带宽,核心代价是权重误差、反量化开销、kernel 适配和部分能力回归。
W4A16 中 W 指 weight,A 指 activation,所以它表示权重用 4 bit 表示,激活仍保持 16 bit,通常是 FP16 或 BF16。它和 W8A8 的差别在于:W4A16 主要压缩权重,不强行把动态激活也量化到 INT8 或更低,因此实现和精度压力相对小;但因为激活仍是 16 bit,activation 显存、KV Cache 和部分计算路径不会像全量 INT8 那样一起下降。工程上,权重一般按 group、channel 或 block 存 INT4,再配 scale、zero point 或更复杂的码本,推理时在 GEMM 路径中反量化到 FP16/BF16 参与计算,或者使用支持 INT4 的 fused kernel。收益来自模型权重从 FP16 的 16 bit 降到 4 bit,理论权重主体约四分之一,但要扣除 scale、zero point、packing 和对齐开销。代价是 4 bit 格点很粗,outlier、敏感层、embedding、lm head、attention projection 和 FFN 大矩阵都可能造成精度损失,需要 GPTQ/AWQ/校准/混合精度/保留关键层等方式控制。最终是否值得,要看显存是否从放不下变成放得下,decode 吞吐是否受内存带宽限制,kernel 是否真的加速,以及困惑度、长上下文、数学代码、安全和业务任务是否可接受。
W4A16 是量化格式的简写:W4 表示权重 4 bit,A16 表示激活 16 bit。它不是说所有张量都是 4 bit,也不是说输出概率是 4 bit。面试中先把命名讲清,后面才能讨论显存和精度。
激活仍保持 FP16/BF16,意味着动态激活分布、activation outlier 和在线校准问题被部分绕开。权重是静态的,可以离线校准、分组定标和压缩存储,所以 W4A16 往往比同时量化激活的方案更容易落地。
FP16 权重每个参数 2 字节,INT4 权重主体每个参数 0.5 字节,理论上权重主体约降到四分之一。但实际还要存 scale、zero point、group metadata,并处理 packing、alignment 和某些层保留高精度,所以端到端显存收益小于理想值。
A16 的好处是保留激活动态范围,避免低比特激活量化对 outlier、层间分布变化和 attention softmax 的强扰动。限制是 activation buffer、KV Cache 和某些计算带宽不随 W4 等比例下降,prefill 大 batch 或长上下文时收益可能没有只看权重大小那么大。
4 bit 只有很少量化格点,scale 粒度非常重要。per-tensor 简单但误差大,per-channel 或 group-wise 更常见;group size 越小精度通常越好,但 metadata 和反量化开销越大。outlier 通道、敏感层和输出层可能需要更高精度或特殊处理。
如果推理时先把 INT4 权重完整反量化回 FP16 再算,显存峰值和带宽收益会打折。更理想的是在 GEMM kernel 中边读 INT4、边反量化、边累加,或者利用硬件 INT4 路径。否则 W4A16 可能只是省显存,不一定显著提速。
W4A16 要同时看 perplexity、通用 benchmark、业务任务、长上下文、代码数学、多轮对话、安全拒答、幻觉率和格式遵循。系统侧看权重显存、吞吐、TTFT、单 token 延迟、并发上限、成本和 kernel 稳定性。
W4A16 主要把权重量化到 4 bit,激活保持 16 bit;W8A8 同时把权重和激活量化到 8 bit。前者通常更省权重显存且激活精度风险较小,后者更可能利用 INT8 计算加速,但激活量化难度更高。
4 bit 格点少,如果整个矩阵共享一个 scale,某些 outlier 会拉大步长,让大量普通权重误差变大。按通道或 group 定标能更贴合局部分布,但会增加 scale 元数据和反量化处理。
不一定。如果瓶颈是权重带宽,且有高效 fused INT4 kernel,decode 吞吐可能提升;如果反量化开销大、prefill 是计算瓶颈、或硬件 INT4 支持差,可能主要只省显存,速度收益有限。
embedding、lm head、部分 attention projection、outlier 明显的 FFN 层、前后几层或对任务特别敏感的层可能需要保留 FP16/BF16 或更高比特,具体要靠校准和回归评估决定。
通常不会直接降低。W4A16 的 A16 指激活 16 bit,KV Cache 如果仍按 FP16/BF16 存,就不会因为权重 4 bit 自动变小。要降低 KV Cache 需要单独做 KV cache quantization 或滑窗、分页等策略。