在推理阶段,哪些因素(如并发数、序列长度)对GPU显存消耗影响最大?

解读

面试官想验证三件事:

  1. 你是否能把“模型文件本身”与“运行时动态开销”分开算账;
  2. 你是否知道国产主流GPU(A100 40G、A800 80G、T4 16G、4090 24G)在显存带宽与容量上的硬天花板;
  3. 你能否把技术因子翻译成业务语言,告诉老板“并发每涨1倍,成本涨几倍、RT涨多少、用户体验掉多少”,从而支撑定价与扩容决策。
    因此,回答必须“先拆账、再给公式、最后落地到钱”。

知识点

  1. 静态显存:权重+KV-Cache预分配
    • fp16权重 ≈ 参数量×2 Byte;int8量化后折半。
    • KV-Cache = 2 × batch_size × seq_len × num_layers × hidden_size × fp16(2B)。
  2. 动态显存:
    • 激活值(activation)与临时tensor,与seq_len²或seq_len×hidden_size成正比。
    • CUDA kernel工作区(cublas/cudnn buffer)通常占5–10%,但在国产框架如MindSpore+Ascend上可能涨到15%。
  3. 并发维度:
    • 连续批处理(continuous batching)能把“最大并发”翻译成“最大batch_size”,直接线性放大KV-Cache。
    • 国内线上场景常用“动态批延时约束”:TP99 RT<200 ms时,batch_size通常≤16(A100)或≤8(T4)。
  4. 序列维度:
    • 长文本场景(≥4 k)下,KV-Cache显存占比迅速超过权重本身;8 k长度时,KV-Cache是权重的1.5–2倍。
  5. 量化/并行策略:
    • int8权重+KV-Cache量化可省40–50%显存,但国产备案要求“可解释”,需留fp16备份做审计,实际只能省20%。
    • 张量并行(TP=2/4)会把权重和激活切分,但每张卡仍要存完整KV-Cache,显存瓶颈并未消失。
  6. 业务换算:
    • 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谈判。”

拓展思考

  1. 如果客户坚持20 k长文本,并发又要≥50,显存需求>200 GB,你会如何设计“分段推理+投机解码”方案,把首Token时延压到2 s以内,同时让显存不溢出?
  2. 国内云厂商A800 80G现货价已涨到4.2元/卡/时,T4 16G只要0.9元,但T4显存太小。请用“int4权重+KV-Cache卸载到主存+UVM”策略,算一笔账:在TP99 RT<500 ms约束下,能否用T4集群替代A800,把成本降50%以上?
  3. 备案要求“模型权重与日志保留30天”,显存换磁盘后,存储成本又涨。你如何把“显存-磁盘-带宽”三元成本做成一张动态仪表盘,让运营每天一眼看出“今天该不该缩容”?