GitHub 项目 angelos-p/llm-from-scratch 做了一件很克制的事:不让学习者调用 AutoModel.from_pretrained(),而是自己写一遍 tokenizer、GPT 模型结构、训练循环和生成脚本。
它的标题叫 Train Your Own LLM from Scratch,但别把它理解成“在笔记本上训练一个 ChatGPT”。项目默认模型约 1000 万参数,作者称在 M3 Pro 上约 45 分钟能完成训练。训练目标也很窄:生成 Shakespeare-like text。
我更在意的是这个尺度。
它不是为了产出一个可用模型,而是把 Transformer 训练里最容易被框架盖住的几件事,压缩成一次 workshop 能看清、能改动、能跑完的实验。
它让你从零写一条最小训练流水线
这个项目的核心不是“下载模型”,而是“搭一遍机器”。学习者最后会写出 model.py、train.py 和 generate.py 这类文件。
路径大致是:字符级 tokenizer、Transformer、训练循环、文本生成、整合实验,再加一个 “AI poet” 小比赛。包装不重,重点放在训练链路本身。
| 模块 | 要自己写什么 | 能看懂什么 |
|---|---|---|
| Tokenizer | 字符级编码与解码 | 词表、字符映射、文本如何变成 token |
| 模型结构 | GPT Transformer | embedding、self-attention、LayerNorm、MLP |
| 训练循环 | 前向、loss、反传、优化器 | AdamW、梯度裁剪、学习率调度 |
| 生成脚本 | 自回归采样 | temperature、top-k、next token |
这里最有用的不是某个 API 名字,而是因果链条。
loss 为什么会降,attention 在代码里怎么组织,采样参数为什么会改变输出风格。这些东西只看框架封装,很容易变成“会调用,但不理解”。
对 Python 开发者来说,比较现实的动作是:不要把它当新模型试用,而是当一门短课。先跑 Tiny 配置确认环境,再改一两个参数,看输出和 loss 怎么变。这样比直接啃大项目更有效。
小模型和莎士比亚,是教学取舍
项目默认 Medium 配置约 10M 参数。Tiny 和 Small 分别约 0.5M、4M 参数。作者给出的 M3 Pro 训练时间大约是 5 分钟、20 分钟、45 分钟。
| 配置 | 参数量 | M3 Pro 训练时间 | 更适合做什么 |
|---|---|---|---|
| Tiny | 约 0.5M | 约 5 分钟 | 检查代码和环境是否跑通 |
| Small | 约 4M | 约 20 分钟 | 观察训练效果和参数变化 |
| Medium | 约 10M | 约 45 分钟 | 单次 workshop 默认实验 |
选择 Shakespeare 数据,也不是为了证明模型聪明。
这个语料风格强、规模小,字符级 tokenizer 就能演示完整流程。模型比较容易生成“像莎士比亚”的英文片段。看上去有韵味,但本质上是窄域文本模式学习。
这也是最该提醒的一点:字符级 tokenizer 不是现代大模型常用的完整分词方案,10M 参数也撑不起通用聊天能力。它能帮你理解训练过程,不能替你做企业知识库问答、客服机器人或生产级 LLM。
项目支持 Mac、Linux、Windows。本地可以自动使用 Apple Silicon MPS、CUDA 或 CPU,也可以放到 Google Colab 跑。这个设计降低了入门门槛,但不等于所有设备体验一样。CPU 能跑,不代表适合课堂节奏。
如果是技术讲师要拿它做课,动作应该更具体:提前准备 Colab 方案,保留 Tiny 配置作为兜底,并把安装、显存/内存、设备差异写进课前说明。课堂上最怕的不是模型差,而是半小时卡在环境里。
它和 nanoGPT 的差别,是少背工程包袱
项目明确提到受到 Andrej Karpathy 的 nanoGPT 启发。这个对比很关键。
nanoGPT 的价值,是用相对少的 PyTorch 代码展示 GPT 训练流程,并指向复现 GPT-2 124M 参数量级。llm-from-scratch 则把目标再往下压:更小模型,更短路径,更适合一次 workshop。
所以两者不是谁替代谁。
如果你已经能读训练代码,想进一步理解更完整的 GPT 训练工程,nanoGPT 更合适。可如果你还卡在“Transformer 到底怎么从文本训练出来”,llm-from-scratch 的小,反而是优点。
它把学习成本从“我要复现一个像样模型”改成“我能在一小时左右拆开黑箱”。这一步不炫,但很必要。庖丁解牛,先见骨节。
接下来真正该观察的也不是生成文本有多像诗人,而是三件小事:课程材料有没有补足错误排查;不同设备路径是否稳定;是否提供清楚的扩展实验,比如换数据集、调模型尺寸、比较采样策略。
这些变量决定它能不能从一个有趣 repo,变成讲师和学习者愿意反复使用的教学工具。
回到开头那个标题:Train Your Own LLM from Scratch。它最容易被误读,也最需要被放回原位。这里的 “LLM” 不是能力承诺,而是教学入口。把这个边界看清,项目才有价值。
