一、大模型推理的挑战
随着大语言模型(LLM)参数量从百亿飙升至千亿级别,推理部署成为工程落地最关键的瓶颈。一个175B参数的模型以FP16精度加载需要约350GB显存,这对硬件成本提出了极高要求。量化技术通过降低模型权重和激活值的精度,在不显著损失模型质量的前提下,大幅降低显存占用和推理延迟。
二、训练后量化(PTQ)核心算法
2.1 GPTQ:基于Hessian矩阵的最优量化
GPTQ(Generative Pre-trained Transformer Quantization)是一种基于二阶信息的权重量化方法。其核心思想是在量化每一列权重时,利用Hessian矩阵的逆来补偿量化误差对后续层的影响。算法按列贪婪地量化权重,每一列量化后更新后续未量化权重以补偿残差误差。
GPTQ实现了3-4bit权重量化,在LLaMA-65B上4-bit量化后的困惑度(Perplexity)仅比FP16基准高约0.5,压缩比达到4倍以上。推理时通过反量化恢复到FP16进行矩阵乘法,现代GPU的INT4 Tensor Core可提供超过2倍的吞吐量提升。
2.2 AWQ:激活感知的权重量化
AWQ(Activation-aware Weight Quantization)观察到并非所有权重都同等重要:与激活值中较大通道对应的权重对模型输出影响更大。AWQ通过在对应通道上引入逐通道缩放因子(per-channel scaling),保护这些"显著"权重免受量化误差影响。
与GPTQ不同,AWQ不需要反向传播或Hessian计算,量化速度更快。在4-bit设置下,AWQ在多个基准上与GPTQ质量持平甚至更优,同时显著降低了量化过程本身的计算开销。
2.3 GGUF格式与llama.cpp生态
GGUF(GPT-Generated Unified Format)是llama.cpp项目推出的模型存储格式,专为CPU推理优化。它支持从2-bit到8-bit的混合精度量化,允许不同层使用不同位宽—例如注意力层保持较高精度,而FFN层可以使用更低精度。
GGUF通过量化类型(q4_K_M, q5_K_S等命名方案)提供了丰富的精度-效率权衡选项。以q4_K_M为例,它使用4-bit量化但为较高层级(如输出层)保留更多bits,在消费级硬件上的token生成速度可达20-30 tok/s。
三、KV Cache优化策略
3.1 基础KV Cache机制
在自回归生成中,每次新token的生成都依赖之前所有位置的Key和Value张量。KV Cache将这些中间结果缓存下来,避免重复计算。然而,对于长序列和大批量推理,KV Cache可能占用显存超过模型权重本身。
KV Cache的显存占用公式为:batch_size × num_layers × num_heads × head_dim × seq_len × 2 × 2 bytes。对于一个32层、32头、128维的两百万token长序列,仅KV Cache就需要约16GB显存。
3.2 vLLM的PagedAttention
vLLM引入了操作系统虚拟内存分页机制来管理KV Cache。传统方法为每个序列预分配连续显存空间,导致严重的内部碎片(平均浪费60-80%)。PagedAttention将KV Cache拆分为固定大小的块,按需动态分配,类似操作系统中虚拟页到物理帧的映射。
这一设计实现了显存超量分配,在序列结束前不需要回收内存。多个序列还能共享相同前缀的KV Cache块(如共享system prompt),进一步节省显存。在生产环境中,vLLM将吞吐量提升2-4倍。
3.3 GQA/MQA:减少KV Cache占用
Grouped-Query Attention(GQA)和Multi-Query Attention(MQA)通过减少KV头数量来间接压缩KV Cache。LLaMA 2 70B使用GQA,将32个Query头共享8个KV头,KV Cache直接缩减为原来的1/4。
四、总结
在实际部署中,需要综合考虑量化精度(PTQ vs QAT)、推理框架(vLLM vs TensorRT-LLM vs llama.cpp)、硬件平台等因素。对于延迟敏感的服务,TensorRT-LLM的FP8量化结合In-Fusion decoding可达到最低P99延迟;对于吞吐量优先的离线场景,vLLM的PagedAttention + INT8 AWQ是成本效益最佳的选择。大模型推理优化正在从"能用"走向"好用"。

发表评论 取消回复