HBM 是什么
高带宽内存如何让 GPU 以 TB/s 级速度喂饱 Tensor Core
矩阵乘法算得再快,如果数据送不进来也是白搭。GPU 显存用的不是普通电脑里的 DDR5,而是 HBM(High Bandwidth Memory)——一种与 GPU 芯片「贴在一起」的堆叠内存,带宽可达每秒数 TB。读不懂 HBM 的 GB/s 数字,就无法理解为什么大模型推理是「带宽 bound」还是「算力 bound」。
HBM 由 SK hynix、三星、美光等厂商生产,与 NVIDIA GPU 通过 CoWoS 封装在一起。你买的「80 GB 显卡」里,那 80 GB 几乎全是 HBM stack,而不是可单独更换的内存条——这也是 GPU 显存扩容只能换更贵卡、无法像 DDR 一样加条的原因。
直觉
普通内存(DDR)像一条乡村公路:车道少,但每个路口(CPU 缓存)离仓库很近。HBM 像围绕工厂修建的环形高架:车道极多(1024-bit 甚至更宽的总线),工厂(GPU 计算单元)一伸手就能拿到货,但造这条路非常贵,所以容量通常只有 24–141 GB,远小于服务器上的 512 GB DDR5。
定义
HBM 通过 2.5D/3D 封装 把多层 DRAM die 垂直堆叠,再用 硅中介层(interposer) 与 GPU 芯片互联。关键指标:
| 指标 | 含义 |
|---|---|
| 带宽(GB/s 或 TB/s) | 单位时间内可读写的字节数 |
| 容量(GB) | 能存多少权重、激活、KV Cache |
| 位宽(bit) | 数据通路有多宽;HBM 常见 1024-bit,DDR5 单通道仅 64-bit |
带宽公式(简化):
例子
例子 1:常见数据中心的 HBM 规格(约数,随 SKU 略有差异)
| GPU | HBM 代际 | 容量 | 峰值带宽 |
|---|---|---|---|
| A100 80GB | HBM2e | 80 GB | ~2.0 TB/s(2039 GB/s) |
| H100 80GB SXM | HBM3 | 80 GB | ~3.35 TB/s |
| H100 80GB PCIe | HBM2e | 80 GB | ~2.0 TB/s |
| H200 141GB | HBM3e | 141 GB | ~4.8 TB/s |
注意:同一代 H100,SXM 版 HBM3 带宽显著高于 PCIe 版 HBM2e——封装形态影响内存规格。
例子 2:带宽够不够用?粗算 LLM 解码
解码一个 token 时,若模型权重为 FP16、参数量 ,每个 token 大约要从显存读取全部权重一次(简化模型):
7B 模型 FP16: GB/token-read。若 H100 有效带宽 2 TB/s,理论下限延迟 ms/token——实际还有 KV Cache 访问、kernel 开销,所以带宽是解码延迟的关键变量之一。
量化
- 与 DDR5 对比:单条 DDR5-4800 64-bit 约 38 GB/s;8 通道约 300 GB/s。一块 H100 的 HBM 约 10× 于整台服务器内存带宽。
- 与 PCIe 对比:PCIe 4.0 ×16 约 32 GB/s。H100 HBM 约 100× 于 PCIe——权重必须在显存里,不能每次算完再从 CPU 内存拉。
- Roofline 直觉:若算力峰值 989 TFLOPS(H100 FP16 Tensor Core),一次 GEMM 需 TFLOP。算力很高,但 LLM 推理常因 内存访问模式不规则(attention、KV Cache)而更接近带宽上限。
自己拖一下
「Roofline 直觉」讲的是一张图上的两条线,但正文一条也没画。下面把它画出来——拖算术强度,看你的算子撞的是算力屋顶还是带宽斜坡:
峰值 989 TFLOPS 只用到 0.3%——瓶颈是喂数据,不是算。加算力(换算力更强的卡)没用,得加带宽。
屋顶线只有两段:左边是带宽斜坡(斜线),右边是算力屋顶(平线),拐点在 AI* = 峰值算力/带宽。你的算子落在斜坡下就是带宽受限(数据喂不够快),落在屋顶下就是算力受限。
关键一击:切到 H200——它的 TFLOPS 和 H100 完全一样,但带宽从 3.35 涨到 4.8 TB/s,拐点左移、斜坡整体抬高,同一个 decode 点(AI≈1)的有效性能跟着涨。这就是为什么说 「H100/H200 比 A100 快,快在带宽不是算力」:LLM 解码 AI 只有 1 左右,深陷带宽区,峰值 TFLOPS 那个大数字它几乎用不到(拖到 decode batch=1 看那个 0.x% 的利用率)。
关键一击在「换卡」:切到 H200,它的 TFLOPS 和 H100 完全一样,但带宽从 3.35 涨到 4.8 TB/s,拐点左移、斜坡抬高——同一个 decode 点(算术强度 ≈1)的有效性能跟着涨。这就是为什么「H100/H200 比 A100 快,快在带宽不是算力」:LLM 解码的算术强度只有 1 左右,深陷带宽区,那个 989 TFLOPS 的大数字它几乎用不到(拖到 decode batch=1 看那个百分之零点几的利用率)。
HBM 为何比 DDR 贵且难扩容
HBM 的每 GB 成本远高于 DDR5,原因包括:3D 堆叠工艺、硅中介层、与 GPU 联合封装(CoWoS)、更低产量。因此 GPU 容量天花板 长期低于 CPU 内存——2024–2026 数据中心卡常见 40–141 GB,而 CPU 服务器可达 1–2 TB DDR5。
对 LLM 工程的两条推论:
- 装不下就必须换策略:量化(INT4/INT8)、多卡张量并行、CPU/NVMe offload——都是 HBM 容量不足时的补丁。
- 装得下也可能慢:权重 fit 在 80 GB 内,但 decode 时 memory-bound,需要高 带宽 而非更大 容量——HBM3e 升级主要惠及长 context、高并发 KV Cache 场景。
带宽单位:GB/s 与 TB/s 怎么读
厂商 spec 有时写 2039 GB/s,有时写 2.039 TB/s,二者等价( 在十进制营销语境下;严格 与 有细微差别,工程估算可忽略)。
心算换算:H100 ~3350 GB/s ≈ 3.35 TB/s。若 70B INT4 权重 35 GB,「纯带宽下限」读完全部权重需 ms——实际 decode 还有 attention、采样,但量级说明 每 token 都要「扫」一遍权重 时带宽多重要。
常见误区
误区:「显存 GB 数 = HBM 带宽」 — 容量和带宽是独立参数。H200 容量 141 GB、带宽 4.8 TB/s;A100 80 GB 带宽 2 TB/s。买卡要看你的瓶颈是「装不下」还是「读太慢」。
误区:「频率越高带宽越高」 — HBM 有效频率低于 DDR,但位宽极大,总带宽反而更高。
动手试一试
用 nvidia-smi 查看显存容量与带宽(部分驱动显示 Memory Bus Width):
nvidia-smi --query-gpu=name,memory.total,memory.bus_width --format=csv在 PyTorch 中观察一次大矩阵乘是否「吃满」算力:
import torch, time
n = 8192
a = torch.randn(n, n, device="cuda", dtype=torch.float16)
b = torch.randn(n, n, device="cuda", dtype=torch.float16)
# 预热
for _ in range(3):
a @ b
torch.cuda.synchronize()
t0 = time.perf_counter()
for _ in range(10):
c = a @ b
torch.cuda.synchronize()
elapsed = (time.perf_counter() - t0) / 10
flops = 2 * n**3 / elapsed / 1e12
print(f"GEMM {n}x{n}: {flops:.1f} TFLOPS (FP16)")
# H100 上理想情况可接近数百 TFLOPS;远低于峰值说明可能未用到 Tensor Core 或规模不够大Memory-bound vs Compute-bound 判据
算术强度(Arithmetic Intensity):
GEMM 块越大, 越高,越可能 compute-bound(Tensor Core 吃满)。Attention decode、LayerNorm、小 batch GEMM 常 memory-bound——再高的 TFLOPS 峰值也闲置,此时升级 HBM 带宽(H100 vs A100)比升级 SM 数量更敏感。
LLM prefill(处理 prompt)批量大、GEMM 大 → 偏 compute-bound;decode(逐 token)→ 偏 memory-bound。同一模型、同一卡,两阶段瓶颈不同,优化手段也不同(prefill 拼 batch,decode 用量化与 KV 优化)。
回顾与自测
Q:A100 80GB 与 H100 80GB 容量相同,为何 H100 解码常更快?
A:HBM3 带宽约 3350 GB/s vs A100 约 2039 GB/s;decode 常 memory-bound,带宽差距直接体现为 tokens/s。
Q:GDDR6X(4090)与 HBM 差在哪?
A:4090 显存带宽约 1 TB/s 量级,低于 H100 HBM;大 batch 训练与长 context KV 场景差距明显。
Q:如何快速查自己卡的 HBM 带宽?
A:NVIDIA 官网 spec sheet 或 nvidia-smi -q 中的 Product Name 对照白皮书。
Q:显存带宽和核心频率哪个更重要?
A:对 LLM 大矩阵乘,两者都重要;decode 小 batch 时带宽往往先成为瓶颈,频率影响次之。
工程师备忘录
- HBM 容量 查
memory.total;带宽 查白皮书,勿混淆。 - A100 ~2 TB/s,H100 SXM ~3.35 TB/s,H200 ~4.8 TB/s —— 三代量级记忆即可。
- 消费级 GDDR6X 带宽 ~1 TB/s,约为 H100 HBM 的 1/3。
- Roofline:;LLM decode 常低 → memory-bound。
当你看到 benchmark 写「H100 比 A100 快 2× tokens/s」而 TFLOPS 只涨 3× 时,often 是 HBM 带宽 + FP8 叠加的效果,而非单一指标 magic。读文章时把 带宽数字和 TFLOPS 数字成对出现,判断才完整。
小结
HBM 是 GPU 的「高速仓库」:贵、容量有限,但带宽以 TB/s(即 1000+ GB/s) 计,是普通内存和 PCIe 无法替代的。读 LLM 硬件规格时,务必同时看 容量(GB) 和 带宽(GB/s)——下一章的 NVLink 解决的是 GPU 与 GPU 之间 的带宽,而 HBM 解决的是 单卡内部 的带宽。
下一篇:NVLink 是什么