1. 问题不是“有多少显存”,而是“谁在等谁”

一次 decode iteration 同时要读取权重、读取历史 KV、写入新的 K/V、执行 attention 和 MLP,并在必要时把分片结果发给其他 GPU。即使权重总量能够装入 HBM,服务仍可能慢:某个 rank 在等 all-reduce,某个 NIC 正被 KV 迁移占满,或者 paged KV 的地址翻译让 kernel 无法连续读取。

因此应把内存和网络看作一张分层数据图,而不是两个独立容量表。图中的顶点是权重 shard、activation、KV page、通信 buffer、CPU staging buffer 和 SSD/object-store block;边是 GPU 内 load/store、NVLink、PCIe、DMA、RDMA 和存储网络。端到端延迟由关键路径上最慢的一条边决定。

因此,同一模型换了 batch、上下文长度或并行度,瓶颈可能从算力转到 HBM,再转到通信。性能诊断应从该请求实际读写的数据和同步点开始。

2. GPU 存储层级:寄存器、shared memory、L2、HBM 不是可互换的“缓存”

寄存器和 shared memory 服务于一个 SM 内正在运行的线程块,容量小、延迟低,但不能当作跨 kernel 的稳定存储。L2 在整个 GPU 内共享,能为重复访问、通信 kernel 和小型元数据提供复用;HBM 才是权重、KV 和大部分 activation 的持久工作集。再往外是 host DRAM、NVMe、远端 DRAM 或对象存储,它们容量更大但路径和软件栈更长。

NVIDIA Blackwell Ultra GPU 芯片中 HBM、L2、NVLink 和 PCIe 接口示意
原始/官方结构图:NVIDIA, “Inside NVIDIA Blackwell Ultra”, Figure 1: “NVIDIA Blackwell Ultra GPU chip explained”。图把双 reticle、HBM controller、L2、NVLink、NVLink-C2C 和 PCIe Gen 6 放进同一颗 GPU 的物理接口视图;它用于说明一代特定产品的层级与出口,不能被读成所有 GPU 的通用 cache 图,也不能由标称带宽直接推出任一 workload 的有效吞吐。
层级典型对象主要价值常见误用
register/shared memorytile、partial sum、warp 临时状态让一个 kernel 少访问 HBM为了复用无限增大 tile,导致 register spill 或 occupancy 降低
L2热点 metadata、近期 KV/weight line、通信 staging减少重复 HBM 请求,协调 GPU 内并发假定 L2 命中永久存在,忽略其他 stream 的驱逐
HBMweight shard、KV pages、activation、workspace高带宽主工作集只计算总字节,不计算并发读写和碎片
host/SSD/remote tier冷 KV、权重副本、checkpoint扩容量与持久化把预取延迟当作零,或绕过版本与所有权检查

“缓存”这个词容易掩盖语义差异。L2 是硬件替换策略管理的性能缓存;paged KV 是 runtime 管理的逻辑缓存;远端 KV 是带目录、版本和传输协议的分布式对象。它们的命中、失效和失败恢复机制完全不同。

3. 一次 token 的端到端数据路径

以 tensor parallel 的 decoder layer 为例,GPU 先从 HBM 读取本地 weight shard 与当前 activation,GEMM 产出局部结果;行并行边界需要 reduce-scatter 或 all-reduce,通信库把分片放到可 DMA 的 buffer,经 GPU fabric 或 NIC 发往其他 rank;随后 attention 读取 block table 指向的历史 KV,并把当前 token 的 K/V 写到新 page。若模型有 MoE,还会多一次按专家目的地 pack、all-to-all、grouped GEMM、再 combine 的路径。

T_token ≈ max( T_compute, T_HBM, T_collective, T_KV_lookup ) + serial_dependencies + queueing T_HBM ≈ useful_bytes / effective_HBM_bandwidth T_collective ≈ startup + payload / effective_link_bandwidth + queueing

上式不是精确模拟器,但足以避免一类错误:把每个阶段单独 benchmark 后相加。可重叠的阶段要取最大值,存在数据依赖的阶段必须串行;而同一 HBM、L2、SM 或 NIC 上的竞争又会降低“有效”带宽。

4. 所有权、地址与完成事件:分布式显存的三个基本状态

一个可被远端访问的块至少要有三个独立概念:owner 表示谁负责生命周期和释放;location 表示物理地址目前在哪张 GPU/哪一层;validity 表示当前版本是否已经写完、可被消费者读取。把它们混成“缓存命中”会产生最难排的偶发错误。

block metadata = {
  block_id, request_id, model_epoch,
  owner_rank, replica_locations[],
  logical_length, physical_address,
  version, state: ALLOCATED | COPYING | COMMITTED | EVICTING | FREED
}

consumer may read ⇔ state == COMMITTED ∧ model_epoch matches ∧ version matches

GPU Direct RDMA 只减少数据复制,不替你定义上述协议。发送端写完 GPU buffer 后必须发布 completion;接收端必须在 DMA 完成和 metadata commit 都成立后把页放入 block table;超时重试必须幂等,避免同一请求写入两份不一致 KV。

5. 互联拓扑:带宽数字不能替代路径

节点内 GPU 常通过专用 GPU fabric 连接,跨节点则多经过 PCIe、NIC、ToR 和 spine。相同“每卡带宽”并不保证相同的 application bandwidth:GPU 对之间的 hop、是否共享交换芯片、NIC 是否靠近对应 GPU、是否跨 NUMA,都会改变延迟和可并发流量。

拓扑发现应该来自机器真实的 PCIe/GPU/NIC 连线和交换网络,而不是 GPU 编号。部署时将 TP group 放在同一高速域,将跨域容量优先分给 DP、可延迟的 prefill、冷数据迁移或经过专门评估的 EP group,是一个稳健起点。

6. NVLink、PCIe 与 RDMA 各自解决什么问题

GPU fabric 的目标是给 GPU 之间提供高带宽、低软件开销的直接路径,适合逐层同步。PCIe 既是 GPU 与 NIC/DPU 的 I/O 总线,也可能承载较慢的设备间搬运;它的拓扑、代际和共享根端口会影响实际吞吐。RDMA 则是 NIC 代表应用 DMA 到远端注册内存的编程模型,适合跨节点 P2P、collective 和 KV 传输。

它们不是替代关系:一次跨节点 GPU-to-GPU 传输往往既需要 GPU fabric 或 HBM DMA,又需要 PCIe/NIC 与 RDMA,再经过以太网或 InfiniBand。优化只盯一个名词会漏掉瓶颈,例如 NIC 速率足够但 GPU 到 NIC 路径跨 NUMA,或 RDMA retry 增多但应用只看到了 TBT 变差。

工程判断:先测真实 topology 上的 P2P、all-reduce、all-to-all 和 KV transfer,而不是用产品规格表估算。规格是容量上界,trace 中的 effective bandwidth 和 P99 才是服务可用能力。

7. 并行策略如何消耗显存和链路

TP 切分线性层,但每层带来同步,最依赖低延迟互联;PP 减少单卡权重/activation 压力,却让请求经过更多 stage;EP 把专家分散,计算稀疏但引入两次 all-to-all;DP 复制完整权重,几乎不产生逐 token 通信,却增加总 HBM 占用。不同方案不能用“卡数相同”直接比较。

方式主要显存状态主要通信放置原则
TP每卡 weight shard、完整/分片 activation每层 all-reduce / reduce-scatter尽量留在同一 GPU fabric 域
PP每 stage 权重与边界 activationstage 间 point-to-point可跨较远域,但要控制首 token 串行路径
EPexpert 权重、token dispatch bufferall-to-all按双向 bisection 与 token 热点规划
DP每副本完整服务状态请求级路由为主跨机架/故障域提高可用性

更完整的并行推导见 06 并行与放置;collective 算法、NIC 队列和拓扑映射见 07 通信与拓扑。本页的重点是:任何并行方案都在重分配“本地 HBM 工作集”与“跨设备同步次数”的成本。

8. KV cache:从连续 tensor 到可迁移的页表

注意力需要读取历史 token 的 K/V。若为每条请求分配连续最大长度 buffer,长度不确定会造成大量内部碎片;paged KV 将其切成固定大小 block,用 block table 将逻辑 token 区间映射到物理页。这样可以按需增长、共享前缀、回收尾部,也为跨 worker 迁移提供对象边界。

KV_bytes ≈ layers × tokens × 2(K,V) × kv_heads × head_dim × bytes_per_element block table: logical_block_index → {device, physical_page, version, valid_length} prefix reuse requires: model/version/rope/adapter/context identity all match

分页并没有让 KV 免费。block table lookup、非连续 gather、不同请求长度、page allocation 和 eviction 都需要 kernel 与控制面协同。长上下文的 decode 往往首先受 KV 读取的 HBM 带宽制约;将冷页放到 host/SSD/远端 tier 后,还要把缺页、预取、传输和 DMA 完成放入 TTFT/TBT 的预算。

与数据中心 KV 调度相连的完整机制见 08 数据中心 KV 与 PD;单机 KV 布局与 prefill/decode 区别见 03 GPU 算子

9. 性能模型:容量、带宽、延迟和不均衡要分开算

容量问题问“能否存下”,带宽问题问“单位时间能搬多少”,延迟问题问“一个依赖何时解除”,不均衡问题问“哪个 rank 最晚结束”。这四项相互影响,但不能互相替代。比如 KV 量化可以解决容量,却让解码、重排或精度处理增加计算;增加 TP 可以减小 weight shard,却把每层通信放到关键路径。

HBM capacity requirement = weights + KV_reservation + activations + workspace + fragmentation_margin critical path lower bound ≥ max(compute, HBM traffic, fabric traffic) + unavoidable barriers EP layer completion = max_rank(pack + send + receive + expert_GEMM + combine)

实测时要同时保存模型 shape、精度、batch、上下文分布、并行 mesh、拓扑和并发流量。只报告“GB/s”或“tokens/s”无法解释下一次换模型、换上下文或换机架后为何失效。

10. 正确性不变量:性能优化不能破坏请求语义

  • 版本不变量:所有权重、RoPE 配置、adapter 和 KV 必须属于同一可比较的 model epoch;不能用旧模型的前缀 KV 直接服务新版本。
  • 完成不变量:消费者只能读取已完成 DMA 且 metadata 已提交的 buffer/page;CUDA event、RDMA completion 与目录提交不能省略任一个。
  • 唯一释放不变量:KV page 通过 reference count、lease 或 epoch 安全释放;迁移、共享前缀与请求取消都不能造成 double free。
  • 顺序不变量:token 的逻辑位置、attention mask 和 page 有效长度一致;收到更快的分片不等于可重排语义。
  • 拓扑不变量:communicator 只能包含健康且版本一致的 rank;重建 group 时旧请求要 drain 或有明确迁移协议。

这些不变量是性能工程的护栏。把 copy 和 compute 重叠、让远端读取 KV、做 speculative prefetch 都可以,但每项优化都要说明它在哪个事件之后变得可见、失败时如何回滚。

11. 失败模式:慢不是唯一后果

显存碎片会表现为“总空闲很多但大页分配失败”;L2/HBM 争用会造成随机 TBT spike;all-to-all 的 expert 热点会让一个 rank 拖慢整层;网络拥塞可能放大 RDMA retry、ECN/PFC 事件;worker 重启可能留下目录里指向失效显存的条目。若只重试请求,隐藏的所有权错误会在压力下再次出现。

现象可能根因首要证据处置方向
OOM 但显存利用率不高page 碎片、workspace 峰值、错误的保留策略allocator histogram、请求长度分布固定 block、隔离 workspace、按 SLO 设 KV reservation
P99 TBT 突升collective 排队、NIC congest、HBM contentionGPU trace + NIC counter + request trace限流、重放置、减少交叉流量
偶发错误输出/崩溃未完成 DMA 即读取、epoch 混用、页提前释放completion/epoch log、checksum、sanitizer显式状态机、幂等回收、失败隔离
扩卡不增速跨域 TP、EP 热点、计算被通信掩盖per-rank timeline、topology matrix重分并行 mesh,先缩关键通信域

12. 可观测性:把请求、GPU、NIC 和页表放在同一条 trace 上

推理监控若只看 GPU utilization,很容易把“GPU 正忙”误判为“GPU 有效计算”。每个请求至少应有可关联的 trace id;每一次 KV transfer、collective 和 page eviction 都带 request/model/worker 维度。这样才能把 TTFT 或 TBT 尖峰追溯到具体的 HBM kernel、通信 group 或远端页缺失。

  • GPU:SM occupancy、kernel duration、HBM read/write、L2 hit proxy、allocator/fragmentation、CUDA stream dependency。
  • 通信:collective bytes、algorithm/protocol、per-rank duration、P2P P50/P99、NIC TX/RX、retry、ECN/CNP/PFC、queue depth。
  • KV:logical tokens、resident pages、hit/miss、prefix sharing、copy bytes、eviction reason、remote fetch latency、directory epoch。
  • 服务:TTFT、TBT、goodput、abort rate、queue time、模型和并行配置版本。

需要同时看毫秒级与分钟级窗口。分钟级平均带宽能发现容量规划问题,毫秒级队列和 P99 才能解释用户看见的卡顿。

13. 部署例子:两组高速域如何服务一个 MoE 模型

设想一个机架有两个 8-GPU 高速域,每个 GPU 有本地 NIC。第一种部署是 TP8 + DP2:每个域内部放一份完整 replica,逐层 TP 同步不离开高速域,请求在两个副本间负载均衡。这是最易验证的低尾延迟基线。

当模型或专家容量要求 EP16 时,两个域共同构成一个 expert group。此时所有 token 不应逐个跨节点发送:先在域内按目标域聚合,再跨 NIC 发送大块分片,接收侧再分发给本地 expert。路由器还要限制任一 expert 的 capacity,并在热专家持续出现时调整 placement 或 admission,不能只靠网络增速。

若同时引入 prefill/decode 分离,KV 迁移不应与 EP all-to-all 无限制争抢同一 NIC。为 decode-critical KV 设置 credit 和可观测队列,为 bulk prefetch/迁移设置限速,才有可能在高峰保持 P99。

14. 2026 公开状态:从“单卡显存”转向可组合的内存与 fabric

截至 2026 年,公开的 GPU、机架级系统和推理运行时讨论已经把 HBM 容量、高带宽 GPU fabric、scale-out NIC、KV 分层与动态并行放进同一个设计空间。实际产品规格、互联协议和软件支持矩阵会快速变化,因此部署不能把某张新品的峰值指标直接当作服务 SLO;应以厂商当前公开规格、节点拓扑发现和自身 trace 为准。

这些变化让状态可以在更多层级移动:权重可分片、KV 可分层、通信可分层,节点也可按角色池化。网络扩展了可用的数据路径,却没有取代显存;与此同时,目录、版本、拥塞控制和故障恢复都进入了关键路径。训练与推理共用集群时,它们还会与 checkpoint、权重分发和 rollout 流量相互影响,见 18 训练与推理共用集群

15. 公众号选题映射:本页为什么这样组织

下表只把公开归档中的文章标题作为选题入口和阅读线索,不复制或镜像原文;技术解释由本页独立撰写。归档页并非原始公众号全文,链接和可访问性会随第三方站点变化。完整目录与来源边界见 相关公众号内容目录来源与证据

2025 标题级映射本页对应问题公开归档入口
从GPU缓存的视角看芯片设计和互连L2/HBM、缓存复用与互联共同决定有效带宽FreeWechat archive
再来谈谈GPU体系结构及互联GPU fabric、PCIe、NIC 的层级路径与拓扑映射FreeWechat archive
谈谈GPU的内存模型及互联网络设计所有权、完成事件、通信与内存模型的边界FreeWechat archive
关于3D Stacking DRAM GPU的一些想法容量、带宽、封装与数据移动成本之间的取舍FreeWechat archive

16. 实施检查清单

  1. 采集真实 GPU/NIC/PCIe/fabric 拓扑,生成 placement 可用的图,而不是手写卡号规则。
  2. 按真实 prompt/output/并发分布测 HBM、P2P、all-reduce、all-to-all 与 KV transfer 的 P50/P99。
  3. 为每种 KV 位置定义 owner、epoch、completion、lease 和释放路径,注入 worker/网络失败验证恢复。
  4. 将 TP group 固定在低延迟域;跨域流量明确标为 EP、PD 或背景任务,并设置容量和优先级。
  5. 把请求 trace 与 GPU timeline、NIC counter、block table 事件关联,先定位关键路径再调参。
  6. 在模型版本、量化、adapter、RoPE 或并行 mesh 改变时使不兼容 KV 和 communicator 显式失效。

完成这六项后,显存和网络不再是一张静态硬件清单,而是一套可验证、可回滚、可演进的推理状态系统。

17. 在 Mainline 中继续阅读

03 GPU 算子

从 attention、GEMM 与 kernel 视角理解 HBM 读写如何变成 token 延迟。

06 并行与放置

决定权重、KV 和通信状态怎样切分到 GPU mesh。

07 通信与拓扑

深入 collective、RDMA、拥塞和 TP/EP/PD 的通信图。

08 数据中心 KV 与 PD

把 KV 目录、迁移、远端 tier 和 prefill/decode 分离展开。

18 共用集群

将训练 checkpoint、在线流量和同一 fabric 的 QoS 一起管理。

相关文章索引

按 2025–2026 系统、网络、GPU 与基础设施选题继续查阅。