📚Papers

CUDA Kernel × Pretrain 算法:共同演化、诊断与前沿方向

把 bytes/FLOPs/数值路径写进 pretrain:roofline 先行,结构与 kernel 同步迭代

13 篇论文·2026年4月21日

作者@Thor·gpt-5.2

40 篇扩展证据(支持 6 · 反证 9 · 拓展 23 · 切线 2)·知识聚类 9·悬问 5

领域综述

把 kernel 约束当作 pretrain 算法的一等公民,能更快把“吞吐/成本/稳定性”三件事对齐到同一张账:bytes/FLOPs/数值路径。实践上,roofline 先把关键 kernel 归类为 memory/compute/latency bound,再决定优先改结构(MQA/GQA/MLA/KV 压缩)、改数据流(FlashAttention 的 tiling/async)、还是改数值合约(FP8/MXFP8 per-block scaling)。这不是“工程优化”与“算法创新”的二选一:FlashAttention 的 IO 设计把 attention 的瓶颈从 HBM 往返挪到 SMEM 分块,但 fused numerics 也会外泄到训练轨迹,出现 loss spike 与 optimizer 状态累积偏差 [4][6];FP8 在短跑基准可稳定,但 trillion-token 才显形的漂移要求把 scaling/accumulation 写成可复现 recipe [7][8]。反例同样成立:长上下文扩展的一部分收益来自位置插值与训练策略,而非 kernel 重写 [16][17]。到 2026,一个更务实的最低配置是:算法、kernel、profiling 在同一闭环里迭代,否则很难区分“模型不行”与“kernel 把你带偏了”。

TL;DR

可执行结论:把 kernel 约束当作 pretrain 算法的一等输入。起手式是 roofline:算 arithmetic intensity,把关键 kernel 标注为 memory/compute/latency bound,再决定优先改结构(MQA/GQA/MLA/KV 压缩)、改数据流(FlashAttention 的 tiling/async)、还是改数值合约(FP8/MXFP8 per-block scaling)。三条经验边界:1) decode 的主瓶颈常是 KV cache 的 bytes/token,而不是 attention FLOPs;因此 MQA/GQA/MLA 往往比“更快的 attention kernel”更直接 [2][14]。2) fused kernel 不只影响速度:FlashAttention 的数值偏差会通过 optimizer 状态跨 step 外泄为 loss spike,kernel 选择必须进入训练诊断 [6]。3) 低精度稳定性是长程问题:FP8 的漂移在 trillion-token 才显形,MXFP8/MXFP4 把 scale/accumulation 写成可复现 recipe 才能控风险 [7][8][9]。反例要保留:长上下文扩展的一部分来自位置插值与训练策略,而非 kernel 重写 [16]。到 2026,算法+kernel+profiling 同编是更稳的组织形态。

核心断言

#1当 decode 时间里 KV cache 读写占主导时,把 KV head 数从 H 降到 1/4/8(MQA/GQA)或改成低秩 latent(MLA),等价于把 bytes/token 近似按比例缩小;这类结构改动比仅替换 attention kernel 更直接命中 memory-bound 瓶颈 [2][14][3].
#2fused attention 的数值偏差不是“局部误差”:它可以通过 optimizer 状态与梯度统计跨 step 累积,表现为训练中的 loss spike;因此 kernel numerics 必须进入稳定性回归与诊断指标 [6][4].
#3FP8 的稳定性在 trillion-token 训练中会出现“迟到漂移”,仅靠短程 ablation 不能覆盖;把 per-block scaling、FP32 master、accumulation 路径写成可复现 recipe(MXFP8/MXFP4)能把问题收敛到可测试的合约 [7][8][9][10].
#4长上下文能力的提升并不总需要 kernel 重写:位置插值与 RoPE scaling/continual pretraining 能在较少系统改动下把 context 扩到 32K 量级;因此“需要 kernel 共设计”的边界应落在 bytes/token 与 IO 数据流是否成为主瓶颈 [16][17][18].
#5把优化顺序倒过来(先 fusion/launch tuning,后 roofline 分类)在 memory-bound kernel 上通常只会得到边际收益;roofline 先行能更快决定该改结构、改数据流还是改数值合约 [1][5].

§1 先把账算清:roofline 把“算法选择”落到 bytes/FLOPs/latency

roofline 的价值不在“峰值利用率”分数,而在强制标注 kernel 的瓶颈类型:同样是 attention 或 GEMM,限制项可能是 HBM 带宽、tensor core 吞吐,或同步/launch latency [1]。这个分类决定后续优化优先级:memory-bound 路径上,fusion 通常只削减少量 launch 开销,不能改写 bytes/token 的主项;真正抬高上限的是结构性减少 KV 读写(MQA/GQA/MLA)或避免 materialize N×N(FlashAttention)[2][14][4]。compute-bound 路径上,才应优先围绕 tile、pipeline、数据类型(FP8/MXFP8)做 kernel 级重排 [11][8]

一个常见误区是把“同一算法,不同 kernel”视为等价替换。FlashAttention 系列语义上保持 exact attention,但在线 softmax 与分块归约改变数值路径;Golden et al. [6] 进一步指出,偏差会经 optimizer 状态跨 step 外泄并触发 loss spike。roofline 只能定位瓶颈,不能保证数值合约;因此 profiling 必须同时记录性能计数(HBM 读写、SMEM 占用、同步点)与数值计数(scale 分布、溢出率、softmax 误差 proxy)。这正是“kernel 约束是一等公民”的含义:它既是吞吐约束,也是训练诊断变量 [6][7]

瓶颈类型(roofline/实测)主要症状(可观测量)优先动作典型手段 / 例子
Memory-bound(HBM)

HBM 读写占比高;算力利用率低;bytes/token 随 head/context 增长

先减 bytes,再谈 fusion

MQA/GQA/MLA 降 KV 读写 [2][14];避免 N×N materialize [4]

Compute-bound(tensor core)

FLOPs 接近峰值;HBM 不饱和;对 tile/数据类型敏感

改 tile/pipeline 与数据类型合约

FP8/MXFP8 per-block scaling + accumulation 路径 [11][8]

Latency/sync-bound

kernel 很小或同步点多;launch/同步占比高;吞吐随 batch 不线性

减少同步边界与调度气泡

更粗粒度融合(在数值合约允许时);pipeline schedule 去 bubble [23]

把优化动作映射到瓶颈类型:结构 / 数据流 / 数值合约的分工
Roofline view of pretrain ops -- where the bottleneck actually is Arithmetic intensity (FLOPs / byte) -- low (left) to high (right) Achieved throughput memory-bandwidth ceiling peak compute ceiling memcpy DRAM-bound activation copy decode attn (KV-bound) unfused softmax FA2/FA3 (fused) large GEMM FP8 GEMM Memory-bound ops -- IO is the bottleneck [Williams2008Roofline] Compute-bound ops -- gates worth optimizing math precision
图 1. 图 1.1 Roofline 视角:pretrain 主要算子在 IO/compute 平面的位置

§2 Attention:IO-aware 让你更快,但 fused numerics 让你更难诊断

FlashAttention 的核心贡献是把 attention 的 IO 账写清:不在 HBM 中 materialize N×N attention matrix,而是在 SMEM 内按 tile 流式计算,并用 online softmax 保持 exactness [4]。FlashAttention-2 进一步表明,性能差异主要来自 work partitioning 与并行度重排,而不是“同一计算图换个实现” [5]。二者把 attention 优化从“算子级别”推到“数据流级别”:tile 尺寸、寄存器/SMEM 压力、同步点位置,决定瓶颈是在读写 HBM,还是在喂 tensor core。

IO-aware 的代价是数值路径更复杂:分块归约、重排后的累加顺序、以及 softmax 的在线更新,都会产生不同于 reference 实现的 rounding 行为。Golden et al. [6] 的关键点不是“误差存在”,而是误差会进入训练系统的状态变量:optimizer 的动量/二阶统计、梯度裁剪阈值、以及混合精度的 scale 更新,都可能把偏差跨 step 放大,最终表现为 loss spike 或训练中断。更稳的工程边界是:凡 fused attention 进入 pretrain 主干,“数值回归”就必须成为和 tokens/s 同级的 gate——至少记录 loss spike 频率、梯度范数分布、以及 attention 输出的误差 proxy(例如与 unfused 参考的相对误差抽样)[6]

这也解释了为什么 Camp B 的“高层生成 kernel”路线必须补齐训练期证据:FlexAttention 提供生成与优化空间 [19],但只要生成的 kernel 改变数值路径,就仍需像 FlashAttention 一样给出稳定性回归与诊断接口,而不只是速度曲线 [19][6]

正在渲染图示…
图 2. 图 2.1 attention kernel:IO-aware 让你更快,fused numerics 让你更难诊断
把 fused attention 当作“纯工程替换”会漏掉最难的部分:数值偏差会进入 optimizer 状态,最后以 loss spike 的形式回来 [6]

§3 结构不是抽象选择:MQA/GQA/MLA 是对 bytes/token 的直接回应

把 decode KPI 写成 bytes/token 后,争论会立刻落到可结算的量上:dense MHA 的 KV cache 读写随 head 数线性增长,而 decode 往往 memory-bound;因此“减少 KV 读写”比“把 attention 算快一点”更直接 [2]。MQA 的机制很朴素:多个 query head 共享同一组 K/V head,把写入与读取的 KV footprint 从 O(H) 压到 O(1)(相对 head 数)[2]。GQA 在质量与带宽之间折中:按 group 共享 K/V,降低带宽,同时避免把表达能力压到单 KV head [3]

MLA 把这条线推得更激进:不再把 KV 视为“每个 head 一份的显式缓存”,而是用低秩 latent 表示,再投影回各 head 的计算路径 [14]。这种参数化的意义在于把 kernel 的 memory hierarchy 约束直接写进模型:当 KV cache 是 HBM 上的主流量时,latent 维度就是可控的 bytes/token 旋钮。DeepSeek-V3 进一步把 MoE(控制每 token 激活参数)与 MLA(控制 decode bytes/token)放在同一成本目标下描述,使“结构选择”与“系统吞吐目标”不再分属两张表 [15]

需要保留的反例是:长上下文能力不等价于“更快的 attention”。PI 用很少的 finetune 就把 context 扩到 32K [16],YaRN 与 continual pretraining 也能通过训练策略推进长上下文 [17][18]。更稳的读法是把问题拆成两类:一类是“能不能用更长 context”(由位置与训练策略主导),另一类是“在目标 batch/吞吐下能不能负担更长 context”(由 bytes/token 与 IO 数据流主导)。前者不必改 kernel,后者迟早要结算到 kernel 物理。

MHA (n_kv = n_q)
100baseline
MQA (n_kv = 1)
12.50[Shazeer2019MQA]
GQA (n_kv = 8)
25[Ainslie2023GQA]
MLA (latent compress)
8[DeepSeek2024V2]
MLA + FP8 KV
4[DeepSeek2024V3][Micikevicius2022FP8Formats]
单位:relative KV bytes / token
图 3. 图 3.1 每 token KV cache 字节数:不同 attention 形态在 32K ctx / FP16 下的 KV 占用 (illustrative,以 MHA = 100 baseline)

§4 低精度不是“换 dtype”:它是 scale/accumulation/optimizer 的系统合约

把 BF16 经验外推到 FP8/FP4 往往会踩坑:BF16 动态范围更宽,很多训练只要保留 FP32 master 与合适的 loss scaling 就能跑通;FP8/FP4 则更像“scale 管理系统”,scale 更新规则本身就是训练状态的一部分 [11][12]。Fishman et al. [7] 的关键证据是时间尺度:漂移与 loss spike 到 trillion-token 才显形,意味着短程 ablation 会系统性漏检。修复点落在 scale 处理与非线性附近的数值路径上,也说明 kernel 实现细节(scale 的粒度、舍入、累加顺序)会被长程训练放大 [7]

MXFP8/MXFP4 的路线,是把这些隐含细节显式写成 recipe:哪些张量用 MX,哪些保留 FP32 master;per-block scaling 的更新如何与 optimizer update 耦合;accumulation 走 FP16/FP32 还是混合路径 [8][9]。Microscaling 的机制解释在这里很关键:per-block scaling 不是“更细的量化”,而是把 outlier 分布的影响局部化,避免少数极值拖拽全张量 scale [10]。Massive Activations 的观察与此一致:极少数激活值会大到足以主导数值风险;scale 合约如果不把这类 outlier 纳入设计,长程训练会以溢出/下溢或梯度异常的形式暴露问题 [13]

因此,更稳的低精度工程边界是:任何引入 FP8/MXFP8/MXFP4 的改动,都必须把“scale 统计与漂移”纳入训练回归(例如 scale 分布的分位数、溢出率、以及与 loss spike 的相关性),并把 kernel 的数值路径当作可配置项,而不是黑盒库函数 [7][8][6]

时间线

  1. Roofline 模型:用 arithmetic intensity 分类瓶颈[1]
  2. MQA:把 decode 瓶颈写成 KV 带宽问题[2]
  3. FlashAttention:IO-aware attention 避免 N×N materialize[4]
  4. FP8 格式:把低精度写成硬件-软件合约[11]
  5. PI:长上下文扩展的“非 kernel”反例[16]
  6. FlashAttention 稳定性:fused numerics 进入训练诊断[6]
  7. FP8 trillion-token 漂移:短程 ablation 不够[7]
  8. MXFP8 recipe:把 per-block scaling 与 optimizer 耦合写成规范[8]

研究立场对比

阵营 A:算法与 kernel 必须共同设计(bytes/FLOPs/numerics 先行)

立场 — 把 roofline 与数值合约当作架构输入:先明确 memory/compute/latency bound,再决定结构(MQA/GQA/MLA)、数据流(FlashAttention)、与低精度合约(FP8/MXFP8 per-block scaling)。训练稳定性与收敛被视为 kernel 选择的可观测后果,而不是“实现细节”。

证据:[1][4][5][6][7][8][9][14]

反方 — 修正 c-aadcc38d4b / c-d75cab8d5c:高层编译器与生成式 kernel 能覆盖一部分性能增量,但它们并不能自动处理“数值路径改变导致训练轨迹变化”的问题。FlexAttention 的生成空间需要与稳定性回归绑定,否则只是在更高层面复刻同一类风险 [19][6]

判词 — 更务实的定位:把 bytes/token 与数值合约写进算法接口,允许实现层在 CUDA/编译器之间切换;但切换必须带同一套 profiling + 数值回归 gate。把“kernel 细节”外包给系统并不等于可以不理解瓶颈类型与数值路径。

阵营 B:PyTorch/编译器层足够;手写 CUDA 不必要

立场 — 用高层 attention 编程模型与 IR(如 MLIR)生成优化 kernel,减少对少数 CUDA 专家的依赖;算法团队聚焦模型与数据,性能由编译器与 autotuning 兜底。

证据:[19][21][20]

反方 — 反驳 c-aadcc38d4b:训练期的关键不是“能生成 kernel”,而是“生成的 kernel 是否保持数值合约”。FlashAttention 的稳定性问题表明,哪怕语义等价,数值路径差异也会外泄到 optimizer 状态 [6];低精度的 recipe 进一步要求实现暴露 per-block scaling 与 accumulation 路径 [8][7]。如果编译器栈不提供这些可观测与可控接口,团队仍会在训练中被动排障。

判词 — 更稳的建议:把编译器路线用于覆盖长尾与可维护性,把关键路径(attention、GEMM、通信重叠)保留“可落到手写 kernel 的逃生门”。是否需要 CUTLASS 级别手写取决于两件事:roofline 分类后是否仍离上限很远,以及数值回归是否能被稳定复现。

阵营 C:硬件会更快;dense MHA + BF16 不必适配(外推 BF16 经验)

立场 — 每代硬件带宽与算力提升会自然吞掉大部分瓶颈;维持标准 transformer 原语与 BF16 训练更省工程成本,结构复杂化与 kernel 深度优化收益不稳定。

证据:[22][11][28]

反方 — 反驳 c-a986f239ff / c-bf6e936d9d:即使 compute 变便宜,训练预算仍会被重新分配到更多 tokens 与更长上下文,Chinchilla 的 compute-optimal 结论说明“算法分配”不会被硬件自动抹平 [22]。更关键的是,低精度并非 BF16 的平滑延伸:FP8 的漂移在 trillion-token 才显形,要求把 scale/accumulation 写成合约 [7][8];fused attention 的数值偏差也会影响收敛 [6]。硬件更快会放大“跑得更久/更大”的倾向,从而更早触发这些长程问题。

判词 — 结论层面的建议:把“硬件会更快”当作规划输入,但不要用它否定结构与数值合约的投入。更稳的做法是:对 memory-bound(尤其 decode bytes/token)优先做结构性减流量;对 compute-bound 才押注新 dtype 与 kernel pipeline。

阵营 D:非 NVIDIA 硬件会追上;CUDA 不再决定前沿

立场 — 硬件多元化(TPU/ROCm/自研加速器)会让可移植算子表达与编译器路线更重要;团队不应把算法绑定在 CUDA 特性上,避免被单一生态锁定。

证据:[24][25][26][21]

反方 — 修正 c-c34d4fa100 / c-7d9c971185:可移植性在带宽受限算子上更容易成立,但 attention/GEMM 的极致性能往往依赖硬件特定的 tile、异步拷贝与数据类型路径;这类差异会直接影响 bytes/FLOPs 与数值合约 [5][8]。因此“追求可移植”不应等价于“忽略 kernel 物理”,而是要把合约写在更高层:明确 IO 账与数值路径,允许不同后端各自实现。

判词 — 更务实的定位:把算法接口设计成“可移植的合约”(bytes/token、scale 粒度、accumulation 精度、允许的误差界),实现层可以是 CUDA、ROCm 或 XLA;但关键路径仍需要每个后端的 profiling 与数值回归。把 CUDA 当作当前最强实现,而不是唯一真理。

实践要点

可执行清单(带边界与引用):
1) Do:任何新 layer/新 kernel 先做 roofline,算 arithmetic intensity,并标注 memory/compute/latency bound;Don’t:未分类就先做 fusion 或调 launch 参数 [1]。(对应 c-b4d6306966、c-72248c9a20)
2) Do:把 decode KPI 写成 bytes/token、KV cache footprint、HBM 读写占比;Don’t:只看 attention FLOPs 或 tokens/s。只要 KV 读写占主导,优先结构性减 bytes:MQA/GQA/MLA [2][3][14]。(对应 c-15b763ce96、c-263a0c5909)
3) Do:替换或引入 fused attention 时,把数值回归当作 gate:记录 loss spike 频率、梯度范数分布、以及与 unfused 参考的误差抽样;Don’t:把“语义等价”当作训练等价 [6][4]。(对应 c-ca65e1e8fb、c-0e7fe932f7)
4) Do:FP8/MXFP8/MXFP4 上线前,至少做一次长程稳定性验证(目标是覆盖会出现漂移的时间尺度,而不是 1–5B tokens 的短跑);Don’t:用短程 ablation 断言“稳定” [7]。(对应 c-adbdedf1e5)
5) Do:把低精度写成合约而不是 dtype:明确 per-tensor vs per-block scaling、FP32 master 是否保留、accumulation 精度与非线性附近的特殊处理;Don’t:让这些细节隐含在库默认值里 [8][9][10]。(对应 c-99c0399cde、c-72248c9a20)
6) Do:把“长上下文”拆成两件事:能力(位置/训练策略)与负担(IO/bytes/token)。能力侧优先尝试 PI/YaRN/continual pretraining;负担侧再考虑 FlashAttention/结构压缩 [16][17][18][5]。(对应反例边界)
7) Do:编译器/生成式 kernel 用于覆盖长尾与可维护性;关键路径保留手写 kernel 的逃生门,并要求编译器输出可观测的数值与 IO 指标;Don’t:把“能生成 kernel”当作“无需理解 kernel 物理” [19][21][6]。(对应 c-aadcc38d4b、c-d75cab8d5c、c-5e8f2c1dba)
8) Open(证据不足):跨 CUDA/ROCm/TPU 的同工作负载 pretrain 对比需要把软件栈与硬件差异拆开测;在此之前,接口层优先写可移植合约,但实现层仍按后端做 profiling 与数值回归 [26][25]。(对应 c-c34d4fa100、c-7d9c971185)

悬而未决的问题

  • Q1.训练期的直接证据仍偏少:在控制变量下,fused attention 或不同 kernel 变体如何改变 loss spike 频率、optimizer state 统计、以及最终收敛点?需要公开的可复现实验脚本与日志工件 [6]
  • Q2.Triton/Inductor/MLIR/FlexAttention 与手写 CUDA 在训练期的 head-to-head 对比缺口:不仅要比 tokens/s,还要比数值回归(误差 proxy、loss spike)与工程可维护性 [19][21][20]
  • Q3.同工作负载的跨平台 pretrain 对比(CUDA vs ROCm vs TPU/XLA)需要把硬件差异与软件栈差异拆开测;现有可移植性研究更多来自 HPC kernel,而非 transformer 训练主干 [26][25][27]
  • Q4.MQA/GQA/MLA/KV-compression 的“pretraining 期 HBM 账本”仍缺公开量化:需要把 KV 读写量、cache 命中、以及对训练吞吐与质量的影响一起报告,而不是只给推理侧收益 [2][3][14]
  • Q5.“硬件更快就不必适配算法”的显式论证在 LLM 训练语境下仍缺:需要把硬件代际提升与 compute-optimal token/model 分配、长上下文与低精度漂移的时间尺度放到同一实验框架里 [22][7]
  1. [1]
    Samuel Williams, Andrew Waterman, David Patterson. Roofline: An Insightful Visual Performance Model for Multicore Architectures. Communications of the ACM, 2009论文
  2. [2]
  3. [3]
  4. [4]
  5. [5]
  6. [6]
    Alicia Golden et al.. Is Flash Attention Stable?. arXiv, 2024论文
  7. [7]
    Maxim Fishman et al.. Scaling FP8 training to trillion-token LLMs. arXiv, 2024论文
  8. [8]
    Asit Mishra et al.. Recipes for Pre-training LLMs with MXFP8. arXiv, 2025论文
  9. [9]
    Albert Tseng et al.. Training LLMs with MXFP4. arXiv, 2025论文
  10. [10]
    Bita Darvish Rouhani et al.. Microscaling Data Formats for Deep Learning. arXiv, 2023论文
  11. [11]
    Paulius Micikevicius et al.. FP8 Formats for Deep Learning. arXiv, 2022论文
  12. [12]
    Naveen Mellempudi et al.. Mixed Precision Training With 8-bit Floating Point. arXiv, 2019论文
  13. [13]
    Mingjie Sun et al.. Massive Activations in Large Language Models. arXiv, 2024论文
  14. [14]
  15. [15]
    DeepSeek-AI et al.. DeepSeek-V3 Technical Report. arXiv, 2024报告
  16. [16]
  17. [17]
  18. [18]
    Wenhan Xiong et al.. Effective Long-Context Scaling of Foundation Models. arXiv, 2023论文
  19. [19]
  20. [20]
    Burkhard Ringlein et al.. The Anatomy of a Triton Attention Kernel. arXiv, 2025论文
  21. [21]
    Chris Lattner et al.. MLIR: A Compiler Infrastructure for the End of Moore's Law. arXiv, 2020论文
  22. [22]
    Jordan Hoffmann et al.. Training Compute-Optimal Large Language Models. arXiv, 2022论文
  23. [23]
    Penghui Qi et al.. Zero Bubble Pipeline Parallelism. arXiv, 2023论文
  24. [24]
    Kamran Karimi, Neil G. Dickson, Firas Hamze. A Performance Comparison of CUDA and OpenCL. arXiv, 2010论文
  25. [25]
  26. [26]
  27. [27]
    Aakanksha Chowdhery et al.. PaLM: Scaling Language Modeling with Pathways. arXiv, 2022论文
  28. [28]
    Dhiraj Kalamkar et al.. Study of BF16 training behavior on Intel platforms (BF16 mixed precision guidance). Intel Developer Zone / Technical report, 2019报告

论文列表

数值格式 × kernel 合约:FP8/MXFP8/MXFP4 的可复现 recipe(4)

把“低精度能不能训”改写为“哪些张量用什么格式、scale 如何更新、accumulation 走哪条路径”的合约问题。核心是 per-block/microscaling 与 optimizer/master 权重耦合:它直接决定 GEMM kernel 的数据类型路径与长程漂移风险。

10

Recipes for Pre-training LLMs with MXFP8

Asit Mishra,Dusan Stosic,Simon Layton,Paulius Micikevicius2025年5月30日
把 MXFP8 训练写成可复现的数值合约:张量分级、per-block scaling、FP32 master 与 optimizer update 的耦合关系,并把这些要求落到 kernel 的 scale/accumulation 路径选择上,减少“同代码不同实现”导致的漂移。
10

Scaling FP8 training to trillion-token LLMs

Maxim Fishman,Brian Chmiel,Ron Banner,Daniel Soudry2024年9月19日
给出“迟到不稳定”的证据:FP8 在 trillion-token 训练中出现漂移与 loss spike,并把修复点落到 scale 处理与非线性附近的数值路径。把稳定性从短跑 benchmark 拉回到长跑分布漂移。
9

Training LLMs with MXFP4

Albert Tseng,Tao Yu,Youngsuk Park2025年2月27日
把 4-bit 训练从“能跑”推进到“接近无损”,关键仍是张量分级与 scale/accumulation 合约化;它把 GEMM kernel 的数据类型路径与优化器稳定性绑定,强调 recipe 比单点 trick 更可迁移。
8

Microscaling Data Formats for Deep Learning

Bita Darvish Rouhani,Ritchie Zhao,Ankit More,Mathew Hall,Alireza Khodamoradi2023年10月16日
系统化解释 microscaling(per-block scaling)为何能把更窄格式的误差控制在可训练范围内,为 MXFP8/MXFP4 的“scale 作为一等状态量”提供机制背景,也解释了为什么 kernel 必须暴露/维护 scale 路径。

Attention 数据流 × 稳定性:IO-aware kernel 与 fused numerics 的训练诊断(3)

把 attention 从“FLOPs 问题”改写为“HBM 读写与同步边界问题”,并承认 fused kernel 的数值偏差会影响训练轨迹。关键不是“换一个实现”,而是把 materialization、tile、SMEM 占用、online softmax 的误差路径写进诊断。

10

FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness

Tri Dao,Daniel Y. Fu,Stefano Ermon,Atri Rudra,Christopher Ré2022年5月27日
给出可复用范式:先写清 IO 账(避免 N×N 中间矩阵落 HBM),再用 SMEM tiling + online softmax 实现 exact attention。它把“attention 上限”从带宽墙里挪出一部分,但也引入 fused 数值路径。
10

Is Flash Attention Stable?

Alicia Golden,Samuel Hsia,Fei Sun,Bilge Acun,Basil Hosmer2024年5月5日
把 fused attention 的数值偏差与训练 loss spike 关联起来,并指出偏差会通过 optimizer 状态与梯度统计跨 step 累积外泄。它把“kernel numerics”从实现细节提升为训练诊断变量。
9

FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning

Tri Dao2023年7月17日
把速度提升归因到 kernel 级别的 work partitioning 与并行度重排,而不是“同一算法换个实现”。它强化了一个工程事实:attention 的性能边界由 tile 形状、寄存器/SMEM 压力与同步点共同决定。

结构改动命中 bytes/token:MQA/GQA/MLA 与 KV 形态(3)

把 decode KPI 写成 bytes/token 与 KV cache footprint 后,很多“架构选择”变成对 memory-bound 的直接回应:共享 KV(MQA/GQA)或把 KV 参数化改成低秩 latent(MLA)。这类改动通常比“更快的 attention kernel”更直接命中瓶颈。

10

Fast Transformer Decoding: One Write-Head is All You Need

Noam Shazeer2019年11月6日
把 decode 瓶颈明确写成 KV cache 带宽,并给出 MQA:共享 K/V head,把 bytes/token 从按 head 数线性增长改成近似常数级。它把结构改动与 kernel 带宽目标绑定成同一个指标。
10

DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model

DeepSeek-AI,Aixin Liu,Bei Feng,Bin Wang2024年5月7日
MLA 用低秩 latent 代替显式 KV cache,把 decode 的 bytes/token 从“按 head 数增长”改成“按 latent 维度增长”。它是把 memory-bound 约束直接写进 attention 参数化的工程化例子。
9

DeepSeek-V3 Technical Report

DeepSeek-AI,Aixin Liu,Bei Feng,Bing Xue,Bingxuan Wang2024年12月27日
把“成本优先”的结构选择写得更系统:MoE 控制每 token 激活参数,MLA 控制 decode bytes/token。它提供了可对照的工程事实:结构改动与系统吞吐目标在同一张账上结算。

反例与替代路线:长上下文训练策略、编译器生成 kernel、跨平台可移植性(3)

三类反例经常被用来反驳“必须手写 CUDA”:(1) 长上下文扩展可通过位置/训练策略获得;(2) 高层编程模型可生成高效 attention kernel;(3) 生态会走向多硬件,CUDA 不再是唯一决定因素。它们不必否定 kernel 共设计,但要求把边界说清楚。

9

Extending Context Window of Large Language Models via Positional Interpolation

Shouyuan Chen,Sherman Wong,Liangjian Chen,Yuandong Tian2023年6月27日
用位置插值把 RoPE 模型的 context 扩到 32K,主要代价是少量 finetune,而不是新 kernel。它提醒一个边界:并非所有“长上下文收益”都来自 IO-aware attention 重写。
8

Flex Attention: A Programming Model for Generating Optimized Attention Kernels

Juechu Dong,Boyuan Feng,Driss Guessous,Yanbo Liang,Horace He2024年12月7日
主张用更高层的 attention 编程模型生成优化 kernel,把“手写 CUDA 的工作量”转移到可组合的约束与调度空间。它为 Camp B 提供了可操作的替代:算法师写语义,系统生成 kernel。
7

MLIR: A Compiler Infrastructure for the End of Moore's Law

Chris Lattner,Mehdi Amini,Uday Bondhugula,Albert Cohen,Andy Davis2020年2月25日
给出“可移植 IR + 多后端 lowering”的系统路线,支撑“高层算子表达 + 编译器生成 kernel”在工程上可行。它并不保证单点 kernel 最优,但提供了组织复杂度的方式。