一句话定义
阿姆达尔定律(Amdahl's Law)说的是:一个任务里只要有没法并行(parallel)的部分,那么无论堆多少并行算力,整体加速比(speedup)都有一个硬上限。
公式长这样:加速比 = 1 / ((1-p) + p/N)。其中 p 是可以并行的那部分占比,N 是并行度(比如卡数、核数)。当 N 趋近无穷大时,加速比趋近于 1/(1-p)——也就是串行(serial)那部分决定了天花板。
打个比方
搬家。整理打包花了 2 小时,这活只能一个人干;把箱子搬下楼原本要 10 小时,但可以叫 10 个人一起搬,压缩到 1 小时。总时间从 12 小时变成 3 小时,加速比是 4 倍,不是 10 倍。再叫 100 个人来,总时间也降不到 2 小时以下——那 2 小时的打包时间谁也帮不上忙。想真正更快,只能让打包本身变快。
和相邻概念的区别
| 阿姆达尔定律 | 古斯塔夫森定律(Gustafson's Law) | |
|---|---|---|
| 前提 | 问题规模固定,问"能不能更快" | 问题规模随算力一起变大 |
| 视角 | 悲观上限 | 乐观视角 |
| 结论 | 加速比被串行部分锁死 | 规模做大后,串行占比变小,加速比可以接近线性 |
两个说法不矛盾:一个回答"同样的活能干多快",一个回答"给我更多算力我能干多大的活"。
对 AI 从业者意味着什么
第一,加卡之前先找串行段。训练里常见的串行或准串行环节包括:数据加载与预处理、tokenizer、checkpoint 落盘、日志、梯度同步(all-reduce)。这些环节不解决,堆卡就是烧钱买等待。
第二,小 batch 训练时通信占比高,梯度同步几乎吃掉全部收益,加卡吞吐可能几乎不涨。让通信和计算重叠、增大有效 batch、优化网络拓扑,本质都是在削减公式里的 (1-p)。
第三,先算账再扩容。假设某任务串行占 20%,并行部分用 4 倍算力,代入公式得到约 2.5 倍;算力无穷大也只有 5 倍。看到"加 4 张卡只快 2.5 倍"时不必惊讶,那是数学,不是配置错了。
第四,阿姆达尔定律给出的只是理论上界。实际还会被内存带宽、调度开销、IO、跨节点延迟继续打折,真实曲线通常比公式更难看。具体硬件的实测数据,以官方文档和自家压测为准。
一句话总结:想提速,先修最长的那根串行链条,再谈往机柜里塞卡。
