量化的核心思想:大模型默认用 FP16(16 位浮点数)存储权重和 KV 数据,每个元素占 2 字节。量化就是把这些高精度的数据,转换成更低精度的数据(比如 INT8、INT4、FP8),每个元素只占 1 字节甚至 0.5 字节。
核心价值:
- 显存占用减半:INT8 量化后,权重和 KV-Cache 的显存占用直接减半
- 吞吐量翻倍:更小的数据意味着更快的内存读写
量化分为两大类,vLLM 都支持:
- 权重量化:对模型的权重参数进行量化,降低权重的显存占用
- KV-Cache 量化:对 KV-Cache 进行量化,降低 KV-Cache 的显存占用
(这两个可以独立开启,也可以同时开启)
vLLM 支持的主流量化方式
FP8 量化原理(目前工业界首选):用 8 位浮点数(FP8)来存储权重和 KV-Cache,是 NVIDIA Hopper 架构(H100、H200)的原生支持。
- 精度损失极小,几乎和 FP16 无差异;不需要校准,直接转换;支持硬件加速,计算速度比 FP16 更快显存占用减半
适用场景:
- 有 H100/H200 GPU 的生产环境;对精度要求高的场景;高吞吐量的服务场景
vLLM 配置:bash运行
vllm serve model_name --quantization fp8 --kv-cache-dtype fp8AWQ 量化(最成熟的 INT4 量化)原理:Activation-aware Weight Quantization,激活感知权重量化。
- 针对权重进行 INT4 量化,每个权重只占 0.5 字节;会根据激活值的分布,对权重进行分组量化;精度损失非常小,几乎可以忽略;是目前 INT4 量化中精度最高、最稳定的方案
适用场景:
- 消费级 GPU 部署大模型;显存不足的场景;对精度要求较高的场景
vLLM 配置:bash运行
vllm serve model_name --quantization awq --kv-cache-dtype int8GPTQ 量化(经典 INT4 量化)原理:GPT Post-training Quantization,后训练量化。
- 也是 INT4 权重量化,和 AWQ 类似;是最早的 INT4 量化方案,生态最成熟;精度比 AWQ 略低一点,但差距很小;支持的模型非常多
适用场景:
- 已经有 GPTQ 量化好的模型;老版本的 vLLM 部署;对精度要求不是特别高的场景
vLLM 配置:bash运行
vllm serve model_name --quantization gptq --kv-cache-dtype int8纯 KV-Cache 量化
如果你不想量化权重,只想量化 KV-Cache,也可以单独开启:bash运行
vllm serve model_name --kv-cache-dtype int8- 权重还是 FP16,保证精度;KV-Cache 用 INT8 存储,显存占用减半;吞吐量提升 30% 左右;适合对精度要求极高,但又想提升吞吐量的场景
vLLM 量化参数调优核心参数
参数 | 作用 | 推荐值 |
| 权重量化方式 |
|
| KV-Cache 的数据类型 |
|
| 多 LoRA 时的 rank | 64 |
| 最大同时加载的 LoRA 数量 | 128 |