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

01 · AI Infra 在解决什么问题

22 分钟 | ⭐ 先看清战场


🎯 一句话

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


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

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

   A100 标称算力:312 TFLOPS(BF16)

   而实际训练中的 MFU(模型算力利用率):
   ├─ 未经优化的朴素实现     10 ~ 20%   💀
   ├─ 用了主流框架的默认配置  30 ~ 40%
   ├─ 认真优化过的           45 ~ 55%
   └─ 顶级团队的大模型训练    55 ~ 60%  ⭐ 这已经是天花板附近

   ⚠️ 也就是说:【一半以上的钱是浪费的】,而且这还是优化之后

🔑 第一个反直觉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 带宽 算得快但喂不饱 030408
显存容量 vs 模型大小 装不下 091118
并行度 vs 通信开销 卡越多效率越低 1014
吞吐 vs 延迟 快和多不可兼得 1720

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

   假设你要服务一个 70B 模型,日均 1000 万次请求

   朴素部署(HuggingFace transformers + 循环生成):
   ├─ 吞吐低、显存浪费严重
   └─ 需要约 100 张 A100          ≈ 每月 200 万元

   优化后(vLLM + INT8 量化 + 连续批处理 + 张量并行):
   ├─ KV Cache 显存利用率从 ~30% 提到 >90%(第 17 章)
   ├─ 权重显存减半(第 18 章)
   └─ 需要约 15 张 A100           ≈ 每月 30 万元

   ⭐ 差距接近 7 倍 —— 这就是这个领域的价值

💡 这些数字是量级示意,不是精确基准(实际取决于序列长度、并发模式、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 更差。

🛑 可以停在这里

走神救援

模型的数学是完美的,硬件是有限的,AI Infra 就是这条鸿沟里的全部工程四个事实:①⭐你的 GPU 在摸鱼——MFU 朴素实现 10-20%、框架默认 30-40%、认真优化 45-55%、顶级团队 55-60% 就是天花板(知道基准才不会盲目优化)②⭐⭐算力涨 1000 倍但带宽只涨 30 倍计算越来越便宜、搬数据越来越贵 → ⭐优化的主线不是"少算点"而是"少搬点"(FlashAttention/算子融合/量化/KV Cache 全是这句的推论)③⭐显存是最硬的墙:训练 7B 要 14(参数)+14(梯度)+56(Adam 状态,最大的一块)+激活 ≥ 84GB一张 80GB A100 装不下 7B 的训练 → 这就是 ZeRO 存在的理由(它不优化计算,只把这 56GB 切开)④推理的账和训练完全不同——训练一次性、推理每个请求都烧钱且永不停,长期远超训练,而且瓶颈完全相反四个核心矛盾:算力vs带宽、显存vs模型大小、并行度vs通信、吞吐vs延迟。⭐思维方式=算理论下界:①理论多少 FLOP ②至少搬多少字节 ③理论最快多久 → 和实测对比,差距在哪答案就在哪。⚠️三个错误直觉:换更强的卡(瓶颈是带宽时算力翻倍没用)、多加卡线性加速(通信吃掉收益,卡越多效率越低)、OOM就调小batch(可能只是碎片或没开梯度检查点,调小反而让 MFU 更差)。

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

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