03. GPU 与显存预算
本篇导读
上一篇看见模型逐步计算并保存历史状态。本篇把机器想成一个有容量限制的工作台:先看权重、请求便笺和临时空间如何占位,再理解算力与搬运速度的区别。先建立“谁会增长”的直觉,最后再展开公式和参数。
工作台上不是只有模型
资料助手加载模型后,权重通常常驻设备供请求共用。每位同事还带着自己的制度资料、历史对话和生成进度,相应中间状态需要另占空间。运行模型时还会使用临时张量、算子工作区、执行图和通信缓冲。
可以把权重类比成固定放在工作台上的计算材料,把 KV 类比成本次答复的计算便笺,把临时空间类比成展开加工时需要腾出的台面。模型权重不是原文制度册,KV 也不是可直接阅读的会议记录;这个类比只解释容量与共享关系。
从一个人变成三十二个人
依次切换下面三种工作量,先预测哪一段会变大,再观察比例条。示例始终是同一个模型。
一张 48 GiB 的“工作台”
共享权重 14.90 GiB请求 KV 0.13 GiB其他预留 4.00 GiB
权重加载一份;这条短上下文只占少量计算便笺。
19.03 / 48 GiB,原始预算可容纳
工作台类比对应显存容量。假设 8B BF16 权重,每 token KV 128 KiB,各请求不共享前缀;4 GiB 为手动预留。竖线是容量上限,超出部分仍显示在比例条内。实际峰值还要测量。
变化的重点是:同一模型的权重没有跟着人数复制,独立请求状态却会累加。 长资料使每条状态变大,多人使需要保存的状态份数增多。因此“加载成功”只证明静态部分放得下,不代表能接任意并发。
容量够,为什么还会慢
工作台大小决定放不放得下;手上动作快不快,对应计算能力;从仓储不断取材料的速度,对应内存带宽。大模型每一步既要计算,也要读权重和历史状态。
单条 decode 每次只推进很少的新位置,读取大量权重却只服务一个人;批处理可以让同一次权重读取服务多人。人数继续增加,又可能被计算、KV 读取、显存容量和排队限制。第 5 篇会观察这个转折背后的调度机制。
动手:改变计算与搬运预算
计算与搬运的理想下界简化单步稠密模型估算
读取权重 7.00 ms
执行计算 0.14 ms
本轮耗时至少 7.00 ms · 当前偏权重带宽约束
假设整批共享一次权重读取,运算量随序列数线性增加,两项可理想重叠。未计 KV、注意力、通信、启动和调度;有效带宽与算力由你假设。默认 14 GB / 2 TB/s = 7 ms 仅为权重搬运下界,不是实测 token 速度。
理想下界分别为运算量除以有效算力、搬运字节数除以有效带宽;即使能重叠,总时间仍不小于两者的较大值。常见“prefill 偏计算、decode 偏带宽”只是某些工作区间的判断,大 batch、MoE、长上下文与 CPU 开销都可能改变瓶颈。
便笺的大小怎样计算
对常规全历史、各层配置一致的注意力,K/V 每个位置都要保存多层、多头的数值。就像“每页有多少格 × 每格多少字节 × 多少页 × 多少本”,逐项相乘即可:
text
单 token KV = 2 × 层数 × KV 头数 × 头维度 × 每元素字节
总 KV = 单 token KV × 缓存 token 数 × 独立序列数示例为 32 层、8 KV 头、头维 128、BF16,每 token 128 KiB;8192 token 为 1 GiB。这里 2 对应 K 和 V。GQA/MQA 用 KV 头数,不能用 Query 头数。
动手:填写自己的模型参数,计算完整预算
显存预算计算器常规全历史 MHA / GQA / MQA
原始权重 14.9 GiB原始 KV 32 GiB其他预留 4 GiB
合计 50.9 / 48 GiB · 超出预算
单序列每 token 128 KiB。权重与 KV 均为原始位数估算,不含量化 scale、分页尾块等;“其他预留”由你填写,不是自动测量。独立序列不共享前缀,不按 GPU 数自动相除。
默认 8B BF16 权重为 16 GB,即 14.90 GiB;加 32 GiB KV 和 4 GiB 手动预留,超过 48 GiB。权重量化与 KV 量化是分别改变两段的开关,低位表示还会产生 scale、布局等额外开销。
深入:哪些结构需要另算?
MLA 可能缓存低秩潜在表示;滑动窗口只保留部分历史;Mamba、线性与混合模型包含递归状态和检查点。多卡状态不保证平均分片,前缀共享也会改变物理占用,分页尾块还有内部浪费。不能对所有模型套同一个公式。
MoE 的总专家需要保存、分布或卸载,激活参数量不是权重占用。引擎可能预分配 KV 池,设备总占用高也不等于活跃状态已经耗尽,应看 cache usage、抢占与队列。
本篇回顾
- 显存要同时容纳共享权重、请求状态、临时资源,加载模型只是第一步。
- 长上下文和独立并发主要推高状态占用;权重量化不自动量化 KV。
- 容量、算力、带宽是不同约束;机器没满不代表每一步都快。
既然便笺占地方,下一篇继续问:已经算过的哪些内容能保留、哪些可以共用,又该怎样摆放? 进入注意力与 KV 缓存。
