LLM Training From Scratch Education Stack
LLM Training From Scratch Education Stack
一句话定义
LLM Training From Scratch Education Stack 是一套面向学习者、研究者和 agent 的“从零训练 LLM”教育栈:它不追求直接训练 frontier model,而是把 LLM 训练拆成一组可读、可跑、可验证、可自动实验的层级,让人和 agent 都能从数据、tokenizer、模型、训练循环、评估、推理、系统性能到研究闭环逐步建立直觉。
它的核心不是“花多少钱训练一个模型”,而是把黑箱式 pretraining 变成一条教育路径:先理解机制,再跑通端到端,再建立评估闭环,最后下钻到底层系统约束。
为什么需要这样一套栈
LLM 训练天然容易被两种极端误解:
- 只看高层 API:会用 PyTorch / Transformers / trainer,但不知道 loss、batch、optimizer、kernel、memory layout 和 evaluation 在系统里如何连接。
- 只看底层实现:能读 CUDA 或训练循环,但缺少 tokenizer、数据、SFT、evaluation、chat UI、实验管理这些端到端语境。
教育栈的价值,是把这两端串成可渐进学习的阶梯。karpathy-nanochat、karpathy/llm.c、AutoResearch 和 A Recipe for Training Neural Networks 可以被看成这条阶梯的几个核心支点:
- A Recipe for Training Neural Networks:训练神经网络的工程手艺和 debug 顺序。
- karpathy-nanochat:最小但完整的 ChatGPT-like 训练 pipeline。
- AutoResearch:把训练实验放入 hypothesis → code → metric → keep/revert 的研究闭环。
- karpathy/llm.c:把训练实现下钻到 C/CUDA,使性能和系统细节可见。
分层结构
| 层级 | 学习目标 | 代表材料 / 工具 | 关键产物 |
| 0. 训练心法 | 建立从数据、baseline、小批量过拟合到正则化调参的基本顺序 | A Recipe for Training Neural Networks | debug checklist、实验笔记 |
| 1. 最小机制 | 理解 tokenizer、embedding、attention、loss、optimizer 的最小实现 | tiny GPT / minGPT / 单文件 reference | 可手算/可读的训练循环 |
| 2. 端到端 harness | 跑通数据准备、pretraining、SFT、eval、inference、chat UI | karpathy-nanochat | 一个可运行的 ChatGPT-like 小系统 |
| 3. 实验闭环 | 让训练问题可比较、可回滚、可累计改进 | AutoResearch | 固定 budget、固定 metric、实验日志 |
| 4. 底层系统 | 理解 C/CUDA、kernel、内存布局、性能瓶颈 | karpathy/llm.c | PyTorch vs raw implementation 对照 |
| 5. Agent 研究环境 | 让 agent 在受控边界里提出和验证训练改动 | Agentic-Engineering + Harness-Engineering | program.md、不可编辑 evaluator、审计日志 |
推荐学习路径
1. 先学训练纪律,不急着堆规模
第一步不是“训练一个大模型”,而是学会神经网络训练的基本纪律:理解数据、建立 baseline、过拟合小 batch、逐步增加复杂度、可视化错误、再做正则化与调参。这对应 A Recipe for Training Neural Networks 的核心精神。
如果没有这一层,后面跑再复杂的 LLM pipeline,也很容易把数据问题、实现 bug、优化问题、评估问题混在一起。
2. 用 nanochat 建立端到端地图
karpathy-nanochat 的价值在于“完整但仍可审查”。它让学习者看到一个 ChatGPT-like 系统不是单个 model file,而是一条 pipeline:数据、tokenizer、pretraining、finetuning、evaluation、inference、chat UI 相互连接。
这一层的学习目标不是追求 SOTA,而是能回答:
- 数据如何进入训练循环?
- tokenizer 如何影响 token distribution 与训练效率?
- pretraining 和 SFT 的边界在哪里?
- evaluation 如何定义“进步”?
- inference / chat UI 如何把训练结果暴露给人?
3. 用 AutoResearch 学会研究闭环
AutoResearch 把教育栈从“我能跑一次”推进到“我能系统改进”。它的关键是把训练实验标准化:固定可修改范围、固定 wall-clock / compute budget、固定 metric,用 keep/revert 形成可累计的改进轨迹。
这对人类学习者也有价值:很多训练经验不是来自一次成功实验,而是来自一组失败实验的比较。对 agent 来说,这更是必要边界:没有固定 evaluator 和回滚机制,agent 的自动实验很容易变成不可审查的代码漂移。
4. 用 llm.c 下钻真实系统约束
karpathy/llm.c 把学习者从 PyTorch 抽象层带到 raw C/CUDA。它适合回答高层 harness 无法直接暴露的问题:
- tensor layout、kernel fusion、memory bandwidth 如何影响训练速度?
- PyTorch reference 与 raw implementation 的性能差距来自哪里?
- optimizer、forward/backward、checkpointing 在底层如何组织?
- 哪些“算法改进”会被系统瓶颈吞掉?
这一层不是每个应用开发者都必须深入,但它能防止对训练成本、性能和底层约束产生过度抽象的误解。
与 Harness / Agentic Engineering 的关系
这套教育栈本身也是一个 Harness-Engineering 问题:要让学习者或 agent 可靠学习 LLM 训练,不能只给一个巨大 repo,而要提供合适的挽具:
- 上下文:每一层解释它解决什么问题,不解决什么问题。
- 边界:哪些文件可改,哪些 eval / data / scripts 不可改。
- 反馈:loss、val_bpb、tokens/sec、训练成本、lint/test、人工 review。
- 回滚:无效实验不污染主线。
- 日志:每次实验留下 hypothesis、diff、metric、结论。
因此它也是 Agentic-Engineering 的训练场。成熟的 agentic research 不是让 agent 自由改整个训练系统,而是给它一个可验证的教育/实验 stack,让它在有限边界内提出假设并积累证据。
最小可行课程设计
一个实用的课程可以按 5 个模块组织:
- Neural Net Training Recipe:读数据、建 baseline、过拟合小 batch、debug loss。
- Tiny Transformer from Scratch:实现 tokenizer / attention / loss / optimizer 的最小版本。
- Nanochat End-to-End:跑通 pretraining → SFT → eval → chat。
- AutoResearch Loop:设计 3–5 个受控实验,让 agent 或人类改
train.py,按 metric keep/revert。 - llm.c Systems Dive:比较 PyTorch reference 与 C/CUDA 实现,理解性能和底层约束。
课程的毕业标准不应是“训练出多强的模型”,而应是学习者能独立画出训练系统地图、定位一次训练失败的原因、设计一个可验证实验,并解释高层代码和底层性能之间的 trade-off。
判断标准
一个“from scratch education stack”是否合格,可以用以下标准检查:
- 可读:核心路径能被单人读懂,而不是依赖隐藏框架魔法。
- 可跑:普通学习者能在有限预算内跑出可观察结果。
- 可分层:从最小机制到端到端系统再到底层实现,有清晰台阶。
- 可验证:每个改动都有 metric / eval / test,而不是主观感觉。
- 可回滚:实验失败不会污染主线。
- 可迁移:学到的是训练系统直觉,而不是某个 repo 的按钮记忆。
- 可被 agent 操作:任务边界、可修改文件、不可编辑 evaluator、日志格式都明确。
开放问题
- karpathy-nanochat 和 karpathy/llm.c 是否会进一步合流,形成一套更完整的官方教育路线?
- AutoResearch 中小模型 proxy 上发现的改进,哪些能可靠迁移到更大模型?
- 课程应如何设计 held-out eval,防止 agent 或学习者过拟合公开 metric?
- 对普通 AI 工程师而言,底层 C/CUDA 应学到什么深度才算够用?
- Hermes / LLM-Wiki 是否可以把这套 stack 扩展成“可持续更新的训练教育图谱”:每次 ingest 新项目或论文,都归档到某一层级?