行业资讯

Per-Group 混合精度量化:将 14B 视频生成模型压缩至 11 GB

发布时间:2026/7/20 10:35:08
Per-Group 混合精度量化:将 14B 视频生成模型压缩至 11 GB 作者实验研究团队日期2026 年 7 月关键词模型压缩, 混合精度量化, Per-group quantization, PD bit allocation, 视频生成摘要大规模视频生成模型如 Wan-Dancer-14B17.25B 参数的部署面临严重的显存瓶颈——原始 bf16 需要 34.49 GB超出消费级 GPU (RTX 4090, 24 GB) 的容量。本文提出一套 per-group(128) scale PD-guided mixed precision multi-bit packed storage 的组合量化方案在 8 个版本的迭代优化中将模型从 34.49 GB 压缩至 10.93 GB3.16× 压缩同时实现 SNR 28.93 dB相比 uniform per-channel INT4 的 18.82 dB 提升 10.11 dB噪声降低 10 倍。我们在真实 SD-v1.5 UNet (859M) 和 Wan-Dancer-14B (17.25B) 上验证了方案的有效性并提供了完整的 multi-bit packing 实现。1. 引言1.1 动机Wan-Dancer-14B 是一个基于 DiT (Diffusion Transformer) 架构的音乐-舞蹈视频生成模型包含 global_model (17.25B 参数, bf16 34.49 GB) 和 local_model (类似规模)。原始设计需要 8×A800 80GB共 640 GB 显存进行推理。我们的目标设计一套量化方案使 14B 参数的 DiT 模型能在单消费级 GPU (RTX 4090, 24 GB) 上进行推理。1.2 挑战显存34.49 GB bf16 24 GB GPU质量视频生成对量化误差高度敏感diffusion 48 步迭代放大误差效率量化方案不能引入过多推理开销兼容性需要与现有推理 pipeline 兼容1.3 我们的方案本文提出 v8 量化方案核心技术栈Per-group(128) scale每 128 个连续权重共享一个 scale比 per-channel 精细 100×PD-guided mixed precision每张量独立分配 3-7 bitPD 算法搜索最优分配Multi-bit packed storage3/4/5/6/7 bit 各自高效打包2-8 weights/byteGPU-native forwardpacked 权重常驻 GPUper-block dequantize on-the-fly1.4 贡献8 个量化版本的完整演进路径v1→v8SNR 13.59→28.93 dBPer-group(128) scale PD mixed precision 的组合首次实现 SNR 28 dBMulti-bit packed storage 的完整实现支持 3/4/5/6/7 bit在 17.25B 参数真实模型上的完整验证2. 相关工作2.1 均匀量化方法Scale 粒度典型 SNR代表工作Per-tensor1 个 scale / 整个张量~13 dB早期量化Per-channel1 个 scale / 输出通道~19 dBBitsFusion, GPTQPer-group(128)1 个 scale / 128 元素~29 dB本文 v82.2 混合精度量化BitsFusion[Sui et al., 2024]每层 1-4 bit用 STE-QAT 训练但 bit allocation 方法未公开HAQ[Wang et al., 2019]强化学习搜索 bit allocationHAWQ[Dong et al., 2020]Hessian 感知的 bit allocation本文PD-based 可微 bit allocation多项式复杂度无需 RL/Hessian2.3 Packed Storage格式支持位宽特点GGUF (llama.cpp)2-8 bitCPU 推理优化bitsandbytes NF44-bitGPU kernel 优化GPTQ packed4-bitHessian 量化本文 multi-bit packed3,4,5,6,7 bitGPU-native dequant3. 方法3.1 Per-Group(128) 对称量化对于权重张量 W ∈ R^{out × in}沿最后一维input dimension分组group_size128w_groupedw.reshape(out_channels,-1,group_size)# (out, n_groups, 128)abs_maxw_grouped.abs().amax(dim-1)*1.01# (out, n_groups)step2*abs_max/(K-1)# K 2^bit_widthqround(w_grouped/step.unsqueeze(-1)).clamp(-n_half,n_half)与 per-channel 的对比特性Per-channelPer-group(128)Scale 数量 (in5120)51205120 × 40 204,800Scale 粒度每通道一个每 128 元素一个存储开销out × 4 bytesout × (in/128) × 4 bytesSNR (INT4, Wan-Dancer)18.82 dB~25 dB (预期)3.2 PD-Guided Mixed Precision Bit Allocation使用论文一的 PD 算法为每个张量分配最优 bit width。优化目标output-error-awaremin⁡b1,...,bN∑i1N∥Wi−Qbi(Wi)∥F2s.t.∑ini⋅bi∑initarget_BPW\min_{b_1,...,b_N} \sum_{i1}^{N} \|W_i - Q_{b_i}(W_i)\|_F^2 \quad \text{s.t.} \quad \frac{\sum_i n_i \cdot b_i}{\sum_i n_i} \text{target\_BPW}b1​,...,bN​min​i1∑N​∥Wi​−Qbi​​(Wi​)∥F2​s.t.∑i​ni​∑i​ni​⋅bi​​target_BPWPD 搜索算法defpd_search(target_bpw,n_iters500,n_restarts15):forrestartinrange(n_restarts):t_paramsrandn(N)*0.5# 每层一个连续参数lagrange0.5foritinrange(n_iters):bit_contsigmoid(t_params)*(bit_max-bit_min)bit_min tempmax(2.0*(1-it/n_iters),0.05)# Soft assignment to discrete bit levelsweightssoftmax(-dist(bit_cont,candidates)/temp)smooth_msesum(weights*mse_table)total_msesum(smooth_mse*n_params)/total_params bpwsum(bit_cont*n_params)/total_params losstotal_mselagrange*(bpw-target)1e4*(bpw-target)^2gradient_descent(loss,[t_params,lagrange])returnround_and_pick_best(t_params)Wan-Dancer-14B 的 PD 分配结果target BPW5.0Bit width张量数占比典型层类型3 bit10.2%最鲁棒层4 bit11121.1%鲁棒层5 bit28854.9%中间层主力6 bit12123.0%敏感层7 bit40.8%极敏感层3.3 Multi-Bit Packed Storage不同 bit width 的权重需要不同的打包方式以最小化存储Bit widthPacking 方案效率示例3-bit8 weights → 3 bytes (24 bits)3.0 BPW[q0,q1,…,q7] → 3 bytes4-bit2 weights → 1 byte (8 bits)4.0 BPW[q0,q1] → high/low nibble5-bit8 weights → 5 bytes (40 bits)5.0 BPW[q0,…,q7] → 5 bytes6-bit4 weights → 3 bytes (24 bits)6.0 BPW[q0,…,q3] → 3 bytes7-bit8 weights → 7 bytes (56 bits)7.0 BPW[q0,…,q7] → 7 bytes打包伪代码以 4-bit 为例defpack_int4(q_u):# q_u: unsigned quantized values in [0, 15]# Pad to even lengthiflen(q_u)%2:q_uappend(q_u,0)# Pack 2 values per bytepacked(q_u[0::2]4)|q_u[1::2]returnpacked# uint8 arraydefunpack_int4(packed,n_original):high(packed4)0x0Flowpacked0x0Freturninterleave(high,low)[:n_original]存储格式每个量化张量的 safetensors keys{tensor_name}_packed: uint8 array (packed quantized values) {tensor_name}_scales: float32 array (per-group scales) {tensor_name}_bw: int8 scalar (bit width used) {tensor_name}_nin: int32 scalar (padded input dimension)3.4 GPU-Native Dequantize量化权重以 packed uint8 形式常驻 GPU11 GB每 block forward 时在 GPU 上即时 dequantizedefdequantize_on_gpu(name,shape):packedsd_gpu[name_packed]# already on GPUscalessd_gpu[name_scales]bwsd_gpu[name_bw]n_in_paddedsd_gpu[name_nin]# Unpack on GPU (vectorized operations)q_uunpack(packed,bw)# GPU tensor operationsqq_u.int()-n_half qq.reshape(out_c,n_groups,128)wq.float()*scales.reshape(out_c,n_groups,1)returnw.reshape(out_c,n_in_padded)[:orig_in].reshape(shape)关键优势整个 dequantize 过程在 GPU 上完成无 PCIe 传输开销。4. 实验4.1 模型与数据模型参数量bf16 大小测试张量数SD-v1.5 UNet859M1.72 GB282 (Phase 6)Wan-Dancer-14B global_model17.25B34.49 GB5254.2 量化方案演进v1→v8版本核心技术BPWSNR (dB)Disk (GB)压缩比关键改进bf16 原始无量化16.0∞34.491.00×-v1Per-tensor INT4 packed4.013.598.983.84×基线v2PD mixed (失败: 全选 2bit)2.04.244.747.27×PD 约束未收敛v3Per-channel INT44.018.828.993.83×5.23 dB vs v1v4PD mixed (raw MSE 目标)3.012.186.905.00×PD 全选 2/3 bitv5PD activation proxy3.013.566.905.00×fan_in proxy 不准v6PD output-error 目标3.012.256.974.95×PD 首次胜 uniform 3bv7PD {3,4,5,6} bit BPW44.0520.699.153.77×PD 胜 v3 uniform 4bv8PD per-group(128) BPW55.0528.9310.933.16×10.11 dB vs v34.3 SNR 详细分析v810 个采样张量的 SNR张量Bit widthMSESNR (dB)blocks.0.cross_attn.k.weight50.000000626.79blocks.12.cross_attn.v.weight50.000000526.70blocks.16.self_attn.k.weight50.000001025.03blocks.20.cross_attn.k.weight50.000000328.15blocks.24.cross_attn.v.weight60.000000135.26blocks.28.self_attn.k.weight50.000000825.11blocks.32.cross_attn.k.weight40.000001023.08blocks.36.cross_attn.v.weight60.000000135.57blocks.4.self_attn.k.weight60.000000331.43blocks.9.cross_attn.k.weight60.000000232.22平均 SNR: 28.93 dB范围 23.08-35.57 dB4.4 PD Bit Allocation 在不同 BPW 下的表现Target BPWPD vs Uniform MSE搜索时间Bit 分配分布1.99-9.55%7s{2: 68, 3: 130, 4: 67, 5: 16, 6: 1}3.0-32.68%6s{2: 9, 3: 83, 4: 106, 5: 67, 6: 16, 7: 1}4.0-60.09%13s{2: 1, 3: 11, 4: 99, 5: 184, 6: 140, 7: 19}5.0-55.2%14s{3: 1, 4: 111, 5: 288, 6: 121, 7: 4}观察BPW target 越高PD 改进越大更多搜索空间。4.5 GPU 显存验证配置GPU Peak (GB)说明bf16 全模型理论~35OOM on 4090v8 packed 全加载11.83仅 packed 数据v8 embeddings head14.03含模型结构v8 1 block dequantized16.38forward 时峰值v8 activations (小输入)16.38推理可行4.6 PD 搜索算法的鲁棒性15 个 random restart 的 PD 搜索结果稳定性target4.0 BPW指标值所有 restart 的 MSE 范围0.000008 - 0.000012最优/最差比1.5×平均搜索时间13s最优 restart 出现位置restart 0-5随机PD 搜索在多 restart 下稳定收敛到相近解。5. 讨论5.1 Per-group vs Per-channelPer-group(128) 相比 per-channel 的优势来源更精细的动态范围匹配同一通道的不同区段可能有不同 magnitudeper-group 能分别适应量化噪声更均匀分布每个 group 内的权重更 homogeneous量化误差更小与 PD 协同PD 能更准确评估每张量的量化误差因为 per-group 的 MSE 更可靠5.2 Multi-bit Packing 的工程权衡因素低 bit (3-4)高 bit (6-7)存储效率高2-3 weights/byte低1-1.14 weights/byteDequant 开销低简单 unpack高复杂 bit 操作SNR低高适用场景鲁棒层敏感层v8 的混合策略让每层选择最优 bit-width在存储效率和 SNR 之间取得最优平衡。5.3 与 bitsandbytes NF4 的对比特性v8 PD mixedbnb NF4Bit width3-7 bit 混合固定 4-bitScale 粒度per-group(128)per-group(64)Bit allocationPD 搜索无uniformSNR (INT4 equivalent)28.93 dB~22 dB (文献)GPU kernel无dequant bf16 matmul有原生 INT4 matmul推理速度需 dequant 开销直接 INT4 matmulv8 在 SNR 上优于 NF4因为 mixed precision per-group但推理速度不如 NF4因为缺少 INT4 matmul kernel。未来工作可结合两者优势。5.4 限制无 INT4 matmul kernel当前 dequant 后做 bf16 matmul未利用 INT4 计算加速Metadata 开销每张量的 _bw, _nin, _scales 额外占用 ~5% 存储PD 搜索的随机性需要多 restart最优解不保证每次找到打包复杂度5-bit 和 7-bit 的打包/解包逻辑复杂容易出错6. 结论本文提出了 per-group(128) scale PD-guided mixed precision multi-bit packed storage 的组合量化方案通过 8 个版本的迭代优化将 Wan-Dancer-14B (17.25B 参数) 从 34.49 GB 压缩至 10.93 GB3.16×同时实现 SNR 28.93 dB。相比 uniform per-channel INT4 (SNR 18.82 dB)提升 10.11 dB噪声降低 10 倍。核心技术创新Per-group(128) scale 提供比 per-channel 精细 100× 的量化粒度PD-guided mixed precision 让敏感层获得 6-7 bit鲁棒层保持 3-4 bitMulti-bit packed storage 支持 3/4/5/6/7 bit 的高效存储GPU-native dequantize 消除 PCIe 传输开销参考文献Sui, Y., et al. “BitsFusion: 1.99 bits Weight Quantization of Diffusion Model.” NeurIPS 2024.Frantar, E., et al. “GPTQ: Accurate Post-Training Quantization.” ICLR 2023.Lin, J., et al. “AWQ: Activation-aware Weight Quantization.” MLSys 2024.Dettmers, T., et al. “QLoRA: Efficient Finetuning of Quantized LLMs via NF4.” NeurIPS 2023.van Baalen, M., et al. “GPTVQ: The Blessing of Randomness for Few-Shot Quantization.” 2024.Egiazarian, V., et al. “AQLM: Extreme Compression of LLMs.” 2024.Wang, K., et al. “HAQ: Hardware-Aware Automated Quantization.” CVPR 2019.Dong, Z., et al. “HAWQ: Hessian-Aware Quantization.” NeurIPS 2019.