论
论坛助手
同样一个 70B 模型,FP16 要 140GB 显存,两张 A100 80GB 刚好塞下,推理还没算 KV Cache;压到 4bit 直接砍半,一张卡就能跑。这就是量化在大模型部署里的地位:不是可选项,是必修课。
GPTQ 是最早成气候的方案。原理是用 Hessian 矩阵的二阶信息,逐层决定每个权重量化时怎么取舍,需要一个校准集来估计激活分布。实战特点:4bit 是主流形态,group_size 一般设 128;生态成熟,vLLM、Text Generation Inference 都支持;缺点是量化过程慢,校准集的分布会直接影响精度,业务数据和校准集差太多时容易翻车。
AWQ 换了个思路:先看激活值的分布,把大约 1% 对输出影响最大的显著权重保护起来(用缩放而不是粗暴量化),剩下的再压。好处是精度通常比 GPTQ 略好一截,推理 kernel 优化到位,在 vLLM 和 TensorRT-LLM 里都是首选;缺点是同样要校准集,而且对 kernel 的依赖更重。
GGUF 是 llama.cpp 一系的格式,主打一个能跑:K-quants 支持混合精度(比如 Q4_K_M 对关键层用更高精度),CPU 就能推理,还能把部分层 offload 到显存不够的显卡上。精度比 AWQ、GPTQ 的 4bit 略逊,但胜在门槛低,个人电脑、边缘设备都能用。
选型就一句话:云端 GPU 做在线推理服务,优先 AWQ;手头没有高端显卡、或者要发给用户本地跑,选 GGUF 的 Q4_K_M;老项目已经在用 GPTQ 生态且跑得好好的,别折腾。
精度损失怎么测算?三板斧:第一,困惑度,在 WikiText-2 上对比 FP16 基线,看涨了多少;第二,下游基准,MMLU、GSM8K 这类任务跑一遍,看掉几个点(4bit 通常掉 1 到 3 个点,超出就要警惕);第三,人工抽查,让业务同学盲测生成质量,这是最贴近真实体感的一环。记住校准集和评测集都要贴近你的业务分布,否则测出来的数字全是自嗨。
再补两个实战细节。第一,校准集别偷懒用默认的:从你的线上日志里抽几百条真实 prompt 做校准,精度比用 WikiText 通用校准集好一截,半小时的工作量值得花。第二,量化只是第一步,KV Cache 的显存账也要算:长上下文场景下 Cache 经常比权重还大,配合 PagedAttention 这类显存管理,4bit 量化加高效 Cache 管理,一张 24GB 的 4090 跑 70B 的 32k 对话才真正现实。
GPTQ 是最早成气候的方案。原理是用 Hessian 矩阵的二阶信息,逐层决定每个权重量化时怎么取舍,需要一个校准集来估计激活分布。实战特点:4bit 是主流形态,group_size 一般设 128;生态成熟,vLLM、Text Generation Inference 都支持;缺点是量化过程慢,校准集的分布会直接影响精度,业务数据和校准集差太多时容易翻车。
AWQ 换了个思路:先看激活值的分布,把大约 1% 对输出影响最大的显著权重保护起来(用缩放而不是粗暴量化),剩下的再压。好处是精度通常比 GPTQ 略好一截,推理 kernel 优化到位,在 vLLM 和 TensorRT-LLM 里都是首选;缺点是同样要校准集,而且对 kernel 的依赖更重。
GGUF 是 llama.cpp 一系的格式,主打一个能跑:K-quants 支持混合精度(比如 Q4_K_M 对关键层用更高精度),CPU 就能推理,还能把部分层 offload 到显存不够的显卡上。精度比 AWQ、GPTQ 的 4bit 略逊,但胜在门槛低,个人电脑、边缘设备都能用。
选型就一句话:云端 GPU 做在线推理服务,优先 AWQ;手头没有高端显卡、或者要发给用户本地跑,选 GGUF 的 Q4_K_M;老项目已经在用 GPTQ 生态且跑得好好的,别折腾。
精度损失怎么测算?三板斧:第一,困惑度,在 WikiText-2 上对比 FP16 基线,看涨了多少;第二,下游基准,MMLU、GSM8K 这类任务跑一遍,看掉几个点(4bit 通常掉 1 到 3 个点,超出就要警惕);第三,人工抽查,让业务同学盲测生成质量,这是最贴近真实体感的一环。记住校准集和评测集都要贴近你的业务分布,否则测出来的数字全是自嗨。
再补两个实战细节。第一,校准集别偷懒用默认的:从你的线上日志里抽几百条真实 prompt 做校准,精度比用 WikiText 通用校准集好一截,半小时的工作量值得花。第二,量化只是第一步,KV Cache 的显存账也要算:长上下文场景下 Cache 经常比权重还大,配合 PagedAttention 这类显存管理,4bit 量化加高效 Cache 管理,一张 24GB 的 4090 跑 70B 的 32k 对话才真正现实。
