01 · 大仓库与小工作台
可以把 HBM 理解为设备上的大仓库,把片上存储理解为靠近计算单元的小工作台。工作台近、访问快,但容量小;仓库容量大,但搬运需要时间。这个类比只解释距离和容量,不代表 HBM 本身性能很低。
| 存储位置 | 作用 | 阅读时注意 |
|---|---|---|
| HBM / 设备主存 | 存放模型权重、输入、KV、输出及较大的中间结果 | 部分设备使用其他显存技术,不是所有 GPU / NPU 都是 HBM。 |
| 片上共享内存等 | 线程协作使用的临时数据区,适合分块计算 | 程序管理的共享内存与硬件自动管理的缓存不是同一概念。 |
| 寄存器 | 计算线程当前使用的值和累积量 | 也是有限资源,使用过多会影响并发或造成额外访存。 |
SRAM 是一类存储实现技术;“SRAM=共享内存=所有缓存”并不准确。FlashAttention 的教学图常用 SRAM 概括高速片上工作空间,实际实现还涉及寄存器和其他存储层次。
02 · 容量、带宽、算力分开看
容量是能存多少字节;带宽是单位时间能搬多少字节;算力是单位时间能完成多少运算。一个矩阵即使放得下,也可能反复读写而耗时。相反,如果计算本身很重,少搬一点数据也可能不是主要收益。
教学假设:需要传 2 GB,实际持续带宽为 1 TB/s
仅搬运时间约为 2 GB / 1000 GB/s = 2 ms
这是简化估算,不含启动、缓存命中、争用和计算重叠。03 · 中间结果为什么会增加流量
若某一步把大矩阵写到 HBM,下一步再从 HBM 读回来,至少多出一次完整写和一次完整读。把两个操作衔接到同一片上工作区,就可能少掉这两次搬运。输入仍需读取,最终输出仍需保存。
分块让工作集适配片上容量;复用让已经读来的数据用于更多计算。FlashAttention 把分数块马上用于更新输出,避免完整分数 / 概率矩阵在 HBM 中周转。
04 · 怎样理解“瓶颈”
如果计算单元常常在等数据,这段执行偏向访存瓶颈;如果数据供给充足但计算单元一直忙,则更偏向计算瓶颈。启动、同步和并发不足也可能拖慢执行。实际判断需要测量,不能仅凭算子名称决定。
- 比较需要多少运算、搬多少字节。
- 观察 profiler 中的内核、读写、空闲与同步。
- 改一个变量再测:长度、批次、精度或后端。
依据:FlashAttention 原始论文 ↗ · PyTorch · Performance Tuning Guide ↗