跳转至

学习路线:按四个阶段、11 步动手实现,每步都回答“瓶颈在算力、带宽还是互连”

这条路线从自动微分开始,经过模型、推理、算子、编译器,最后落到加速器建模与 RTL。每一步都要读一份材料、写一个代码练习,并用一句话写出这一层的瓶颈。完成后应能从一个模型推导出它对 XPU 算力、带宽和容量的需求。

现状 做 SoC 架构,熟悉硬件,但对 LLM 的训练、推理以及框架、编译器、算子各层只有零散了解。
期望 能讲清一个模型从代码到芯片的每一层,并据此评估和设计 SoC 上的 XPU。
问题 按什么顺序学、每步做什么练习,才能用最短路径建立起这条贯通的认识?

1. 路线总览:先会写,再看懂性能,然后深入算子,最后扩展到硬件

四个阶段按依赖关系排列:不会写模型就看不懂性能,看不懂性能就无从优化算子,算子和编译吃透之后才能反推硬件。

场景视图:四个阶段、11 步学习路线

  • 阶段一:写出模型。目标是能从零训练一个小 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/ 下写一章,按下面的顺序组织:

  1. 标题写成结论,第一段回答上表“学完要能回答”一栏的问题。
  2. 用“现状—期望—问题”或“情境—冲突—问题”表格界定这一层要解决的问题。
  3. 用 4+1 视图中对这一层有用的视图配图说明原理。
  4. 回顾 learn-llm-lab 里对应练习的结果(数据、曲线),说明它怎样支撑结论。
  5. 最后一节写“对 SoC 的含义”:这一层的需求落到算力、带宽、容量中的哪一项。

完成一章后更新仓库根目录的 进度表。

主材料的完整清单见 GitHub 项目精选 和 X 帖子精选。