🏠 总目录📚 本教程 在解决什么问题 ← →
📑 本页目录(点开跳转)

01 · AI Infra 在解决什么问题

⏱ 22 分钟 | ⭐ 先看清战场


🎯 一句话

模型的数学是完美的,硬件是有限的。AI Infra 就是这条鸿沟里的全部工程。 而这条鸿沟有多宽,可以用一个数字概括:大部分人的 GPU,实际只发挥了 20–40% 的性能。


😱 一、四个让人不舒服的事实

事实 ① 你的 GPU 大概率在摸鱼

关键信息

🔑 第一个反直觉:60% 就是优秀。 不是因为工程师不行,而是因为存在物理上无法消除的开销(下面会讲)。 知道这个基准,你才不会在 55% 的时候还在盲目优化。

事实 ② 算力涨得比带宽快得多

关键信息

过去 20 年(大致量级):
GPU 算力 ↑ 约 1000 倍
显存带宽 ↑ 约 30 倍 ⭐ 差了一个数量级以上
互联带宽 ↑ 约 30 倍
显存容量 ↑ 约 20 倍
结果:【计算越来越便宜,搬数据越来越贵】

对照

一个具体的对照(A100 量级):

做一次 FP16 乘加 ≈ 极快,几乎免费

从 HBM 读一个数 ≈ 比它慢【两个数量级以上】

从另一张卡读 ≈ 再慢一个数量级

从另一台机器读 ≈ 再慢一个数量级

🔑 这是整个领域最重要的一句话: 现代 GPU 优化的主线不是"少算点",而是"少搬点"。 FlashAttention、算子融合、量化、KV Cache 优化 —— 全都是这一句的推论。

事实 ③ 显存是最硬的墙

算一算

训练一个 7B 模型(BF16)到底要多少显存?

模型参数 7B × 2 字节 = 14 GB

梯度 7B × 2 字节 = 14 GB

Adam 优化器状态 7B × 8 字节 = 56 GB ⭐ 最大的一块!

(FP32 的 m、v,各 4 字节)

激活值 取决于 batch 和序列长度,几 GB ~ 几十 GB

合计 ≥ 84 GB + 激活

→ 一张 80GB 的 A100【装不下一个 7B 模型的训练】💀

💡 注意优化器状态是最大的一块 —— 这就是 ZeRO 存在的理由。 它不优化计算,它只是把这 56GB 切开分给多张卡。

事实 ④ 推理的账和训练完全不一样

关键信息

训练:一次性投入,算完就完了
推理:【每一个请求都在烧钱】,永远不会停 ⭐
典型的大模型产品:
训练成本 ██ (一次)
推理成本 ████████████████████ · (每天,持续增长)
长期看,推理成本会远超训练成本
而推理的瓶颈和训练【完全相反】(第 15 章)

🗺️ 二、这个领域的地图

应用层:Agent / RAG / 微调
框架层:PyTorch / vLLM / DeepSpeed / Megatron
⭐ 这套教程:
  • · 并行策略(数据/张量/流水线/专家)
  • · 显存管理(ZeRO / 检查点 / 量化)
  • · 计算优化(融合 / FlashAttention / 编译)
  • · 推理引擎(KV Cache / 连续批处理 / 调度)
  • · 通信(NCCL / AllReduce / 拓扑)
硬件层:GPU / HBM / NVLink / InfiniBand

四个核心矛盾,整套教程都在处理它们:

矛盾 表现 对应章节
算力 vs 带宽 算得快但喂不饱 03、04、08
显存容量 vs 模型大小 装不下 09、11、18
并行度 vs 通信开销 卡越多效率越低 10–14
吞吐 vs 延迟 快和多不可兼得 17、20

💰 三、一笔具体的账(这个领域为什么值钱)

关键信息

💡 这些数字是量级示意,不是精确基准(实际取决于序列长度、并发模式、SLO 要求)。 但"优化前后差一个数量级"这件事是真实且常见的。


🧠 四、这个领域的思维方式

⭐ 第一性原理:算一算它的理论下界

结果对照

拿到任何性能问题,先问三个问题:
① 这个操作【理论上】需要多少次浮点运算?
② 它【至少】要搬多少字节?
③ 按硬件的算力和带宽,理论最快是多久?
然后和实测对比
差距在哪,答案就在哪 ⭐

一个例子:

算一算

问题:"我的 attention 好慢"

算一下(序列长度 n=4096,头维度 d=128):

计算量 ≈ 2 × 2 × n² × d = 8.6 GFLOP

数据量 ≈ 中间矩阵 n² × 2 字节 = 33.5 MB(还要读写多次)

算术强度 = 8.6e9 / 33.5e6 ≈ 256 FLOP/字节 · 看起来够高?

⚠️ 但标准实现会【把 n² 的中间矩阵写回 HBM 再读出来】好几次

→ 实际数据量翻好几倍,算术强度暴跌

→ 变成【带宽瓶颈】

⭐ 这就是 FlashAttention 要解决的问题(第 8 章)

⚠️ 反面:三个常见的错误直觉

❌ 错误直觉 ✅ 实际情况
"换更强的卡就快了" 如果瓶颈是带宽或通信,算力翻倍可能一点用没有
"多加几张卡就能线性加速" 通信开销会吃掉收益,卡越多效率越低
"OOM 就调小 batch" 可能只是显存碎片或没开梯度检查点,调小 batch 会让 MFU 更差

🔗 和站内其他章的关系

相关的地方 这里的位置
ML 基础第 8 章 反向传播要缓存激活 这就是激活显存的来源 ⭐
ML 基础第 9 章 Adam 有 m、v 两个状态 优化器状态占 56GB 的原因
全景导论主线 2 · 模型怎样看懂一句话 attention 是 O(n²) 带宽瓶颈的主要来源
数学原理第 12 章 梯度检查点的理论依据

✅ 检查点

  1. 实际训练中 MFU 的典型范围是多少?多少算优秀?
  2. 过去 20 年算力和带宽的增长差了多少?这导致了什么后果?
  3. 训练 7B 模型要多少显存?哪一块最大?为什么?
  4. 为什么说长期看推理成本会超过训练成本?
  5. 这个领域的四个核心矛盾是什么?
  6. 拿到性能问题该先问哪三个问题?
  7. 三个常见的错误直觉分别错在哪?
👀 答案
  1. 朴素实现 10–20%,框架默认 30–40%,认真优化 45–55%,顶级团队 55–60% 就是天花板附近。知道这个基准才不会在 55% 时还盲目优化。
  2. 算力涨约 1000 倍,带宽只涨约 30 倍,差一个数量级以上。后果:计算越来越便宜,搬数据越来越贵 → 优化的主线不是"少算点"而是"少搬点"。
  3. ≥84GB + 激活。最大的是 Adam 优化器状态 56GB(7B × 8 字节,FP32 的 m 和 v 各 4 字节)。这就是 ZeRO 存在的理由——它不优化计算,只是把这块切开分给多卡。
  4. 因为训练是一次性投入,推理是每个请求都在烧钱且永不停止,还会随用户增长。
  5. ①算力 vs 带宽 ②显存容量 vs 模型大小 ③并行度 vs 通信开销 ④吞吐 vs 延迟。
  6. ①理论上需要多少次浮点运算 ②至少要搬多少字节 ③按硬件算力和带宽理论最快多久。然后和实测对比,差距在哪答案就在哪。
  7. ①"换更强的卡"——瓶颈是带宽或通信时算力翻倍没用 ②"多加卡线性加速"——通信开销会吃掉收益,卡越多效率越低 ③"OOM 就调小 batch"——可能是显存碎片或没开梯度检查点,调小 batch 反而让 MFU 更差。

🛑 可以停在这里

⚡ 走神救援

先记住这几件事

下一节 👉 02-GPU到底是什么.md

打卡记录保存在你的浏览器里,首页能看到总进度