HBM
高带宽内存 (High Bandwidth Memory, HBM) 是数据中心 GPU 常用的堆叠显存技术。它通过宽数据接口提供很高带宽,保存模型权重、激活、梯度、优化器状态和 KV Cache;容量与带宽共同决定大模型能否装入及实际运行速度。
快速开始¶
先观察显存容量和实时使用:
再用真实上下文长度与并发压测。模型权重刚好装入显存不表示服务可用,仍需给 KV Cache、临时 Workspace、CUDA Graph 与框架开销预留空间。
容量与带宽¶
容量回答“能放多少数据”,带宽回答“每秒能搬多少数据”。训练通常同时消耗两者:权重、梯度、优化器状态和激活占用容量;前向与反向反复读取写入数据,受带宽影响。
推理中,Prefill 的 Attention 和矩阵乘法具有较高数据复用;逐 Token Decode 必须反复读取权重并访问历史 KV Cache,常更接近带宽受限。
内存层次¶
GPU 内存从近到远大致为 Register、Shared Memory / L1、L2 和 HBM。高效 Kernel 尽量将 HBM 中的数据分块搬到更近的层次复用,减少总传输量。
若操作执行浮点运算量为 \(F\)、从 HBM 传输字节数为 \(B\),算术强度为:
Roofline 模型给出性能上界:
算术强度低的任务即使拥有更多 FLOPS,也可能受 HBM 带宽限制。
KV Cache 案例¶
KV Cache 的容量近似与层数 \(L\)、序列长度 \(S\)、并发 Batch \(B\)、KV Head 数 \(H_{kv}\)、Head Dim \(D\) 和数据类型字节数 \(b\) 成正比:
前面的 2 表示 Key 和 Value。长上下文与并发同时增长时,Cache 会快速占满 HBM。GQA / MQA、KV 量化、PagedAttention、Prefix Cache 和请求限额都可缓解压力,但各自有质量、复杂度或隔离取舍。
训练容量案例¶
一个 7B 参数模型仅 FP16 权重约占 14 GB。全参数 AdamW 训练还需梯度、两个优化器状态以及激活,实际需求远大于权重大小。可通过混合精度、激活重计算、ZeRO / FSDP 分片和 CPU Offload 降低单卡容量,但会增加计算或通信。
带宽诊断¶
当 Decode 的每 Token 延迟高、GPU 算力利用率低但显存读写接近饱和时,优先怀疑带宽。可尝试:
- 提高连续批处理并发,增加权重复用;
- 使用 GQA、MQA 或 MLA 减少 KV 数据;
- 量化权重或 KV Cache;
- 减少不必要的类型转换和中间张量;
- 使用针对目标 GPU 的高效 Kernel。
不能只提高 Batch;显存不足、TTFT 变差或尾延迟上升时需重新平衡。
常见问题¶
- HBM 容量大不意味着带宽一定更高,必须查看具体 GPU;
nvidia-smi空闲显存不等于框架能得到连续可用空间;- 显存碎片常来自变长请求与动态分配,PagedAttention 可改善但不能创造容量;
- PCIe 显存卸载比 HBM 慢得多,适合容量折中而非免费扩展;
- 文件中模型大小与运行时显存不同,因为还存在解压、Workspace 和 Cache。
计算单元见 Tensor Core,推理缓存管理见 PagedAttention,显卡总览见 GPU。