CS336 · 第 19 课

Guest Lecture:Dan Fu

规模化 ML 系统、硬件感知算法与工业实践。Dan Fu 分享从 FlashAttention 到构建高效 ML 系统的经验,以及对课程的整体回顾。

嘉宾:Dan Fu (Stanford PhD, UCSD / Together AI) 预计用时:75 分钟 难度:中等

来源状态:Spring 2026 官方日程确认本讲嘉宾为 Dan Fu,但当前官方仓库未提供可核对的 handout 或 trace。

以下内容仅作为主题背景导读,不视为官方客座讲义的逐段重建。

本讲问题:课程最后用 FlashAttention 和 GPU kernel 工程回看一条共同主线:系统优化不是记住技巧,而是先找到数据移动瓶颈,再共同设计算法、实现和测量。

30 秒知识地图

workload 与 bottleneck → IO-aware algorithm → kernel mapping → benchmark / profiler → 规模化系统约束 → 把同一分析方法迁移到新硬件与新模型。

来源边界与本课问题

Spring 2026 官方日程只确认 Dan Fu guest lecture;无本地 handout 的细节均应视作基于公开研究的补充框架。本课不是收集“加速技巧”,而是练习闭环:定义 workload,列 FLOPs/bytes,定位 bottleneck,改变 dataflow,再验证端到端收益。

系统思维闭环

model workload + hardware hierarchy
            ↓ resource accounting
hypothesized bottleneck
            ↓ algorithm / layout / kernel change
microbenchmark + profiler
            ↓
end-to-end quality / latency / throughput / cost
            └──────── new bottleneck ────────┘

FlashAttention 为什么是 IO-aware

朴素 attention 物化 \(T×T\) score/probability matrices 到 HBM;FlashAttention 按 tiles 流式维护 softmax statistics,让 Q/K/V blocks 在片上复用,避免写回完整中间矩阵。输出仍是 exact attention(在浮点舍入允许范围内),所以收益来自减少 HBM IO,不是把 \(O(T^2)\) 数学 interactions 变成 \(O(T)\)。

反例:microbenchmark 2×,训练不一定 2×

若该 kernel 只占 step 的 20%,即使自身变成 2×,Amdahl 上总 step 也只从 \(1\) 降到 \(0.9\),约 1.11×;随后通信或输入管线可能成为新瓶颈。算法-硬件协同不是针对某张 GPU 背参数,而是让对象、数据路径与测量保持一致。


关于讲者

Dan Fu 是 UC San Diego 计算机科学与工程系助理教授,SandyResearch 实验室负责人,同时担任 Together AI 的 VP of Kernels。他在 Stanford 获得博士学位,师从 Percy Liang 和 Christopher Manning。

研究领域

代表性工作

项目贡献影响
FlashAttentionIO-aware exact attention成为 LLM 训练/推理标准
FlashFFTConv高效长序列卷积长上下文建模
ThunderKittensGPU kernel DSL简化 kernel 开发
Monarch Mixer硬件高效架构替代 Transformer 的探索

核心主题:算法和硬件不应分开设计。最好的 ML 系统是那些从硬件特性出发设计的算法,以及为算法优化的硬件。


FlashAttention:案例研究

问题

标准 Attention 的 O(n²) 内存是长序列的瓶颈:

标准 Attention:
1. 计算 S = Q @ K^T [n × n]
2. 计算 P = softmax(S) [n × n]
3. 计算 O = P @ V [n × d]

问题: 需要存储 n × n 的中间矩阵 S 和 P
n = 100K 时, n² = 10^10 个元素 → 几十 GB 内存

FlashAttention 的核心思想

不存储完整的 attention matrix,而是分块计算:

FlashAttention 的关键洞察:
1. softmax 可以分块计算 (online softmax)
2. 不需要存储完整的 n × n attention matrix
3. 只需要 O(n) 的额外内存

算法:
1. 将 Q, K, V 分成小块 (blocks)
2. 对每个 Q 块:
a. 加载 Q 块到 SRAM
b. 遍历所有 K, V 块:
- 加载 K, V 块到 SRAM
- 计算局部 attention
- 用 online softmax 合并结果
c. 写回最终输出

结果:
- 内存: O(n²) → O(n)
- 速度: 2-4× 加速(减少 HBM 访问)
- 精确: 与标准 attention 完全一致(无近似)

为什么 FlashAttention 有效?

关键在于利用 GPU 的内存层次结构:

内存层级大小带宽用途
HBM (High Bandwidth Memory)40-80 GB3 TB/s存储模型参数、activations
SRAM~200 KB/SM19 TB/s计算时的临时存储
Registers~256 KB/SM~100 TB/s当前计算的数据

标准 attention 的问题:n×n 矩阵存在 HBM 中,每次计算都需要从 HBM 读取。FlashAttention 让数据在 SRAM 中完成计算,大幅减少 HBM 访问。

关键洞察:FlashAttention 没有改变 attention 的数学定义,只是改变了计算顺序。这是"硬件感知算法"的典范——同样的数学,不同的实现,巨大的性能差异。


规模化 ML 系统思维

算法-硬件协同设计

Dan Fu 的研究强调算法和硬件不应分开考虑:

传统方式:
1. 设计算法(不考虑硬件)
2. 实现算法
3. 优化实现(如果时间允许)

硬件感知方式:
1. 理解硬件特性(内存层次、并行度、带宽)
2. 从硬件出发设计算法
3. 算法和实现同时优化

例: FlashAttention
- 从 GPU 内存层次出发
- 设计分块策略匹配 SRAM 大小
- 算法天然高效

Roofline 模型

理解 kernel 性能的基本工具:

Roofline 模型:
性能 = min(峰值算力, 带宽 × 算术强度)

算术强度 = FLOPs / bytes transferred

例: H100
- 峰值 FP16 算力: 989 TFLOPS
- HBM 带宽: 3.35 TB/s
- Ridge point: 989e12 / 3.35e12 = 295 FLOPs/byte

如果算术强度 < 295 → memory-bound
如果算术强度 > 295 → compute-bound

FlashAttention 的目标:
减少 bytes transferred(不改变 FLOPs)
让 kernel 更接近 compute-bound

分布式训练

大规模模型训练需要多 GPU 协作:

并行维度切分什么通信
Data Parallel数据梯度 AllReduce
Tensor Parallel权重矩阵activation AllReduce
Pipeline Parallel层activation 点对点
Sequence Parallel序列activation AllReduce
Expert ParallelMoE expertstoken routing

GPU Kernel 工程

为什么 Kernel 工程重要?

同样的算法,不同的 kernel 实现可以有数倍的性能差异:

例: 矩阵乘法
朴素实现: 10 GFLOPS
优化实现: 800+ GFLOPS (接近峰值)

优化技术:
1. Tiling: 分块匹配内存层次
2. Vectorization: 使用 SIMD 指令
3. Shared memory: 减少 global memory 访问
4. Register blocking: 最大化寄存器使用
5. Software pipelining: 隐藏延迟
6. Warp-level primitives: 利用 warp 内通信

ThunderKittens:Kernel DSL

Dan Fu 参与开发的 GPU kernel DSL:

ThunderKittens 风格 (伪代码):
用数据流图描述 kernel
编译器自动处理:
- 内存分配
- 数据搬运
- 同步

开发者关注: 计算逻辑
编译器关注: 性能优化


工业实践

从研究到生产

工业界的 ML 系统研究与学术界的区别:

维度学术工业
目标新算法/新发现可靠、可扩展、成本效益
规模单节点/小集群数千 GPU 集群
容错可以失败必须高可靠
迭代速度月/周天/小时
指标精度精度 + 吞吐量 + 成本

训练大规模模型的挑战

推理服务

训练之后,推理是持续的成本:


课程回顾

CS336 覆盖的主题

Basics

Tokenizer → Transformer → Training

Systems

Kernels → Parallelism → Inference

Scaling Laws

小规模实验 → 预测大规模配置

Data

来源 → 过滤 → 去重

以及:Alignment(SFT → RLHF → DPO → GRPO)

核心主题

The Bitter Lesson

The Bitter Lesson(苦涩教训):历史上,利用计算量的通用方法最终胜出。但这不意味着算法不重要——而是能随规模扩展的算法才是关键。效率在大规模时更加重要——你承受不起浪费。

公式:accuracy = efficiency × resources

未来方向


给学生的建议

1. 动手构建

不要只读论文。从第一行代码开始构建一个语言模型。理解每个组件的细节。

2. 关注效率

效率不是"锦上添花",而是核心。在大规模时,效率差异决定项目是否可行。

3. 理解硬件

现代 ML 离不开硬件。理解 GPU 内存层次、带宽、并行度,才能设计高效算法。

4. 数据 > 模型

在数据上的投入往往比在模型架构上的投入回报更高。花时间理解和改进数据。

5. 保持好奇

这个领域发展极快。保持学习、保持质疑、保持开放。


知识检查

问题 1:FlashAttention 的核心贡献是什么?

问题 2:Roofline 模型的含义是什么?

问题 3:硬件感知算法的核心思想是什么?

问题 4:CS336 的核心公式 accuracy = efficiency × resources 的含义是什么?


Concept Check · Amdahl 迁移题

某 kernel 占 step 20%,自身加速 2×,其余不变。端到端约加速多少?

答案:新时间 \(0.8+0.2/2=0.9\),speedup \(1/0.9≈1.11×\)。

若答 2×,你把局部 benchmark improvement 直接当成了整条 critical path。

你现在应该能够解释

完成课程后的迁移任务

面对一个新模型或新硬件,不先问“用了什么名词”,而按顺序问:对象是什么、shape 是什么、数据依赖是什么、算多少 FLOPs、搬多少 bytes、跨哪些 links、优化目标怎样被测量。能独立重建这条链,才真正完成 CS336。

如果只能记住 5 件事

FlashAttention

硬件感知算法的典范,IO-aware 精确 attention

系统思维

算法-硬件协同设计,Roofline 模型

工业实践

可靠性、可扩展性、成本效益

课程总结

理解源于构建,效率驱动一切


延伸阅读

Reference · 延伸阅读与一手资料