基础篇

F21|算得快与装得下:复杂度、带宽、批处理和并行

基础篇约 2.8 千字1 组分步图解

从具体对象与小例子开始,理解计算过程与适用条件。

本章目录
动态图解 · F21

算得慢,可能是东西搬得慢

为什么一块算力更高的GPU,不一定让任务同比变快?

把GPU想成工厂只适合记住一个有限类比:运算像加工,读写像运输。加工设备翻倍但运输仍堵塞,整体不会同比快。真正的分析应回到运算数、搬运字节数、设备速率与测量,而不是只看某个宣传峰值。

计算量要做的运算总数。
带宽单位时间能搬运的字节数。
吞吐单位时间完成多少工作;不同于一条请求要多久。
通信数据在设备之间交换产生的成本。

输入与适用条件:固定教学任务与理想速率。第二、三帧是各自恢复基准后只改一个因素的独立对照;不宣称真实运行时间。

1 / 4 · 先问算力和搬运谁更慢

第1步,共4步

窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。

算得慢,可能是东西搬得慢:先问算力和搬运谁更慢计算下界1搬运下界8横轴单位:毫秒;这是教学下界,不是GPU实测。

教学任务:1,000,000次浮点运算;8,000,000字节搬运。假定算力10亿次/秒、带宽10亿字节/秒。

计算=1ms;搬运=8ms

默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。

为什么需要

先定位主导瓶颈,才知道该优化矩阵计算、显存读写还是调度。

怎样实现

用分账估计指导Profile,再用同任务实测检查。

可能的代价与误解

提高吞吐可能增加单请求排队;分片省内存可能增加网络通信。

如何判断是否做对

观察端到端时间及各阶段Trace,避免只测某一个最快算子。

先区分三本账

计算量是需要做多少次运算;存储量是要保存多少数据;数据移动量是需要在不同存储层或设备间搬多少数据。少存一些,不一定少算;增加并行,不一定让一个请求更快。

FLOP常指一次浮点运算;FLOPS是每秒浮点运算数量。二者差一个S,却分别是工作量与速率。一次乘加是否计为两次FLOP要看统计约定。

O(T²)到底是什么意思

复杂度Big-O描述输入规模变大时工作量增长的级别。若T个查询都要与T个Key比较,就有T²对关系。T翻倍,关系数变为4倍,因此常说注意力分数部分关于T是二次增长。

这不是说某实现必然花T²秒,也不保证端到端时间刚好变4倍,因为硬件、隐藏宽度、内存移动和其他层也参与。写复杂度时应说明哪个变量在增长、其他什么暂时固定。

为什么存储足够也可能算不快

硬件有计算能力上限,也有每秒读取数据的带宽上限。若每读很多数据只做少量运算,可能被带宽限制;若数据能重复利用而计算很多,可能被计算能力限制。

用粗略下界估算:任务做C次运算、移动M字节,计算速率R、带宽BW,耗时至少受到max(C/R, M/BW)约束。这类思路属于Roofline(屋顶线)分析。实际还有排队和同步开销,不能当精确计时公式。

FlashAttention省的是什么

普通概念实现会显式形成很大的T×T分数或权重表。FlashAttention通过分块等方法,在计算时管理局部块和归一化统计,避免把整张中间表反复存取外部显存。

它没有简单把精确注意力变成只读几个Token,也不等于KV缓存。前者安排单次注意力计算的读写,后者跨生成步骤复用历史K/V。高级Q027会推导在线softmax,先用“同样目标,换一种中间存储和访问次序”理解它。

PagedAttention与连续组批

分页把缓存切成固定大小的块,用映射表记住每条序列的逻辑块对应哪块物理存储,帮助管理不同长度请求和共享前缀。它与操作系统分页有相似管理思想,但具体对象是KV数据,不是整个程序的所有内存。

连续组批continuous batching允许某个请求完成后释放位置,再加入新请求,而不是整批必须同步结束。它可以提高资源利用,但prefill、decode、长短请求之间仍要调度。

多GPU到底切哪部分

方法 主要分法 你需要追踪的代价
数据并行DP 多份模型处理不同样本 训练时同步梯度等
张量并行TP 拆矩阵或算子到多个设备 层内通信与组合
流水并行PP 不同层放不同设备 阶段等待与传输
ZeRO类分片 分摊训练参数、梯度或优化器状态 取用和同步开销

更多设备不是无条件加速。如果一次通信时间大于省下的计算时间,可能更慢。训练分片与推理分离服务也不能用同一个名词代替。

训练保存、推理缓存与检查点

训练为求梯度可能保留激活;activation checkpointing保存部分节点、在反向时重算其他部分,用计算换内存。KV缓存则用内存换重复推理计算。它们甚至体现相反的资源取舍。

磁盘上的模型检查点保存恢复所需权重或训练状态;Agent任务检查点保存工作进展。名字都叫checkpoint,保存对象完全不同。

运行示例 · F21

先数计算与搬运,再决定是不是GPU算力不够

输入与条件。假想操作要做1,000,000次浮点运算,并搬运8,000,000字节。假想设备峰值100GFLOP/s、带宽10GB/s,单位按十进制。

步骤与对象内部动作中间结果 / 新状态
1算纯计算下界10^6/10^11秒0.00001秒,即10微秒。
2算纯搬运下界8×10^6/10^10秒0.0008秒,即800微秒。
3取更大瓶颈理想充分重叠时取max至少约800微秒,而不是10微秒。
4减少搬运若融合操作只需4MB搬运下界约400微秒;算力没变也可能更快。
5改成平方配对T从100增到200注意力位置对从10,000变40,000,不是只多一倍。

把过程连起来。“省内存读写”和“减少数学配对数量”是不同优化。不能看到GPU峰值很高就忽略搬运。

边界与反例。这些是理想化下界,不是实际性能;还未计调度、通信、核启动、缓存命中和重叠不足。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

课后自检

自检 1

输入T翻倍,T×T关系数怎样变?是否代表整个系统必然慢4倍?

查看参考答案收起参考答案
关系数变4倍;端到端耗时还取决于其他计算、硬件和调度,不能直接保证倍率。
自检 2

FlashAttention、KV Cache和量化能互相替代吗?

查看参考答案收起参考答案
不能。它们分别改变注意力中间计算与读写、历史计算复用和数字表示精度,作用对象不同。

机制依据:[FLASH][PAGED][TP][ZERO][SRE]。本节数值与情景除另注外均为原创教学示例;来源不代替中文讲解。

记录保存在本机浏览器。

输入关键词即可检索。

↑ ↓ 选择 Enter 打开Esc 关闭 · 仅本地搜索

阅读设置

阅读设置仅保存在本机浏览器,不上传任何数据。