这份讲义怎么用
这是老师的草稿,不是给学员的材料。学员看
课件,你看这一份。
课程作者 Chris Yang · Google Cloud AI Infra 架构师。
| 🎯 | 这一讲要留下什么 讲完之后学员脑子里应该剩的那一句话。 |
| 🗣 | 讲稿 接近逐字,可以照着念。黄底的是必须说出口的原话。 |
| 🖥 | 屏幕 这一段该滚到课件的哪里。 |
| ⚠️ | 别讲什么 这一讲最容易跑偏的方向。 |
§0 §1 §2 §6 只有「打算怎么讲」,没有逐字稿。 ⛔ 讲义里编一段,现场你会照着念 —— 所以宁可空着。
这一讲要留下的一句话
后面每一节都是它的一个侧面: scale 要多密(§3)、训练和推理为什么要定得不一样(§4)、 硬件替你做了哪一半(§5)、定错了为什么不报错(§6)。
🚧 讲稿 · 0 开场
打算这么开:所有人都在往下压精度 ——
但「压精度」不是一个开关,是一整套决策。
然后直接抛出那个可验证的分界线:
同一个 FP4,推理侧权重按 1×16 分块,训练侧按 16×16。
先不解释为什么 —— 那是 §4 的悬念。
🚧 讲稿 · 1 为什么低精度能行 · 2 格式
只有提纲,没有逐字稿。要立的两件事:
① 两个收益性质不同 —— 算力受益的是训练和 prefill, 访存受益的是 decode。这条不讲透,后面分不清训练和推理。
② 范围比精度重要 —— BF16 牺牲尾数保指数,所以它赢了 FP16。
⭐ ②那条一定要留个钩子: 「记住这个取舍,等下讲 FP4 的 scale 时它会原样再来一次。」 MXFP4 选纯指数的 E8M0、NVFP4 选有尾数的 E4M3 —— 同一个取舍换个位置又演一遍。这是这一讲最好的一处呼应,别浪费。讲稿 · 3 缩放这件事
先把问题问出来:E2M1 一共四个 bit,能表示的绝对值只有八个 —— 这怎么可能算得准?
停一拍,答案要慢说: 「答案不在那四个 bit 上,在外面套的那层 scale。 四个 bit 只负责形状,量级由 scale 给。」然后立刻给尺度感,别停在抽象:拿 7,168 × 18,432 一层权重走一遍 —— per-tensor 是一亿三千万个数共用一个, NVFP4 是每 16 个一个,那 7,168 切成 448 段。 两端差八百多万倍。
⚠️ 这里必然有人混,主动拆开: 「一个 tensor 是整块矩阵,不是它的某一条边 —— 按 7,168 那一档叫 per-channel,不叫 per-tensor。」命名碰撞也要主动说,不然学员在四份资料里看到四个名字会以为是四件事: micro-tensor scaling / microscaling(MX) / block scaling / 块量化, 再加上 sub-channel、group-wise —— 全是同一件事。
⛔ 中文这里特别容易踩,这句要说: 「『块』不蕴含二维。NVIDIA 自己给 block quantization 的定义 就是沿一个轴分块。」两个格式的差别只在 scale 上: MXFP4 每 32 个一个 E8M0(纯指数,只能是 2 的幂); NVFP4 每 16 个一个 E4M3(有尾数),外面再套一个整张量的 FP32。
⭐ 两级为什么存在,这句是关键,慢慢说: 「不是因为两级更高级 —— 是因为 E4M3 最大只到 448, 盖不住整张量的量级跨度,所以要先用一个 FP32 把张量搬进它的量程。 外层管范围,内层管局部量级。」接着反过来说:MXFP4 的 E8M0 范围大得离谱,所以它不需要外层。
最后一步:那 16 个数怎么排。 直接读指令的分片形状 —— A 片 16×64,SFA 片 16×4, 64 ÷ 16 = 4。一行切四段,完全不跨行。
⭐ 这一节的落点,必须说出口: 「它不需要『相邻的数值相近』这个假设 —— 只需要这 16 个数的量级别差太远。这是统计性质,不是语义性质。」⛔ 按「相邻相近」去理解,会推出一堆错的优化直觉。
讲稿 · 4 训练侧 —— 16×16 与链式法则
实测:不给这个图景,后面整段听不懂。
然后问:缩放必须沿点积那一维 —— 可反向把点积维换了,怎么办?
同一个权重,前向沿行切块量化,反向沿列切块量化, 得到两份不一样的量化结果。
⭐ 这句是这一节的核心,慢,且要说完整: 「这不是精度差一点,这是链式法则被打破 —— 反向传播算的梯度,对应的已经不是前向那个函数了。你在给另一个函数求导。」于是有了 16×16:一个正方形的块,转置之后还是同一个块, 前向反向拿到同一份量化权重。
⛔ 这一句必须说,否则学员会记反: 「16×16 是 256 个数共用一个 scale,比 1×16 粗十六倍。 它更粗,却更好 —— 这里赢的不是精度,是一致性。」⛔ 千万别讲成「二维更细所以更准」。
硬件什么都没多干:Tensor Core 只认沿点积维的一维 scale, 所以软件算出那个 16×16 的 scale 之后,复制十六份喂进去。 硬件不知道有二维这回事。 所以二维不省存储 —— 买的是「转置前后是同一份」。
⚠️ 有人会拿论文里的 4 来问,提前拆开: 「论文里那个 d = 4 是随机 Hadamard 变换的矩阵尺寸, 不是块大小。结论是 16 比 4 收敛好、跟 128 差不多。」讲稿 · 5 硬件视角
然后甩那个反例,它比任何解释都有力: 桌面那颗 GB10 有 FP4 的 Tensor Core 指令,却缺那条转换指令 —— 能拿 FP4 算矩阵乘,却没法把数转成 FP4。 同一颗芯片上一个有一个没有 —— 所以它们是两块独立的硬件。
⚠️ 有人追出处就说清楚:这条出自 NVIDIA 开发者论坛的实测报告, 不是官方规格书。只用它支撑定性判断,不支撑任何数字。一句话总结分工:硬件负责「用」scale,软件负责「算」scale。
⛔ 这两句别说错:「scale 不是放进 Tensor Core 里,是放进 TMEM —— TMEM 是 SM 上的一块内存,每 SM 256 KiB。」
「乘 scale 不额外消耗算力,但这不等于不花钱。」
三笔代价,都不在 FLOPs 头上: ① 占 TMEM —— 一个 128×256 的 FP32 累加器就吃掉一半, 真正卡住 tile 能开多大的往往是这一笔; ② 多一路搬运,而且必须摆成交错布局; ③ 量化那一头是真花时间的 —— 只比 MMA 就会把它漏掉。
⚠️ 顺带澄清一个名字:「Transformer Engine」不是物理部件, 芯片版图上找不到它。被问到再说,不必主动展开。🚧 讲稿 · 6 沉默的失败
三类,一类比一类隐蔽: ① 跑起来了、loss 也在降,只是降得慢或后期崩; ② 开关没生效也不报错(QAG 那五道锁); ③ 链式法则被打破 —— 连「开关没生效」都算不上, 一切正常,只是你在给另一个函数求导。
收口那句: 「在数值这件事上,『没报错』什么都不能说明。」别讲什么
② 别在 §4 讲成「二维更准」。 ⛔ 它更粗,赢在一致性 —— 这是全讲最容易记反的一句。
③ 别把出处台账念出来。 那是给课后回查用的, 台上只在被追问时报一个来源名。
④ 别越界讲 TPU 那一侧。 ⚠️ 目前写完的内容全是 Blackwell; TPU 的低精度是另一套(QAG 在专题二那条线上),这一讲还没并排写 —— 被问到就直说「这一讲这一版只讲了 NVIDIA 侧」。