专题八 · 精度与量化

这份讲义怎么用

这是老师的草稿,不是给学员的材料。学员看 课件,你看这一份。
课程作者 Chris Yang · Google Cloud AI Infra 架构师。

🎯这一讲要留下什么 讲完之后学员脑子里应该剩的那一句话。
🗣讲稿 接近逐字,可以照着念。黄底的是必须说出口的原话。
🖥屏幕 这一段该滚到课件的哪里。
⚠️别讲什么 这一讲最容易跑偏的方向。
🚧 这份讲义跟课件一样,只写完了中间三节 §3 缩放、§4 后半 FP4 训练、§5 硬件视角 —— 这三节有逐字稿。
§0 §1 §2 §6 只有「打算怎么讲」没有逐字稿。 ⛔ 讲义里编一段,现场你会照着念 —— 所以宁可空着。

这一讲要留下的一句话

整讲只留这一句: 「四个 bit 只负责形状,量级由外面那层 scale 给 ——  所以量化的全部难点,都在那个 scale 怎么定。」

后面每一节都是它的一个侧面scale 要多密(§3)、训练和推理为什么要定得不一样(§4)、 硬件替你做了哪一半(§5)、定错了为什么不报错(§6)。

🚧 讲稿 · 0 开场

停在首屏。

打算这么开:所有人都在往下压精度 ——  但「压精度」不是一个开关,是一整套决策。
然后直接抛出那个可验证的分界线: 同一个 FP4,推理侧权重按 1×16 分块,训练侧按 16×16。 先不解释为什么 —— 那是 §4 的悬念。

别在开场解释 16×16它的理由(链式法则)需要先建立「一个线性层三个矩阵乘」那个图景, 开场没有那个铺垫,说了等于白说。

🚧 讲稿 · 1 为什么低精度能行 · 2 格式

课件 §1 §2。

只有提纲,没有逐字稿。要立的两件事:

两个收益性质不同 —— 算力受益的是训练和 prefill, 访存受益的是 decode。这条不讲透,后面分不清训练和推理。

范围比精度重要 —— BF16 牺牲尾数保指数,所以它赢了 FP16。

②那条一定要留个钩子「记住这个取舍,等下讲 FP4 的 scale 时它会原样再来一次。」 MXFP4 选纯指数的 E8M0、NVFP4 选有尾数的 E4M3 ——  同一个取舍换个位置又演一遍。这是这一讲最好的一处呼应,别浪费。

讲稿 · 3 缩放这件事

课件 §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 与链式法则

课件 §4。前半(混合精度、FP8 scaling、QAG)还没写, 先按提纲带过;后半这一段有逐字稿。 先建图景,别急着讲 16×16「一个线性层其实是三个矩阵乘:前向 y = w·x, 反向之一 ∂x = wᵀ·∂y,反向之二 ∂w = ∂y·xᵀ。 注意第二个 —— 同一个权重,被转置着又用了一次。」
实测:不给这个图景,后面整段听不懂。

然后问:缩放必须沿点积那一维 —— 可反向把点积维换了,怎么办?

同一个权重,前向沿行切块量化,反向沿列切块量化, 得到两份不一样的量化结果

这句是这一节的核心,慢,且要说完整「这不是精度差一点,这是链式法则被打破 ——  反向传播算的梯度,对应的已经不是前向那个函数了。你在给另一个函数求导。」

于是有了 16×16一个正方形的块,转置之后还是同一个块, 前向反向拿到同一份量化权重。

这一句必须说,否则学员会记反「16×16 是 256 个数共用一个 scale,比 1×16 粗十六倍。 它更粗,却更好 —— 这里赢的不是精度,是一致性。」
⛔ 千万别讲成「二维更细所以更准」。

硬件什么都没多干Tensor Core 只认沿点积维的一维 scale, 所以软件算出那个 16×16 的 scale 之后,复制十六份喂进去。 硬件不知道有二维这回事。 所以二维不省存储 —— 买的是「转置前后是同一份」。

⚠️ 有人会拿论文里的 4 来问,提前拆开: 「论文里那个 d = 4 是随机 Hadamard 变换的矩阵尺寸, 不是块大小。结论是 16 比 4 收敛好、跟 128 差不多。」

讲稿 · 5 硬件视角

课件 §5。这一节接专题二,可以快,但三个点要清楚。 开门见山,别绕: 「『硬件支持 FP4』加的是三样,没有协处理器: 乘法阵列认四 bit、MMA 通路里内嵌一级乘 scale、通用核多了几条转换指令。」

然后甩那个反例,它比任何解释都有力: 桌面那颗 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 沉默的失败

课件 §6。只有提纲。但这是全讲风险最高的一节,不能砍。

三类,一类比一类隐蔽① 跑起来了、loss 也在降,只是降得慢或后期崩; ② 开关没生效也不报错(QAG 那五道锁); ③ 链式法则被打破 —— 连「开关没生效」都算不上, 一切正常,只是你在给另一个函数求导。

收口那句: 「在数值这件事上,『没报错』什么都不能说明。」

别讲什么

这一讲最容易跑偏的四个方向 ① 别把 §3 讲成格式罗列。 那一节的主线是「scale 要多密」, 格式差异只是它的一个切面。
② 别在 §4 讲成「二维更准」。 ⛔ 它更粗,赢在一致性 ——  这是全讲最容易记反的一句。
③ 别把出处台账念出来。 那是给课后回查用的, 台上只在被追问时报一个来源名。
④ 别越界讲 TPU 那一侧。 ⚠️ 目前写完的内容全是 Blackwell; TPU 的低精度是另一套(QAG 在专题二那条线上),这一讲还没并排写 ——  被问到就直说「这一讲这一版只讲了 NVIDIA 侧」。