在笔记本上5分钟能训练出的最强AI模型?


作者问了一个看似傻乎乎的问题:“我能在我的 MacBook Pro 上用 5 分钟训练出最强的 AI 模型吗?”

答案直接说:我训练出来的最佳模型是一个大约 180 万参数的 GPT 风格 Transformer,在大约 2000 万个 TinyStories 数据集的 token 上训练,最终在测试集上拿到 困惑度(perplexity)9.6

来看下它的输出(粗体是输入):

Once upon a time, there was a little boy named Tim.
模型续写:Tim 有一个小盒子,他很喜欢玩。一天,他发现了一个大红球,他开心极了,拿给朋友 Jane 看。Jane 说:“看我的包!我要它!”于是他们玩了一整天。

——说实话,不算特别好,但考虑到只训练了 5 分钟,其实已经挺不错了。


这个问题哪里傻?

1. 如果你有钱买得起 MacBook,那完全可以花点小钱去租 H100 显卡,半小时就能训练一个强很多的模型。
2. 就算真要在笔记本上练模型,也没必要卡死在 “5 分钟” 这个时间限制上。

所以这个挑战没什么实际意义,但挺好玩。

5 分钟训练的现实限制

在 5 分钟里,你没法喂太多数据进去。

* 大模型训练太慢,不合适。
* 太小的模型(比如 1 万参数)虽然能跑很多 token,但根本学不会英语语法,30 秒就收敛停滞,接下来只会胡乱输出。

所以关键是:模型要小,但不能太小。

怎么让训练更快?

他一开始用苹果的 MPS 跑,速度大概 每秒 3000 token

* 用 torch.compile、float16 之类的数学优化:几乎没用,有的甚至更慢。
* 用梯度累积(gradient accumulation):直接慢了一大截。
* 最大瓶颈其实是 GPU 的“任务启动”开销,不是算力本身。

换成苹果的 MLX 框架,结果也没快多少。

结论:用 MPS 就行,不要折腾编译、量化,也别用梯度累积,模型尽量小。


训练数据怎么选?

大约只能用 1000 万 token,差不多 50MB 文本。

如果掺太多不同主题,比如一部分是莎士比亚,一部分是物理教材,模型学不到稳定的模式。

一开始他用了 Simple English Wikipedia,结果模型特别喜欢乱造专有名词:

> “Paris, France is a city in North Carolina...”
> (巴黎在北卡罗来纳州……)

虽然语法对了,但全是瞎编的地名。

最后,他改用 TinyStories(写给小朋友的简短故事数据集),效果好多了:

* 语言简单
* 有因果关系
* 人名很少,容易学

事实证明,这是训练小模型的理想数据集。


分词(tokenization)

分词没花太多心思,因为 5 分钟训练的数据量有限,分词快得很。

* 用多字节 token 比单字符更好学。
* 没必要提前全量分词,只处理要用的部分就行。


模型结构

最佳选择还是 GPT-2 风格 Transformer

* 参数规模小也能出效果
* 层数 2-3 层就行
* SwiGLU 激活函数更好
* 学习率 0.001\~0.002 较合适(虽然大,但能快速收敛)
* 位置编码用 learned positional embeddings 比 RoPE 好

他还试过 LSTM,结果差不多,但效果比 Transformer 差一点。

试过 扩散模型 (Diffusion),结果一团乱麻:输出全是随机 token,完全没法看。


模型规模的最佳点

测试下来:

* 太大(几百万以上参数):5 分钟不够训练收敛。
* 太小(几十万参数以下):很快就停滞,学不到东西。

最佳点大约在 100万到150万参数之间。和 Chinchilla Scaling Law(奇努奇拉缩放规律) 的预测结果差不多。


总结

作者觉得这挑战没啥实用价值,但挺有意思:

* 5 分钟就能让一个小 Transformer 学会写出通顺的英语小故事,已经很神奇了。
* 随着笔记本 GPU 和架构进步,以后也许能在几分钟里训练出更厉害的模型。

在笔记本上 5 分钟能训出的小模型,别指望它很强,但调好数据和架构,它至少能写出像小朋友作文一样通顺的小故事。