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.pytrain.pygenerate.py 这类文件。

路径大致是:字符级 tokenizer、Transformer、训练循环、文本生成、整合实验,再加一个 “AI poet” 小比赛。包装不重,重点放在训练链路本身。

模块要自己写什么能看懂什么
Tokenizer字符级编码与解码词表、字符映射、文本如何变成 token
模型结构GPT Transformerembedding、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” 不是能力承诺,而是教学入口。把这个边界看清,项目才有价值。