不泛讲 Transformer。拆一个真的 —— DeepSeek V3,跟着一个 token 走完全程,每走一步就把账算一遍。
- 讲什么
- 从分词开始,经过 MLA、MoE、61 层堆叠,一直到出口。七步,每步问同样四个问题:权重多大、激活多大、多少算力、有没有什么东西在这里爆炸。
- 为什么先讲
- 所有的硬件需求,都是模型的形状决定的。先知道要什么,才谈得上机器怎么给。而且拆一个真实的、当下的模型,比泛讲十个抽象概念有用得多。
- 垫了什么
- 一个算出来的结论:它装不进任何一块卡。后面所有的课,都在回答这个结论提出的问题。
02TPU 与 GPUTwo Ways to Build the Same Machine正文已完成 · 两版
一个从游戏显卡长出来,一个一开始就是为矩阵乘造的。但真到了参数表上,两边几乎一样 —— 差别不在那儿。
- 讲什么
- 不罗列参数 —— 参数表恰恰是这一课第一个要拆穿的东西。算力、HBM 带宽、片上 SRAM 三项都在 10% 以内,两边的「算力 ÷ 带宽」甚至撞在同一个数上(312.9 对 312.5)。真正的差别是各缺对方整整一层:TPU 没有硬件自动管的片上缓存,GPU 没有可编程的专用协处理器。缺的不是容量,是「谁做决定」—— 一个交给运行时,一个交给编译期。这条差别再一路展开到访存、计算单元、互联和整个软件栈。
- 为什么排第二
- 第一课刚算出「装不下」。这一课开场先把上一课欠的那个数还清(一张卡到底能用多少 HBM、剩下的去哪了),再往下拆那张卡。
- 两版怎么选
- L200(约 80 分钟)36 张图、正文 21.3 千字 —— 讲课和第一遍读用这版。
L300(约两小时半)74 张图、正文 33.6 千字 —— 自读、回查、想再挖一层用这版。
两版节号完全对齐(§0–§9):L200 里哪一节想往下挖,直接翻 L300 的同一节号,
不用重新找位置。L200 不是 L300 删几段,是同一个故事重新蒸馏了一遍。
- 垫了什么
- 一把尺子和一个判据。尺子是算术强度 312 这条分水岭 —— 左边买算力没用,右边省搬运没用;判据是「这个优化改的是谁做决定,还是改搬多少」。后面每一次说「这个优化在 TPU 上不管用」或者「这里必须静态形状」,都指回这一课。
03注意力演进Three Knobs, Not Thirty Names✅ 主线九章全成稿 · 48 张图 · 讲义 125′|🖥 自带折叠开关(默认只留图,按 T 展开讲解)|📖 L300 完整版另存(58 张图)
MLA、GQA、SWA、DSA、线性注意力…… 名词多到像各搞各的。但它们在解同一道题,而且只有三个旋钮可以拧。
- 讲什么
- 先把两条动机分开 —— 硬件账(KV cache 会比权重还大,不解决上不了线)和信息账(那张注意力矩阵本来就极其稀疏,算了也是白算)。然后一张表把所有名词收进三个旋钮:每个 token 存多少 · 每个 query 看多少 · 换一套数学。
- 为什么排第三
- 第一课算出过一条曲线:4K 长度时注意力只占 12% 算力,128K 时是 82%,1M 时是 97%。模型一个字没变,只是输入变长,瓶颈就整个换了地方。第一课只负责把「为什么非改不可」算出来 —— 这一课回答「那大家是怎么改的」。紧接着讲,趁账还热。
- 垫了什么
- 后面每一课都要用:并行策略里的序列维怎么切、推理里 prefill 和 decode 为什么瓶颈相反、开源模型对比里那一列「注意力方案」怎么读 —— 都从这三个旋钮长出来。
- 现在分成两版
- 主线(2026-09-14 重写完成)—— 按时间线穿成一条故事:RNN 怎么记事 → 2017 年把链剪断换成一张表 → 上下文一长这张表付不起 → 砍头(MQA/GQA)→ 不存 K/V 只存压缩件(MLA)→ 别全读(滑窗 → DSA)→ 绕回固定状态 → 混合配比。多图、少字,每一章只回答「上一章欠下什么,这一章还什么」。
L300 完整版 —— 原来那一版整体保留为档案:全部推导、消融表、一手出处、我们自己在 v7 上的实测,共 58 张图。查东西看它。
- L300 里已经写完的
- 全部主线小节都已成稿(2026-09-13)。这一版的重点不是「有哪些方案」,而是每个方案是怎么被想出来的、凭什么可行 —— 例如 MLA 凭什么敢把 32,768 压到 576、DSA 怎么绕开「要判断谁重要就得先算注意力」这个鸡生蛋、滑窗砍掉四个 token 为什么会让困惑度从 5.40 炸到 5158。
2026-09-16 补:主线加了 DeepSeek-V4 一整块 —— NSA / DSA / CSA / HCA 四步是同一条路,以及 V4-Pro 那条 KV 到底长什么样(它不是 MLA,是 Shared K=V MQA;那 64 维 RoPE 长在 512 里面,不在外面)。
另有两条贯穿全讲的线:事后压 vs 从头按压缩训(出现四次),以及硬件反过来决定公式(从「点积胜出是因为能写成矩阵乘」一路到「按块选不按 token 选」)。
04反向与优化器Completing the Bill前置 01✅ 七节 + 附录 · 28 图 + 3 段动画 · 84′ · 讲义已配
第一课只算了前向。真实要付的比那多得多 —— 而最大的一块,既不是权重,也不是激活。
- 讲什么
- 反向要多少算力(答案:让总量变成三倍)。激活为什么不能算完就扔。以及那个出人意料的答案:显存里最大的一块是优化器状态,模型本身反而最小。
- 为什么在这
- 前向的账是干净的事实,适合开场;反向牵扯到策略选择,放在读者已经会算之后再讲。
- 垫了什么
- 一张完整的账单 —— 并行策略要切的就是它。而且看完这张账单,ZeRO 那套分级设计就不用背了。
- 怎么排的
- ⭐ 这一讲按「谁最大」讲,不按训练流程讲。流程的顺序是前向 → 反向 → 更新,可那个顺序会让最大的那一块最后才出场 —— 而它恰恰是决定一切的那一块。七节 + 附录:前向只是半张账单 · 反向要付什么 · 第一个真正的「决策」· 优化器 · 这张账单决定了并行策略长什么样 · 一个完整 step 的总账 · 训不崩(数值稳定性) · 附录「这一讲的数是怎么核的」。
⭐ 跟专题三不同,这一讲可以跳着讲(它是账单不是故事线)—— 只有一处顺序不能倒:「激活为什么扔不掉」必须在那笔重算交易之前立住。
- 四条判据
- 数字会过期,这四条不会:① 要不要高精度,看那一项「老的贡献走不走」(滑动平均有遗忘,所以 bf16 扛得住;主权重跨十万步累加,必须 fp32);② 该不该重算,看「每省一字节要付多少 FLOPs」 —— 线性层的这个数恰好等于输入宽度,而 attention 的随序列长度线性上升,两条必然相交;③ 凡是会改变数据分片形状的参数,都不能跨规模照抄 —— 这条在本讲出现了三次,序列长度、模型规模、以及同一个开关换规模收益变号;④ 评价任何稳定性手段,要同时看「稳没稳」和「质量掉没掉」 —— 只看前者的话,把学习率设成零是最优解。
05并行策略
用一种通信,换一份显存或一份算力。选策略,就是在选你愿意付哪一种通信。
- 讲什么
- 一张按「切哪一维」分类的地图:batch、隐藏维、序列、层、专家、跨数据中心。每一行填四格:通信原语、通信量、频率、代价。
- 为什么在这
- 前面几课算出了「装不下」,这一课回答「那怎么切」。
- 垫了什么
- 通信是后面所有性能问题的源头。而且有条规律会反复用到:频率决定一个维度能放在多慢的链路上。
06推理
训练把模型造出来,推理把它用起来 —— 而这两件事的约束几乎处处相反。
- 讲什么
- 推理内部是分裂的:吞下 prompt 那一段吃算力,一个字一个字往外吐那一段吃带宽。两个阶段的瓶颈相反 —— 推理系统全部的复杂性都从这儿来。以及围着 KV cache 展开的一整套工程。
- 为什么在这
- 大多数人先上推理再上训练。而且它是同一套账在另一个约束下重算一遍 —— 最能检验前面几课学扎实没有。
- 垫了什么
- 调优、量化、RL 都会回到这一课的两阶段模型。
07性能调优与工具链
模型跑起来了,MFU 只有 20%。剩下那 80%,去哪了?
- 讲什么
- 先定位,再动手 —— 顺序不能反。一套判据(屋顶线、算术强度)、一套工具(profile 怎么看)、一个固定的排查顺序,以及手段按代价从低到高排。
- 为什么最后
- 前六课教你算应该多快,这一课教你查为什么没那么快。没有前面那些账,profile 是看不懂的。
- 垫了什么
- 主线到此闭环 —— 你已经能独立判断一个方案好不好了。