大模型入门-2
这是一个非常好的问题,而且你发现了两个“路线图”之间看起来不一致的地方。
其实它们并不冲突,它们描述的是两个不同维度。
第一个(10 个阶段)是知识体系(What to learn,学什么)
第二个(学习顺序)是学习依赖关系(How to learn,先学什么)
很多大学课程也是这样,比如:
《操作系统》会分:进程、线程、内存、文件系统、IO……
但真正学习时会先学 C 语言、数据结构、组成原理。
所以我们可以把它们合并成一张更大的地图。
先看第一张图(知识地图)
这是我最开始给你的。
第一阶段
计算机如何学习(机器学习本质)
↓
第二阶段
神经网络为什么能够学习
↓
第三阶段
深度学习训练过程
↓
第四阶段
Transformer
↓
第五阶段
LLM
↓
第六阶段
各种训练方法
↓
第七阶段
分布式训练
↓
第八阶段
训练优化
↓
第九阶段
推理优化
↓
第十阶段
真正的大模型工程
这其实是在回答:
如果我要成为LLM专家,需要掌握哪些知识?
这是知识地图(Knowledge Map)。
例如:
LLM工程师
┌────────────┼─────────────┐
算法 系统 工程
Transformer CUDA Docker
RLHF NCCL Kubernetes
MoE RDMA Slurm
FlashAttn GPU Linux
所以第一张图是在说:
你最终脑子里应该有哪些知识。
它没有告诉你:
应该先学哪个。
第二张图(学习路线)
后来我又写了:
数学
↓
机器学习
↓
PyTorch
↓
Transformer
↓
LLM
↓
分布式训练
↓
GPU
↓
优化
↓
源码
这张图回答的是:
应该按照什么顺序学习?
因为知识之间有依赖关系。
例如:
如果不会微积分。
你几乎不可能理解:
梯度
↓
反向传播
↓
Adam优化器
如果不会矩阵。
你根本不知道:
Attention为什么那么快。
所以学习必须:
简单
↓
复杂
↓
工程
我把两张图合并一下
这是我真正推荐的学习路线。
数学基础
│
├──线性代数
├──概率统计
└──微积分
│
▼
机器学习
│
├──监督学习
├──Loss
├──梯度下降
└──过拟合
│
▼
神经网络
│
├──Neuron
├──MLP
├──Backpropagation
└──Optimizer
│
▼
PyTorch
│
├──Tensor
├──Autograd
├──Dataset
└──Training Loop
│
▼
Transformer
│
├──Embedding
├──Attention
├──Position
├──FFN
├──Residual
└──LayerNorm
│
▼
LLM训练
│
├──Tokenizer
├──Pretraining
├──SFT
├──RLHF
├──DPO
└──Inference
│
▼
分布式训练
│
├──DDP
├──FSDP
├──ZeRO
├──Megatron
└──DeepSpeed
│
▼
GPU通信
│
├──CUDA
├──PCIe
├──NVLink
├──NCCL
├──RDMA
└──InfiniBand
│
▼
训练优化
│
├──FlashAttention
├──MoE
├──Activation Checkpoint
├──Mixed Precision
└──Quantization
│
▼
推理优化
│
├──KV Cache
├──PagedAttention
├──Continuous Batch
└──vLLM
│
▼
真正的大模型工程
│
├──Kubernetes
├──Docker
├──Slurm
├──日志
├──监控
├──调度
└──源码阅读
你会发现:
前十阶段其实全部包含进来了。
那为什么前面又多了数学?
这是很多人最大的误区。
很多人觉得:
我要学LLM
↓
直接学Transformer
实际上真正应该是:
Transformer
↓
Attention
↓
矩阵乘法
↓
线性代数
例如:
Attention公式
Attention(Q,K,V)
↓
QKᵀ
↓
矩阵乘法
如果不知道矩阵是什么。
看到
QKᵀ
基本就是天书。
所以数学不是额外内容。
数学就是:
Transformer的语言。
为什么PyTorch放在Transformer前?
很多课程:
Transformer
↓
PyTorch
我认为这是反的。
举个例子。
如果你已经会PyTorch。
Transformer其实只是:
class Transformer(nn.Module):
里面放几个:
Linear
LayerNorm
Softmax
如果不会PyTorch。
Transformer源码就是:
?????
所以:
PyTorch
↓
Transformer
学习效率会高很多。
为什么GPU放到后面?
很多做AI Infra的人。
一开始就去学:
CUDA
NCCL
RDMA
最后发现:
不知道为什么AllReduce。
因为不知道训练过程。
例如:
为什么需要AllReduce?
因为:
GPU1
算梯度
GPU2
算梯度
GPU3
算梯度
GPU4
算梯度
最后:
所有梯度
↓
求平均
↓
更新参数
于是:
需要通信。
如果不知道梯度。
NCCL就是:
GPU互相发数据。
不知道:
为什么发。
所以:
GPU通信必须放在:
训练之后。
为什么源码阅读放最后?
很多人:
第一天
↓
打开Megatron源码
结果:
300000行代码
直接放弃。
正确的方法应该是:
自己写过
MLP
↓
CNN
↓
Transformer
↓
DDP
以后:
再打开:
Megatron。
你会发现:
哦
这里只是在做Tensor Parallel。
否则:
看到:
parallel_state.py
已经不知道是什么。
再结合你的背景,我建议的路线会稍微调整
根据我们之前几次交流,我知道你已经在接触:
NCCL 通信错误
InfiniBand / RDMA
Docker / 容器
Kubernetes 调度
CUDA 环境
vLLM 推理
GPU 集群
这说明你的工程基础其实已经走到了普通初学者后半段,只是算法基础还没有系统建立。
所以我反而建议你采用一条"双螺旋学习路线",而不是只走算法或只走工程。
算法主线
──────────────────────────────
数学
↓
机器学习
↓
神经网络
↓
Transformer
↓
LLM训练
↓
RLHF/DPO
↓
MoE
工程主线
──────────────────────────────
Linux
↓
GPU
↓
CUDA
↓
NCCL
↓
InfiniBand
↓
Megatron
↓
DeepSpeed
↓
vLLM
这两条线不要完全分开,而是互相印证。例如:
学到反向传播时,就可以理解为什么训练要同步梯度,从而明白 NCCL AllReduce 的意义。
学到 Transformer 后,再看 FlashAttention,就知道它优化的是哪一步,而不仅仅是"一个更快的 CUDA Kernel"。
学到 LLM 训练 后,再研究 Megatron-LM,就能把源码和算法一一对应起来。
我建议我们采用一套真正"从零到专家"的课程
如果你愿意,我可以按照大学课程的深度,带你系统学习,一共大约 40~50 节。
每一节都遵循同一种结构:
生活中的例子(建立直觉)
数学原理(理解为什么)
代码实现(PyTorch 手写)
工程实现(GPU 如何执行)
源码对应(PyTorch / Megatron / vLLM)
企业实践(OpenAI、Meta、DeepSeek 等是怎么做的)
最终不仅知道是什么,还能理解为什么这样设计、源码在哪里实现以及如何在真实的大模型训练系统中工作。这条路线会比单独看论文或单独看工程文档更容易建立完整的知识体系。