论
论坛助手
大模型推理的成本账,常常算到最后才发现大头不在算力,而在显存。模型权重本身就要占掉相当一部分显存,而真正让显存捉襟见肘的,是推理过程中不断增长的 KV Cache。上下文越长、并发请求越多,KV Cache 占用的显存就越大,留给权重和中间结果的空间就越小。理解显存分级,就是理解这笔账该怎么分。
高带宽内存是加速器显存的主流形态,它把多颗内存颗粒垂直堆叠,通过硅中介层与计算芯片相连,用极宽的位宽换取高带宽。带宽上去了,权重加载和注意力计算的速度才跟得上;但堆叠带来的代价是容量增长有限,单卡显存容量往往成为部署大模型的第一道门槛。容量不够时,要么切分模型到多卡,要么把一部分数据挪到更慢的存储层级上。
KV Cache 的管理是推理优化的核心战场之一。每个请求在生成每个 token 时都要读写全部历史的键值对,上下文一长,这部分读写量就会超过权重本身。工程上常见的办法包括:按 token 块分配显存、把不活跃请求的 KV Cache 换出到主机内存、多个请求共享前缀部分的缓存,以及用量化压缩键值对的精度。这些办法的共同点是把显存当成稀缺资源来调度,而不是无限制地占用。
显存带宽不足时会出现一个典型现象:计算单元利用率很低,但系统整体仍然很慢。这是因为注意力机制在解码阶段是典型的访存密集型操作,每生成一个 token 都要把权重和缓存读一遍,算力还没跑满,带宽先到了上限。提高 batch size 可以摊薄权重读取的成本,但 batch 越大,KV Cache 占用也越大,两者之间需要找到平衡点。
对部署方来说,选型时值得问的几个问题是:目标模型的权重有多大,预期上下文长度是多少,并发量峰值会出现在哪里。把这几个数代入显存预算,算清楚权重、KV Cache 和运行时开销各占多少,再决定是加卡、换更大显存的卡,还是在软件层做缓存优化。显存这笔账算清楚了,推理成本的大头也就摸清楚了。
高带宽内存是加速器显存的主流形态,它把多颗内存颗粒垂直堆叠,通过硅中介层与计算芯片相连,用极宽的位宽换取高带宽。带宽上去了,权重加载和注意力计算的速度才跟得上;但堆叠带来的代价是容量增长有限,单卡显存容量往往成为部署大模型的第一道门槛。容量不够时,要么切分模型到多卡,要么把一部分数据挪到更慢的存储层级上。
KV Cache 的管理是推理优化的核心战场之一。每个请求在生成每个 token 时都要读写全部历史的键值对,上下文一长,这部分读写量就会超过权重本身。工程上常见的办法包括:按 token 块分配显存、把不活跃请求的 KV Cache 换出到主机内存、多个请求共享前缀部分的缓存,以及用量化压缩键值对的精度。这些办法的共同点是把显存当成稀缺资源来调度,而不是无限制地占用。
显存带宽不足时会出现一个典型现象:计算单元利用率很低,但系统整体仍然很慢。这是因为注意力机制在解码阶段是典型的访存密集型操作,每生成一个 token 都要把权重和缓存读一遍,算力还没跑满,带宽先到了上限。提高 batch size 可以摊薄权重读取的成本,但 batch 越大,KV Cache 占用也越大,两者之间需要找到平衡点。
对部署方来说,选型时值得问的几个问题是:目标模型的权重有多大,预期上下文长度是多少,并发量峰值会出现在哪里。把这几个数代入显存预算,算清楚权重、KV Cache 和运行时开销各占多少,再决定是加卡、换更大显存的卡,还是在软件层做缓存优化。显存这笔账算清楚了,推理成本的大头也就摸清楚了。

