在推理阶段,哪些因素(如并发数、序列长度)对GPU显存消耗影响最大?
解读
面试官想验证三件事:
- 你是否能把“模型文件本身”与“运行时动态开销”分开算账;
- 你是否知道国产主流GPU(A100 40G、A800 80G、T4 16G、4090 24G)在显存带宽与容量上的硬天花板;
- 你能否把技术因子翻译成业务语言,告诉老板“并发每涨1倍,成本涨几倍、RT涨多少、用户体验掉多少”,从而支撑定价与扩容决策。
因此,回答必须“先拆账、再给公式、最后落地到钱”。
知识点
- 静态显存:权重+KV-Cache预分配
- fp16权重 ≈ 参数量×2 Byte;int8量化后折半。
- KV-Cache = 2 × batch_size × seq_len × num_layers × hidden_size × fp16(2B)。
- 动态显存:
- 激活值(activation)与临时tensor,与seq_len²或seq_len×hidden_size成正比。
- CUDA kernel工作区(cublas/cudnn buffer)通常占5–10%,但在国产框架如MindSpore+Ascend上可能涨到15%。
- 并发维度:
- 连续批处理(continuous batching)能把“最大并发”翻译成“最大batch_size”,直接线性放大KV-Cache。
- 国内线上场景常用“动态批延时约束”:TP99 RT<200 ms时,batch_size通常≤16(A100)或≤8(T4)。
- 序列维度:
- 长文本场景(≥4 k)下,KV-Cache显存占比迅速超过权重本身;8 k长度时,KV-Cache是权重的1.5–2倍。
- 量化/并行策略:
- int8权重+KV-Cache量化可省40–50%显存,但国产备案要求“可解释”,需留fp16备份做审计,实际只能省20%。
- 张量并行(TP=2/4)会把权重和激活切分,但每张卡仍要存完整KV-Cache,显存瓶颈并未消失。
- 业务换算:
- 1万DAU、每人日均30轮、每轮平均输入600 token输出200 token,峰值并发300,需要约80 GB显存;用A800 80G单卡刚好打满,留10% buffer后必须上两卡,成本翻倍。
答案
“影响最大的因子按优先级排序:
第一,并发数(batch_size)。在continuous batching框架下,KV-Cache随batch线性增长,一条A100 40G的卡,batch从1到32,KV-Cache可从0.6 GB直接涨到20 GB,是权重本身的1.3倍,成为首爆点。
第二,序列长度(seq_len)。KV-Cache与seq_len成正比,输入从512 token拉到4 k,KV-Cache翻8倍;若同时batch=16,显存占用就从5 GB跳到80 GB,直接打满A800。
第三,精度与量化。fp16到int8权重减半,但KV-Cache若保持fp16,只能省20%整体显存;若KV也int8,可再省15%,不过国内金融、医疗客户要求可回溯,必须保留fp16副本,实际收益再打对折。
第四,激活与临时buffer。在国产MindSpore+Ascend环境,长序列下激活峰值可达权重的30%,但仍在seq_len与batch之后。
因此,给业务方做容量评估时,先用公式‘显存 ≈ 权重 + 2×B×S×L×H×2B’估算KV-Cache,再按峰值并发×1.5倍给buffer,最后看卡型天花板,就能在5分钟内算出‘并发每涨1倍,GPU成本涨1.8–2倍’的粗口径,支撑报价与SLA谈判。”
拓展思考
- 如果客户坚持20 k长文本,并发又要≥50,显存需求>200 GB,你会如何设计“分段推理+投机解码”方案,把首Token时延压到2 s以内,同时让显存不溢出?
- 国内云厂商A800 80G现货价已涨到4.2元/卡/时,T4 16G只要0.9元,但T4显存太小。请用“int4权重+KV-Cache卸载到主存+UVM”策略,算一笔账:在TP99 RT<500 ms约束下,能否用T4集群替代A800,把成本降50%以上?
- 备案要求“模型权重与日志保留30天”,显存换磁盘后,存储成本又涨。你如何把“显存-磁盘-带宽”三元成本做成一张动态仪表盘,让运营每天一眼看出“今天该不该缩容”?