学习路线:按四个阶段、11 步动手实现,每步都回答“瓶颈在算力、带宽还是互连”¶
这条路线从自动微分开始,经过模型、推理、算子、编译器,最后落到加速器建模与 RTL。每一步都要读一份材料、写一个代码练习,并用一句话写出这一层的瓶颈。完成后应能从一个模型推导出它对 XPU 算力、带宽和容量的需求。
| 现状 | 做 SoC 架构,熟悉硬件,但对 LLM 的训练、推理以及框架、编译器、算子各层只有零散了解。 |
|---|---|
| 期望 | 能讲清一个模型从代码到芯片的每一层,并据此评估和设计 SoC 上的 XPU。 |
| 问题 | 按什么顺序学、每步做什么练习,才能用最短路径建立起这条贯通的认识? |
1. 路线总览:先会写,再看懂性能,然后深入算子,最后扩展到硬件¶
四个阶段按依赖关系排列:不会写模型就看不懂性能,看不懂性能就无从优化算子,算子和编译吃透之后才能反推硬件。
- 阶段一:写出模型。目标是能从零训练一个小 GPT,知道它由哪些运算组成。
- 阶段二:看懂性能。目标是会用 roofline 判断一个负载卡在算力还是带宽,并亲手体会 Prefill 和 Decode 的差异。
- 阶段三:深入算子与编译。目标是把 GEMM 和 Attention 做到接近峰值,理解编译器自动做了什么、做不到什么。
- 阶段四:扩展到硬件。目标是推导多卡训练的互连需求,并用模拟器把软件需求映射到阵列尺寸和 SRAM 大小。
2. 逐步清单:每步一份主材料、一个练习、一个要回答的问题¶
| 步 | 主题(所在层) | 主材料 | 代码练习(learn-llm-lab) | 学完要能回答 | 环境 |
|---|---|---|---|---|---|
| 1 | 自动微分(框架) | micrograd、nn-zero-to-hero 前 2 集 | labs/01-autograd:手写 Value 类,训练两层 MLP |
反向传播为什么让训练计算量约为推理的 3 倍? | Mac |
| 2 | Tokenizer(模型) | minbpe | labs/02-tokenizer:实现 BPE 训练和编解码 |
词表大小怎样影响 embedding 和输出层的开销? | Mac |
| 3 | 从零写 GPT(模型) | LLMs-from-scratch 第 2~5 章、CS336 作业 1 | labs/03-gpt:手写 Attention、RoPE、RMSNorm,附每层 FLOPs 与参数表 |
一个 token 的前向要做多少次乘加、读多少字节? | Mac |
| 4 | 训练全链路(训练) | nanochat(或中文的 minimind) | labs/04-train:小规模预训练 + SFT,记录 MFU、显存和吞吐 |
训练时显存都花在了哪里? | 云 GPU |
| 5 | Roofline(硬件) | How to Scale Your Model 前 4 章、Making Deep Learning Go Brrrr | labs/05-roofline:roofline 计算器,判断 Prefill 和 Decode 的瓶颈 |
给定 TOPS 和带宽,Decode 速度上限是多少? | Mac |
| 6 | 推理引擎(推理) | tiny-llm(MLX)、nano-vllm | labs/06-inference:KV Cache、continuous batching、W4 matvec,画 tokens/s 随 batch 的曲线 |
批处理和量化为什么能提速? | Mac |
| 7 | GEMM 优化(算子) | SGEMM_CUDA、how-to-optimize-gemm、GPU-Puzzles | labs/07-gemm:从朴素版优化到分块与寄存器复用,每步对照 roofline |
切块大小如何由片上存储决定? | 云 GPU / Mac CPU |
| 8 | FlashAttention 与低精度(算子) | flash-attention-minimal、Triton-Puzzles、LeetCUDA | labs/08-flash-attention:Triton 写 FlashAttention 前向,比较 DRAM 流量 |
融合为什么能把注意力从带宽受限变成算力受限? | 云 GPU |
| 9 | ML 编译器(编译器) | DLSys needle、tinygrad、mlir-tutorial | labs/09-compiler:加一条融合规则,写一个 MLIR toy 方言和 lowering pass |
编译器自动做了什么,哪些还得手写? | Mac |
| 10 | 分布式训练(训练) | Ultrascale Playbook、picotron | labs/10-distributed:实现 DP 和 TP 的 MLP,算每步通信量 |
训练要多大的片间互连带宽? | 云多卡 |
| 11 | 加速器建模与 RTL(硬件) | tiny-tpu、gemmini、SCALE-Sim / Timeloop | labs/11-accelerator:扫阵列尺寸和 SRAM 大小,得到利用率和带宽曲线 |
给定模型,MAC 阵列和 SRAM 该怎么配? | Mac |
“环境”一栏按本机 M4 Mac mini(32 GB 统一内存,无 NVIDIA GPU)规划:标“云 GPU”的步骤要租用带 CUDA 的机器,其余在本机即可完成。
3. 每章文档的固定结构:结论、问题界定、图、练习回顾¶
每一步学完后在 docs/ 下写一章,按下面的顺序组织:
- 标题写成结论,第一段回答上表“学完要能回答”一栏的问题。
- 用“现状—期望—问题”或“情境—冲突—问题”表格界定这一层要解决的问题。
- 用 4+1 视图中对这一层有用的视图配图说明原理。
- 回顾 learn-llm-lab 里对应练习的结果(数据、曲线),说明它怎样支撑结论。
- 最后一节写“对 SoC 的含义”:这一层的需求落到算力、带宽、容量中的哪一项。
完成一章后更新仓库根目录的 进度表。
主材料的完整清单见 GitHub 项目精选 和 X 帖子精选。