跳到正文
动手理解 · CONCEPT LAB

把一块权重从“大仓库”搬到计算单元

容量回答“放不放得下”,带宽回答“每秒能搬多少”,延迟回答“一次访问从发出到数据可用要等多久”。拖动数据层级,观察工作集越靠近计算单元,容量怎样缩小、复用要求怎样升高。

已经发生 正在观察 接下来
01 / 04

状态传导图

HBM 显存 HBM 权重 / KV / 激活
L2 片上 L2
SMEM L1/TEX | Shared cache / explicit
OP 操作数空间 依架构而定
TC Tensor Core

HBM stack 与 GPU die 分离;在 H100 等产品中二者共封装。图中容量与距离只表达相对概念。

观察点 01

完整权重和 KV Cache 主要住在显存大仓库

模型加载后,权重通常常驻 HBM。它容量大、带宽高,但相对片上存储更远;每生成 token 仍要读取许多层的权重与历史状态。

可容纳数据量最大
离计算单元距离较远
此刻要记住

“模型在 GPU 上”不等于数据已经在 Tensor Core 手边。

算法工程 · Memory & Bandwidth

显存与带宽:大模型为什么不是只看算力

看 GPU 参数时,很多人只盯 TFLOPS。真正做大模型时,经常先撞上的却是三堵墙:放不下搬不动等太久。这篇把 HBM、SRAM、CPU 内存、NVLink、PCIe、KV Cache、优化器状态串成一张“数据搬运地图”。

显存与带宽心智模型:工作负载占用 HBM 容量,kernel 在受带宽和访问延迟约束的路径上利用 L2、片上 SRAM 与寄存器复用当前工作集,再送给 Tensor Core 计算;结果尽量复用并写回。下方分别解释容量、带宽、延迟与算力四个指标
先把四个旋钮分开:容量管装多少,带宽管每秒搬多少,延迟管一次访问等多久,算力管数据到位后算多快。真实 PCIe/NVLink/NIC 边界见下方拓扑图。查看原图 ↗
00 · 先抓住

显存是仓库,带宽是货梯,算力是厨师

生活类比
GPU 像后厨。Tensor Core 是厨师,寄存器与片上 shared memory 是抽屉和案板,HBM 是近处仓库,NVLink/PCIe 是货梯。厨师再快,如果食材一直在路上,整家店还是慢。
小例子
Decode 每生成一个 token,都要读取大量模型权重和历史 KV。小 batch 时厨师经常等食材,瓶颈是带宽;大 batch 或 prefill 时矩阵乘更饱,瓶颈可能转向算力。
想沿一次请求看完整路线?
本页重点回答“容量、带宽、延迟与 Roofline”;如果想从 checkpoint 加载一路看到 token 输出,请读新专题 《一次大模型推理,数据到底怎么走》
容量放不放得下:权重、KV Cache、激活、梯度、优化器状态。
带宽搬不搬得快:HBM、SRAM、NVLink、PCIe 每秒能搬多少数据。
延迟等不等得起:一次远距离访问、一次跨机通信、一次 offload 往返要多久。
01 · 内存层级

GPU 不是一块“显存”,而是一整套层级仓库

越靠近计算单元的工作集通常越小、访问越快;越远的存储通常容量更大、访问代价更高。这里先画“数据复用视角”,但要注意:register、shared memory、cache 是不同的编程语义;在现代 NVIDIA GPU 上,L1 data cache、texture cache 与 shared memory 又会共享一部分片上 SRAM 资源。

离 Tensor Core 越近,越快但越小 Registers 每线程私有 L1 / Shared 统一 SRAM 资源池 L2 Cache 芯片级缓存 HBM GPU 显存 CPU RAM 主机内存 代表性趋势:工作集变大 · 访问通常更远 近处 快,但放不多 tile 与累加值尽量待这里 HBM 容量远大于片上 SRAM 但带宽更低、访问更远 远处 更大,更慢 offload 会付延迟代价
这是便于建立直觉的“工作集与复用”示意,不是强制流水线:cacheable global load 的请求先查 L1/TEX;L1 miss 或 bypass 才请求 L2,L2 miss 才到 HBM。Shared Memory 是线程块显式访问的地址空间,不是所有数据的必经站。寄存器按线程分配在 SM register file 中,也不能只用一条单调“容量阶梯”概括。
层级你可以怎么理解大模型里常见用途
Registers每线程分配在 SM register file 的操作数与累加空间;溢出会产生 local-memory 流量kernel 临时变量、传统 MMA 操作数与累加器
L1 / Shared逻辑语义不同:L1 由硬件缓存,shared memory 由线程块显式寻址;Hopper/Blackwell 将它们放在统一片上 SRAM 资源中并支持 carveoutFlashAttention tile、矩阵乘分块、归约、局部缓存
L2 Cache芯片级共享缓存;L1 miss/bypass 的 global-memory 请求会到 L2,L2 miss 才访问 HBM复用权重块、KV 块、跨 SM 数据
HBMHBM stack 与 GPU die 分离;在 H100 等产品中与 GPU 芯片共封装。容量远大于片上 SRAM,但带宽更低、访问延迟更高模型权重、激活、KV Cache、梯度、优化器状态
CPU RAM / NVMe更远的仓库offload、检查点、数据加载;能救容量,但会伤延迟和吞吐
架构例外
“Shared → Registers → Tensor Core”只是一条传统 tiled MMA 心智路径,不是 ISA(Instruction Set Architecture,指令集架构)合同:Hopper WGMMA 的部分操作数可直接来自 Shared Memory;Blackwell tcgen05 还引入 Tensor Memory(TMEM)承载累加器等数据。优化必须以目标架构和具体指令为准。
02 · 三个概念

容量、带宽、延迟:别混成一个“快不快”

显存讨论里最容易乱的是:容量、带宽、延迟是三件不同的事。它们分别对应“装不装得下”“每秒能搬多少”“一次访问从发出到数据可用要等多久”。应用层 TTFT/TPOT 还会叠加排队、调度与计算,不能直接等同于一次内存访问延迟。

容量 capacity

仓库有多大。决定模型权重、KV Cache、batch、上下文长度能不能塞进显存。

带宽 bandwidth

货梯每秒能搬多少货。decode 阶段常卡在“每生成一个 token 都要读权重/KV”。

延迟 latency

叫一次货要等多久。CPU↔GPU、跨机器通信、随机小访问,常被延迟支配。

一句话
显存大只是仓库大;带宽高才是搬货快;延迟低才是每次拿货不等。大模型工程经常同时被这三者夹住。

几个硬件数量级(用于建立直觉)

硬件 / 通道容量或带宽说明
H100 SXM80GB HBM3,HBM 峰值 3.35TB/s;NVLink 900GB/sNVIDIA 官方峰值;900GB/s 是每 GPU 的 18 条第四代 NVLink 双向汇总
H200 SXM141GB HBM3e,HBM 峰值 4.8TB/s;NVLink 900GB/sHopper 的容量与 HBM 带宽升级;NVLink 同样是每 GPU 双向汇总峰值。
HGX B200 SXM180GB HBM3e,HBM 峰值最高 8TB/s;第五代 NVLink 1.8TB/s当前 NVIDIA HGX 架构页口径;1.8TB/s 是每 GPU 双向。具体 Blackwell 产品的容量会随形态而异。
HGX B300 SXM288GB HBM3e,HBM 峰值最高 8TB/s;第五代 NVLink 1.8TB/s当前 HGX B300 官方架构口径;NVLink 是每 GPU 双向汇总峰值。
PCIe 5.0 x16编码后理论值约 63.0GB/s/方向,约 126.0GB/s 全双工汇总尚未扣 TLP/DLLP、流控、DMA 与软件开销;不是应用可持续吞吐。
PCIe 5.0 x16 手算
32 GT/s × 16 lanes × 128/130 ÷ 8 = 63.015 GB/s,这是单方向、只扣 128b/130b 编码后的理论数据率;全双工两方向相加约 126.03GB/s。厂商常把它四舍五入写作 64GB/s/方向或 128GB/s aggregate,不能拿汇总值与单向实测混比。
03 · 显存账

大模型显存到底被谁吃掉了

“模型多少 B”只是权重规模。训练和推理还会额外占激活、梯度、优化器状态、KV Cache。先把账拆开,后面的 量化、ZeRO、PagedAttention 才讲得通。

权重

权重显存:参数量 × 每个参数字节数

weights
weight memoryparameters×bytes per parameter\text{weight memory} \approx \text{parameters} \times \text{bytes per parameter}
模型FP16/BF16 权重INT8 权重INT4 权重
7B约 14GB约 7GB约 3.5-4GB
70B约 140GB约 70GB约 35-40GB
671B MoE约 1.34TB(若全 BF16 存权重)约 671GB约 335GB+

表中按十进制 GB/TB 粗算;INT4 的“参数数 × 0.5 byte”只是紧凑存储下界,真实格式还可能包含 scale、zero-point、分组元数据、对齐与运行时 buffer。这只是权重,不含 KV Cache 和激活。MoE 每 token 只激活少数专家,省的是计算量;若所有专家常驻显存,权重容量账仍然要付。

KV

KV Cache:长上下文和高并发的真正大户

autoregressive inference
自回归推理时,每层通常要缓存历史 token 的 K/V。固定模型架构与精度时,上下文越长、并发越高,KV Cache 近似线性增长;在长上下文、高并发 decode 中,它常成为显存大户。
logical KV payloadB×L×S×2×Hkv×D×bytes\text{logical KV payload} \approx B \times L \times S \times 2 \times H_{kv} \times D \times \text{bytes}

B=当前副本上同时驻留的序列数,L=缓存 KV 的层数,S=每条序列已缓存长度,H_kv=KV 头数,D=每头维度,乘 2 是 K 和 V。这是单个模型副本、分片前的逻辑 payload;真实物理占用还受 TP/CP 分片、分页末块、对齐、prefix sharing、滑动/局部注意力层、latent cache 与 KV 量化影响。

手算:GQA 为什么省
B=1,设 32 层、4096 token、8 个 KV 头、每头 128 维、BF16:32×4096×8×128×2×2 = 536,870,912 bytes,即每条序列约 512MiB。若改成 32 个 KV 头的 MHA,其余不变,就是约 2GiB,正好 4 倍。
例:MLA 压什么
DeepSeek-V2 报告的 MLA 将 KV 表示压缩到 latent,以降低 KV Cache;论文在其模型对比中报告 KV Cache 降低 93.3%。这是特定架构与基线下的结果,不等于所有 MLA 实现都固定节省这个比例。
训练

训练显存:权重只是其中一块

training footprint
项目为什么占显存常见优化
参数 weights模型本体FSDP / ZeRO、低精度、张量并行
梯度 gradients反向传播要给每个可训练参数存梯度ZeRO/FSDP 梯度分片、冻结参数或 PEFT;部分系统也支持低精度梯度
优化器状态AdamW 通常要一阶/二阶矩,混精还可能有 FP32 master weightZeRO、8-bit optimizer;也可给适合的参数组选择 Adafactor、Muon 等不同状态结构
激活 activations反向传播要用前向中间结果;序列越长越贵减小 micro-batch / 梯度累积、gradient checkpointing、FlashAttention、sequence parallel

梯度累积只有在把单次 micro-batch 调小时,才会降低该步保存的激活;它不会自动缩小“每个可训练参数一个梯度”这组张量。一个常见但非通用的混精 Adam 粗算是 BF16 参数 2B + BF16 梯度 2B + FP32 master weight 4B + FP32 一阶/二阶矩 8B = 16 bytes/param;框架可能复用 buffer、改变梯度/状态精度或不保留 master weight。再叠加激活、临时 workspace 与通信 buffer,训练 70B 不能按“权重 140GB”简单估算。

04 · 数据交换

数据到底怎么搬:GPU 内部、NVLink Domain 内、跨 Domain

大模型不是一个矩阵乘完就结束。一次训练或推理,会在 HBM、片上 SRAM、多张 GPU、CPU 内存之间来回搬数据。要按真实拓扑分边界:NVLink Domain 可能只是一个 HGX 主机,也可能像 GB200/GB300 NVL72 那样横跨多个 compute tray / node;跨 NVLink Domain 或跨机架才通常进入 NIC 与网络 Fabric。

不要把拓扑边界等同于机箱边界:普通 x86 主机的 CPU RAM / NVMe 通常经 PCIe;传统 HGX 的 NVLink Domain 常在单机内,而 GB200/GB300 NVL72 可让多节点机架中的 GPU 处于同一 NVLink Domain。跨 Domain / 跨机架才通常经两端 NIC 与网络 Fabric。GPUDirect Storage(GDS)只在受支持路径上绕过 CPU bounce buffer,兼容路径仍可能回退到 CPU staging。查看原图 ↗
路径典型瓶颈对应技术
HBM ↔ SRAM ↔ Tensor CoreHBM 读写太多,Tensor Core 等数据FlashAttention、fused kernel、tiling、重计算
GPU ↔ GPU(NVLink Domain 内)NVLink/NVSwitch 拓扑、带宽与延迟限制扩展效率;Domain 可能跨节点张量并行、专家并行、all-reduce / all-to-all 优化
GPU ↔ CPU RAM普通服务器中 PCIe 相比 HBM/片上路径带宽低得多,offload 往返会拉高延迟ZeRO-Offload、paged optimizer、CPU KV offload
跨 NVLink Domain / 跨机架NIC 与 InfiniBand/Ethernet Fabric 通信遮不住,训练吞吐下降流水并行、通信计算重叠、拓扑感知调度
05 · 瓶颈判断

算力受限 vs 带宽受限:用 Roofline 建直觉

Roofline 模型的思想很简单:如果从所选内存层级每搬 1 byte 能做很多计算,就更可能接近算力上限;如果搬很多数据只做一点计算,就更可能卡在该层级的带宽。Operational intensity 会受缓存复用、数据布局和 kernel 实现影响,并非模型名称对应的固定常数。

operational intensity=FLOPsbytes moved at the chosen memory level\text{operational intensity}=\frac{\text{FLOPs}}{\text{bytes moved at the chosen memory level}}
attainable FLOP/smin(Ppeak, Bmemory×I)\text{attainable FLOP/s} \le \min(P_{peak},\ B_{memory}\times I)
Iridge=PpeakBmemoryI_{ridge}=\frac{P_{peak}}{B_{memory}}
低 batch Decode(示意) 高复用 GEMM(示意) Operational intensity: FLOPs / bytes moved Attainable FLOP/s 带宽受限:多搬少算 算力受限:少搬多算

图中两个点只表达典型相对位置,不是任何模型或 GPU 的实测。斜线斜率取决于所选内存层级带宽,水平屋顶取决于匹配的数值精度、dense/sparse 口径与硬件峰值。

手算拐点
假设一台设备的峰值是 100TFLOP/s、所考察内存层级带宽是 2TB/s,则 Roofline 拐点为 100/2=50 FLOP/byte。强度 10 FLOP/byte 的 kernel 上限约 20TFLOP/s;强度升到 100 时,公式给出 200TFLOP/s,但最终仍被 100TFLOP/s 的算力屋顶截住。
Prefill 常更偏算力受限

整段 prompt 可并行计算,大矩阵乘较多;但很长的注意力、较小 batch 或低效 kernel 也可能受内存 I/O 限制。FlashAttention 等实现会影响 TTFT。

Decode 常更偏带宽受限

低 batch 时,每步只生成少量 token,却要读权重和历史 KV,算力可能闲着。batch、量化、上下文长度与 kernel 都可能把瓶颈位置推走。

Roofline 的边界
Roofline 给的是上界与诊断起点,不是性能预测器。做 GPU 分析时要用 profiler 实测 FLOPs 与流量,并让 precision、dense/sparse 峰值和所选 L1/L2/HBM 带宽口径互相匹配;Hierarchical Roofline(分层 Roofline)可同时画多级内存屋顶。若结果远低于屋顶,还要查 occupancy、指令依赖、同步、kernel launch、访存合并与跨卡通信;传统 Roofline 本身不直接建模延迟、队列和通信重叠。
06 · 算法映射

为什么算法工程都在围绕“少存、少搬、搬得更顺”

把这套语言掌握后,很多看似分散的技术会突然连起来:FlashAttention、量化、PagedAttention、ZeRO、MoE,本质都在重新安排数据。

技术它在优化什么一句话机制
FlashAttentionHBM ↔ 片上 SRAM 的中间矩阵读写用 tiling 与在线 softmax 避免在 HBM 物化完整 N×N 注意力矩阵,同时保持精确注意力。
量化权重/激活/KV 的容量与带宽更少 bit 可减少存储和流量;端到端加速仍取决于硬件、kernel 与反量化开销。
PagedAttentionKV Cache 碎片和显存利用率借鉴虚拟内存分页,以非连续块管理 KV,减少碎片和冗余复制;仍会有末块及元数据开销。
Continuous Batchingdecode 阶段的权重读取摊销动态把活跃请求组成批次,让一次权重流式读取服务更多 token,而非字面上只搬一次权重。
ZeRO / FSDP训练时参数、梯度、优化器状态容量把状态切到多卡,不让每张卡都复制全套。
MoE + Expert Parallel计算量 vs 通信量的交换每 token 少算专家,但 token 要跨卡路由,all-to-all 成新瓶颈。
Prefill/Decode 分离两类资源特征不同的 workload 混跑把“读题”和“吐字”拆到不同资源池分别优化,但会新增 KV 传输、调度和排队成本。
07 · 常见误区

看硬件和看模型时,最容易踩这几个坑

误区 1:TFLOPS 高就一定快

不一定。decode、embedding lookup、小 batch、跨卡通信,都可能让 Tensor Core 吃不饱。

误区 2:显存大就一定快

容量大只是装得下。带宽不够、通信慢、kernel 不好,吞吐仍然上不去。

误区 3:MoE 一定省显存

MoE 主要省每 token 计算量。专家权重是否全驻留、是否分布在多卡,决定它到底省不省显存。

误区 4:长上下文只是算力问题

要看阶段与并发:长 prefill 可能受注意力计算和 I/O 影响;高并发 decode 常先撞上 KV Cache 容量与带宽。

误区 5:PCIe 多卡和 NVLink 多卡差不多

两者峰值带宽差距明显,但实际影响还取决于拓扑与通信频率。张量并行、专家并行、all-reduce/all-to-all 通常尤其敏感。

误区 6:offload 是免费扩容

CPU/NVMe offload 能救容量,但数据走远路,延迟和吞吐会付代价。

速查

一句话总结

Cheat sheet
显存容量决定能不能装下权重、KV Cache、激活和优化器状态。
显存带宽决定每秒能从 HBM 搬多少数据;decode 阶段常被它卡住。
延迟决定每次访问要等多久;小批量、跨设备、随机访问最敏感。
训练大户权重 + 梯度 + 优化器状态 + 激活。
推理大户权重 + KV Cache;上下文越长、并发越高,KV 越致命。
算法工程主线少存、少搬、搬得更顺,最后让 Tensor Core 不空等。
资料来源

主要参考

核查日期:2026-07-14。厂商 GB/TB 按十进制规格口径;文中 KV 手算用二进制 MiB/GiB。硬件带宽均为理论峰值或官方标称值;NVLink 写每 GPU 双向汇总峰值,PCIe 同时列单方向与全双工汇总,二者都不能直接视为单 peer 或应用实测吞吐。