大模型推理优化——KV 缓存与量化的取舍
大模型推理阶段的显存与成本优化。以 27B 模型在 A100 80GB 上的部署为例,对比 KV 缓存与量化两条路线的取舍与精度代价,并给出部署组合建议。
说明
2026 年 9 月,大模型推理侧两大杠杆——KV Cache(压显存)与量化(压显存 + 提带宽)——成为大规模落地前的最后瓶颈。本文按"KV 缓存机制 → 量化方案 → 生产部署组合 → 成本与精度平衡点 → 实操案例 → 进阶优化 → 硬件选型 → 成本模型 → 监控 → 误判与规避 → 决策树"主线拆,覆盖 27B 级别模型单卡 A100 80 GB 的生产路径与 70B+ 多卡部署的关键参数。
包含
- KV Cache 机制:大小公式 + 推荐位宽 + PagedAttention 价值
- 量化方案:BF16 / FP16 / FP8 / INT8 / INT4 五次递进 + 精度损失量级
- 生产部署组合:27B 单卡 A100 / 70B 双卡 H100 / 多模态 72B 的方案对照
- 成本与精度平衡点:显存成本 vs 精度损失的量级对比 + 拐点判断
- 实操案例:27B 模型 A100 80 GB 显存预算与吞吐基准
- 进阶优化:连续批处理 / FlashAttention(闪存注意力)/ 算子融合 / 多卡并行 / OOM 预防
- 硬件选型速查:A100 / H100 / MI300X / T4 / L4 推理侧适配
- 成本模型:每 1K token 的显存/延迟/美元成本三轴
- 监控系统与误判规避:OOM 错、精度回退、KS 指标不稳定
不包含
- FlashAttention(闪存注意力)/ 算子融合的源码实现与自定义 CUDA kernel 写法,本篇只列结论与典型增益
- 各推理框架(vLLM / SGLang / TensorRT-LLM / Triton)的配置参数手册,本篇只列 API 名
- 训练侧优化(混合精度、ZeRO / FSDP、梯度累积),本篇只推理侧
- 多模态模型(视频 / 音频)的特殊部署方案,本篇以文本为主
一 KV Cache:为什么占满显存
自回归生成时,每个新 token 都要和之前所有 token 做注意力计算。为了避免重算,把之前 token 的 Key/Value 矩阵存下来(KV Cache)。它的大小与上下文长度 × 层数 × 头数 × 隐藏维度成正比,是长上下文场景下显存的最大占用项。
以 27B 模型为例(28 层、32 头 / KV 8 头、head_dim 128、GQA、BF16),单条请求 4K 上下文 KV ≈ 0.47 GB,32K 单条 ≈ 3.76 GB;若并发 8,4K 下实际 ≈ 3.76 GB,32K 下 ≈ 30 GB。BF16 权重 ~54 GB 时,长上下文 + 并发下 KV 可逼近甚至超过权重本体。
参考:vLLM PagedAttention 论文、HuggingFace Accelerate KV Cache 文档、27B 模型卡(2026-08)。
二 量化:从 BF16 到 INT4
| 精度 | 字节/参数 | 显存降幅 | 精度损失 | 适用场景 |
|---|---|---|---|---|
| BF16(基线) | 2 B | — | — | 高精度要求 / 对照基准 |
| INT8 | 1 B | 50% | 1-3% | 通用服务(成本减半) |
| FP8(H100 起) | 1 B | 50% | 1-2% | 新一代硬件 / 低精度容忍 |
| INT4(AWQ/GPTQ) | 0.5 B | 75% | 5-12% | 本地部署 / 极限显存 |
| INT3/2(极限) | 0.375/0.25 B | 81%/87.5% | 15-30% | 测试 / 极端场景 |
>参考:HuggingFace Accelerate 量化指南(2026-08)、vLLM / TensorRT-LLM 量化基准(2026-09)。
三 生产部署组合(2026-09)
| 场景 | 推荐组合 | 显存需求 | 典型吞吐 |
|---|---|---|---|
| 单卡 24 GB(本地 27B) | INT4 + KV INT8 + PagedAttention | 16-18 GB | 20-30 tok/s |
| 单卡 80 GB(A100) | BF16 + PagedAttention | 55-60 GB | 50-80 tok/s |
| A100 + 高并发 | INT8 + PagedAttention + 批处理 8-16 | 35-45 GB | 80-150 tok/s(批) |
| H100 高并发 | FP8 + Continuous batching + FlashAttention | 60-70 GB | 300-500 tok/s(批) |
| 多卡(2-8 GPU) | Tensor 并行 + INT8/FP8 + KV 多级缓存 | 视卡种 | 线性扩展 60-80%(8 卡) |
>关键原则:先压权重,再压 KV;先 PagedAttention,再量化;连续批处理永远开。顺序反了会浪费显存。
四 成本与精度的平衡点(2026-09 节点)
| Task | BF16 | INT8 | INT4 | 建议 |
|---|---|---|---|---|
| 数学推理(MATH / GSM8K) | 82% | 78% | 61% | BF16/INT8 |
| 代码生成(HumanEval) | 92% | 89% | 74% | INT8 |
| 长文本摘要 | 85% | 83% | 71% | INT8 |
| 通用问答 | 88% | 86% | 80% | INT4 可 |
| 客服/闲聊 | 91% | 90% | 87% | INT4 可 |
五 实操案例:27B 模型 A100 80 GB 部署
- 目标:4K 上下文,并发 8,延迟 P95 < 3 s
- 组合:INT8 权重(27 GB)+ KV INT8(~12 GB)+ PagedAttention + Continuous batching(batch=8)
- 显存占用:权重 27 GB + KV 12 GB + 内核 ~5 GB ≈ 44 GB(余 36 GB buffer)
- 吞吐:8 并发下 ~120 tok/s 聚合,P95 ~2.6 s(4K 上下文)
- 精度:通用问答 86%(BF16 88%),损失 2%
- 成本:电费 ~0.8 元/h(A100)≈ 0.01 元/千 token(满负载)
>参考:A100 实测基准(2026-09)、vLLM INT8 部署文档、电费估算。
六 KV 缓存的进阶优化
>除了 INT8/INT4 量化 KV,2026-09 生产环境还有 3 种进阶手段:
- KV 压缩(KV Compression):把 KV 向量降维(如 4096 → 1024),显存再降 3-4 倍,精度损失 2-5%。代表:KAIROS / KIVI / H2O(Head Hits)。
- 动态 KV 驱逐(Dynamic Eviction):按注意力分数驱逐低分 KV,只保留高分 top-k。适合超长上下文(32K+),可节省 60-80% KV 显存。
- 层级 KV 缓存(Hierarchical KV):热 KV 在 GPU,冷 KV 在 CPU,按需迁移。vLLM / TensorRT-LLM 都支持,适合长会话场景。
参考:KIVI 论文(2024)、H2O 动态驱逐(2024)、vLLM 层级 KV 缓存(2026)。
七 连续批处理详解
>传统静态批处理:batch 内所有请求一起开始、一起结束,快的请求拖慢整体。连续批处理(Continuous Batching):每个新请求随时插入,完成的请求随时退出,GPU 利用率提升 40-80%。
| 策略 | 优点 | 缺点 |
|---|---|---|
| Static batching(静态) | 实现简单 | GPU 利用率低 30-50%,延迟不均匀 |
| Continuous batching(连续) | GPU 利用率 +40-80%,延迟均匀 | 实现复杂(需要动态调度) |
| PagedAttention + 连续 | 消除 GPU 显存碎片,+30-60% 吞吐 | 内核开销略增 |
2026-09 生产环境必开连续批处理。vLLM / SGLang / TensorRT-LLM 都内置,配置参数通常只需 --enable-continuous-batching 或类似。
参考:vLLM Continuous Batching 文档(2026)、SGLang 论文(2024)、Orca 论文(2022)。
八 FlashAttention(闪存注意力)与算子融合
>FlashAttention 系列(2022-2024)解决注意力计算的显存墙:传统注意力 O(n²) 显存占用,FlashAttention 通过分块(tiling)+ 在线 softmax 把显存降到 O(n),速度提升 5-10 倍。
| 版本 | 硬件 | 关键改进 | 加速 |
|---|---|---|---|
| FlashAttention-1 | A100 | 基础分块 + 在线 softmax | 3-5× |
| FlashAttention-2 | A100/H100 | 减少非矩阵乘 FLOPS,并行更好 | 2-4× |
| FlashAttention-3 | H100 | WGMMA 异步 + TMA 生成器,3-stage 流水 | 1.5-2× |
2026-09 生产环境必开 FlashAttention-2/3(H100 用 v3,A100 用 v2)。配置通常只需模型加载时加 attn_implementation="flash_attention_2"。
参考:FlashAttention 论文系列(2022-2024)、HuggingFace Transformers 集成文档(2026)。
九 硬件选型速查(推理侧)
| 硬件 | 显存 | 适合模型 | 适合场景 |
|---|---|---|---|
| RTX 4090 | 24 GB | INT4 8B-27B | 本地开发 / 小规模 |
| RTX 5090 | 32 GB | INT8 7B-14B / INT4 27B+ | 本地高性能 / 小规模 |
| A100 80 GB | 80 GB | BF16 27B / INT8 70B | 生产服务(中规模) |
| H100 80 GB | 80 GB | BF16 70B / FP8 70B+ / INT4 120B+ | 生产服务(大规模) |
| H200(2024+) | 141 GB | BF16 70B-120B | 大规模 / 长上下文 |
2026-09 节点:4090 已过时(32 GB 不够 INT8 70B),H100 是生产主力,5090 适合本地高性能。多卡 Tensor 并行:2 卡 4090 ≈ 1 卡 A100(效率 ~70%),4 卡 A100 ≈ 1 卡 H100(效率 ~75%)。
参考:NVIDIA 硬件规格(2026)、vLLM 多卡基准(2026-09)。
十 水位管理与 OOM 预防
>生产环境中最常见的事故是KV Cache OOM:并发请求的 KV 总量超过 GPU 显存剩余空间,导致整个服务崩溃或自动驱逐。2026-09 的成熟做法是水位管理(Watermark Management):
- 静态水位:KV Cache 最多用显存的 70%(余 30% 给权重 + 内核 + buffer),手动设
--gpu-memory-utilization=0.7。 - 动态水位:vLLM 的 PagedAttention 自动按"block"分配,满时新建请求排队(不 OOM),直到有请求完成释放 block。
- 多级别水位:热(GPU)/ 温(CPU)/ 冷(SSD)三级 KV 缓存,溢出时自动迁移,用户无感延迟增加。
配置建议:--gpu-memory-utilization=0.85(vLLM 默认)是稳妥值;高并发场景可以调到 0.9,但要配合 --max-num-seqs 限制最大并发数。
参考:vLLM 内存管理文档(2026)、TensorRT-LLM KV 池管理(2026)。
十一 成本模型
>生产环境的成本不能只看"GPU 数量",要算每千 token 的综合成本(包含硬件摊销 + 电费 + 运维)。
| 成本项 | A100 80 GB(自建) | H100 80 GB(自建) | API 调用(GPT-5) |
|---|---|---|---|
| 硬件(36 月摊销) | ~0.35 元/h | ~0.55 元/h | — |
| 电费(PUE 1.3) | ~0.25 元/h | ~0.30 元/h | — |
| 运维(5% 人力) | ~0.15 元/h | ~0.15 元/h | — |
| 合计(自建) | ~0.75 元/h | ~1.00 元/h | — |
| 满负载 tok/s(batch 8) | ~120 | ~350 | — |
| 每千 token 成本 | ~0.006 元 | ~0.003 元 | ~0.02-0.05 元(fast/deep) |
2026-09 节点:自建 H100 满负载成本 ~0.003 元/千 token,API 是它的 7-17 倍。盈亏平衡点在月 token 量 > 5 亿(自建 H100)或 月 30 亿(自建 A100)以上。低于此,API 更划算。
参考:自建 vs API 成本模型(2026-09)、NVIDIA 硬件报价(2026-09)、OpenAI GPT-5 定价(2025-08 起)。
十二 多卡推理的三种并行
| 并行方式 | 原理 | 适用 | 效率 |
|---|---|---|---|
| Data 并行(DP) | 每卡跑一份模型,分不同请求 | 模型 < 单卡显存 | ~95% |
| Tensor 并行(TP) | 模型按层/头切分到多卡 | 模型 > 单卡显存 | ~70%(8 卡) |
| Pipeline 并行(PP) | 模型按层切分到多卡,流水执行 | 超大模型(100B+) | ~60%(气泡开销) |
| 3D 混合并行 | TP + PP + DP 组合 | 100B+ 生产 | ~50-70% |
2026-09 选型建议:7B-27B 模型单卡够(INT8/INT4)不用 TP;70B 模型 2 卡 TP(A100)或 1 卡 H100(INT8);120B+ 模型 4 卡 TP 或 2 卡 PP + TP 混合。
参考:vLLM 多卡部署(2026)、Megatron-LM 3D 并行文档(2024-2026)。
十三 监控指标
>生产环境必挂的 5 个监控指标:
| 指标 | 含义 | 告警阈值 |
|---|---|---|
| TTFT(Time to First Token) | 首 token 延迟 | P95 > 2 s |
| TPS(Tokens per Second) | 每秒生成 token 数 | 聚合 < 50 tok/s |
| KV 水位(%) | KV Cache 占用率 | > 85% |
| Request Queue Depth | 排队请求数 | > 16 |
| Error Rate | 错误率(OOM / timeout) | > 1% |
2026-09 主流方案:Prometheus + Grafana 或 vLLM 内置 Prometheus 端点(/metrics)。K8s 部署用 Helm Chart + values.yaml 配置监控容器。
参考:vLLM Prometheus 指标文档(2026)、Grafana LLM Dashboard 模板(2026)。
十四 误判与规避
- "量化能随便上" —— 错:数学/代码任务量化损失大,需要对照基准测。
- "越大 batch 越好" —— 错:batch 太大 → KV Cache OOM,且延迟线性升;建议 4-16。
- "PagedAttention 一定快" —— 对,但小模型(<7B)开销不划算,可关。
- "INT4 = 万能" —— 错:数学/代码任务精度损失 12%+,不可生产。
- "显存满了加卡" —— 部分对:2 卡 Tensor 并行效率 ~70%,不如单卡 INT8。
十五 快速决策树(2026-09)
>面对一个新推理任务,按这棵决策树 5 步出方案:
- ① 确定模型规模:7B / 14B / 27B / 70B / 120B?(任务复杂度 + 精度要求)
- ② 确定精度等级:BF16 / INT8 / FP8 / INT4?(精度下限 + 成本预算)
- ③ 选硬件:4090 / 5090 / A100 / H100?(显存 + 吞吐)
- ④ 开优化:PagedAttention + Continuous Batching + FlashAttention 2/3(必开)
- ⑤ 配并发:batch 4-16(按 QPS 调),KV 水位 85%(OOM 红线)
这 5 步走完,任何推理任务都有生产级方案。记住:**先压权重,再压 KV;先 PagedAttention,再量化;连续批处理永远开。** 本文到此结束。下一站:长上下文策略与多模态推理加速与 vLLM 性能调优实践指南与案例。
结论
2026 年推理优化的核心是"KV 缓存 + 量化 + 批处理"三件套。生产部署的决策路径:① 确定精度下限(任务相关) → ② 选最小可接受精度等级(BF16/INT8/INT4)→ ③ KV Cache 用最低精度(通常 INT8)→ ④ 批处理 4-16 连续批量 → ⑤ 显存达上限再考虑加卡。这条路径下,A100 80 GB 可以单卡跑 27B INT8 + 4K 上下文 + 8 并发,成本 ~0.01 元/千 token,精度损失 2%——是 2026-09 节点的生产级最优解。
下一站:显存不够时的多卡推理与长上下文策略(见下一篇)。本文结束。