0
0

1M 上下文的部署容量预算:从 8 卡 910C 到权重、KV Cache 与 DCP

整理日期:2026-09-14。来源:当天可见聊天摘要;原理说明为整理时补充,非完整对话逐字稿。未取得的设备参数与未验证的结论明确保留为待核实。

问题起点

“8 卡 910C 有多少显存?考虑 KV Cache,1M 上下文能部署多少 B 的模型?”

这个问题不能仅用总显存除以参数字节数回答。首先要确定“卡”指物理模组还是运行时设备,其次要知道模型 Attention 结构、并发、量化格式和并行布局。

建立完整预算

对每个计算设备分别检查:

Mweights+MKV+Mworkspace+Mgraph+Mcomm+Mruntime+Mmargin≤Musable M_{weights}+M_{KV}+M_{workspace}+M_{graph}+M_{comm}+M_{runtime}+M_{margin}\le M_{usable}

即使全机总量足够,某个 Rank 因权重不均衡、KV 复制或临时工作区过大,仍可能 OOM。

权重的理想存储量:BF16/FP16 每参数 2 字节;INT8 约 1 字节;INT4 约 0.5 字节。量化 scale、未量化层、对齐和后端布局会增加实际开销。MoE 应按驻留的总参数计算权重容量,不能只按激活参数算。

GQA 的 KV Cache 手算

对于每层结构一致、K/V 维度相同的标准 MHA/GQA:

MKV=2×L×T×B×HKV×Dhead×S M_{KV}=2\times L\times T\times B\times H_{KV}\times D_{head}\times S

L 是层数,T 是缓存长度,B 是等长请求数,H_KV 是 KV head 数,D_head 是 head 维度,S 是每元素字节数。不等长请求应把 T×B 改成各请求长度之和。

**教学假设,不对应指定模型:**80 层、8 个 KV heads、head_dim=128、BF16、1,000,000 token、并发 1,得到 327,680,000,000 字节,约 305.2 GiB KV Cache。若 KV 用 8 位存储,纯数据部分约 152.6 GiB,另有量化元数据。

由此可见,“模型权重能装下”和“模型加 1M KV 能装下”是两道不同的门槛。

8 卡容量应该怎样表述

如果经设备文档和完整输出确认,每个物理模组含两个计算设备、每设备 64 GiB,则 8×2×64=1024 GiB。这只是条件计算,不能在设备参数缺失时当作这台机器的已确认规格。GB 与 GiB 也应统一后再算。

MLA 使用压缩 latent 的缓存布局,不能机械套用上面的 GQA 公式;需要读模型配置和后端实际缓存张量。

DCP 的作用及边界

DCP 按序列维度分摊 KV;它可以减少重复缓存、降低单设备 KV 读取量,但不会减少模型的全部权重,也不会自动赋予模型 1M 上下文能力。当前 vLLM 文档说明 DCP 不扩大进程 world size,不能直接按 TP×DCP 计算卡数。vLLM 参数文档

继续阅读已有笔记:Decode Context Parallelism(DCP)详解:长上下文解码中的 KV Cache 分片、通信与 vLLM/昇腾实现。

可复用的部署检查单

  1. 记录物理模组数、运行时设备数、每设备 HBM 与当前可用量。
  2. 读取模型总参数、层数、KV heads 或 MLA latent 维度。
  3. 明确 1M 的具体 token 数、输入加输出限制、并发目标。
  4. 按每个 Rank 的实际分片与复制计算权重和缓存。
  5. 留出工作区、图捕获、通信缓冲与增长余量。
  6. 先验证容量,再分别测 TTFT、单 token 延迟和吞吐。

**待补实测:**当前机器完整 HBM 表、目标模型和并发尚不齐全,因此本笔记不虚构“最多可部署某个 B”的确定答案。

合并补充:避免重复分摊与三项验收

70B 参数的原始 BF16 权重约 140GB,INT8 约 70GB,均为十进制 GB,未计量化元数据与工作区。上述 KV 算例的 327,680,000,000 字节也可写为 327.68GB;四个同长度独立请求的逻辑 KV 约为单请求的四倍。

普通 GQA 公式不应直接用于滑窗、混合 Attention 或压缩缓存。

不能把已经全局去重的 KV 总量再除一次 DCP,作为整机所需总量;单 rank 收益取决于既有 TP/PP 布局与复制。vLLM 上下文并行说明。

验收应分开检查容量、性能和能力:能完成 prefill/decode、TTFT 与 token 间隔可接受、模型确实能利用长上下文。仅修改 max_model_len 不能保证三者。