很多人学深度学习前半段是“舒服”的。卷积、循环网络、注意力机制每章讲一个模块跟着代码敲一遍跑个小案例能出一个结果就觉得自己懂了。等课程进入后半段尤其是类似“从零构建 LLM”的章节——不少课程会把这类实战章节安排在第十五、十六章——节奏突然就变了。前面学的每个知识点单独看都还记得可一旦要求把所有模块拼成一条完整的训练和推理流水线问题就成片冒出来张量维度对不上、损失变成 NaN、显存动不动爆掉、训练了好几个小时生成出来的还是一堆乱码。这个场景我见过太多次。它恰好说明了从零构建 LLM 的真正价值它训练的不是一个大模型而是一个人的工程判断力。当你亲手把分词、嵌入、注意力、前馈网络、层归一化、交叉熵损失、AdamW、采样生成串起来之后再去看那些几百 B 参数的大模型至少在认知上不再是黑盒。你会知道每个模块在做什么训练时哪些因素决定成败为什么业界要在 fp32、fp16、bf16、tf32 这些精度格式之间反复权衡。这个阶段更应该追求的不是模型效果而是流程闭环。一个只有几百万参数、在几十万字语料上训练出来的小模型只要能生成一小段可读的文本就已经算成功了。真正要验证的是另外三件事你能不能解释每一步、能不能定位出错的地方、能不能让整个流程稳定复现。把这三件事做到你就已经具备了自己动手研究模型的基础而不是只会改 prompt 调 API。1. 先想清楚从零构建 LLM 到底在解决什么问题1.1 它解决的是“理解断层”不是“写代码”问题一个最小的 LLM 实现核心代码可能只有几百行。难的不是代码量而是隐藏在代码后面的数据流和数学关系。你会遇到的第一个问题是一段原始文本怎么变成模型能吃的张量文本要先按词表切成 token id然后查 embedding 表变成形状为(batch, seq_len, d_model)的张量再加上位置编码才能进入 Transformer 块。这个过程中任何一步的形状写错报错信息都不会直接告诉你“这里逻辑错了”只会抛出一个维度不匹配的异常。第二个问题是注意力机制为什么除以sqrt(d_k)不看实现你可能背得住“防止点积过大导致 softmax 梯度消失”这个结论亲手写一遍之后你会真正理解这个缩放因子和向量维度之间的关系。第三个问题是训练和推理的输入输出其实有一个错位。训练时模型看到tokens[0:n]预测tokens[1:n1]推理时模型每生成一个 token就要把它拼回历史上下文再继续。这个错位关系只有在实现里才会真正落到实处。这些知识靠调用 Hugging Face 的AutoModelForCausalLM是学不到的。框架把一切封装好了你只是在消费别人设计好的接口。从零构建 LLM就是把这一层封装撕开逼自己把所有接缝处摸一遍。1.2 它替代的是“黑盒调用”不是“大规模预训练”这里要先把边界划清楚。从零构建 LLM 属于学习型项目目标不是训练出一个可用的生产模型。真正训练一个大模型不仅是模型架构问题还涉及分布式训练、数据并行、流水线并行、通信优化等一系列工程问题这不是一个学习章节能覆盖的。所以这个路径适合下面几类人学过深度学习基础想找一个里程碑式的综合项目来检验自己。想从内部理解 Transformer而不是停留在“会用”层面。打算以后读论文、复现论文或者做模型结构相关工作的开发者。不适合的场景也很清晰你只想快速获得一个文本生成服务那应该直接调用大模型 API或者用开源模型做微调。你对模型内部没有兴趣只关心业务接入那从零构建是浪费时间。你的目标是参与千亿级模型训练那需要补的是分布式系统和算子优化的能力而不是从零写 Transformer。把这个边界写清楚是为了避免一个常见误解不要觉得“我会从零写 LLM”就等于“我能训练大模型”。两者之间还隔着巨大的工程鸿沟。但从零写 LLM 能让你站在鸿沟这边看清楚对面大概是什么样子。2. 把一条完整流水线拆开数据、分词、模型、训练、推理2.1 数据准备与分词先决定你喂给模型的是什么构建 LLM 的第一步往往不是模型而是数据。