从 tokenizer 到网页聊天的端到端迷你大模型,全程可复现、可魔改、可炫耀。
“老板,要 1750 亿参数吗?先批 1000 万美元预算。”
——如果你也在会议室里听过类似对白,大概率会对“大模型=大钱”这件事深信不疑。直到 Andrej Karpathy 把 nanochat 塞进 GitHub,用一张 8×H100 的账单(≈ 100 USD)就把“私人版 ChatGPT”端到端跑通。今天这篇文章不是广告,是一份可抄作业的实验笔记:从开机到聊天,只需 4 小时;从聊天到魔改,只剩你的脑洞。
一、把 100 美元花在哪里?——速通全景图
成本项 | 明细 | 备注 |
---|---|---|
算力 | 8×H100 节点租金 | Lambda 等云厂商 ≈ 24 USD/h,4 h 合计 96 USD |
存储 | 系统盘 + 数据集缓存 | 通常赠送 200 GB,超出按量几分钱,可忽略 |
网络 | 下载开源语料 | 公共数据集免费,走云内网流量 0 结算 |
结论:只要 100 USD 出头,就能把“Tokenizer → Pretrain → Finetune → Eval → Web 服务”整条流水线拉满。对比动辄千万的超算预算,这杯“浓缩咖啡”简直带劲。
二、开机!30 秒完成环境自检
-
选云:任何提供 8×80 GB GPU 的裸金属或 VM 均可。作者亲测 Lambda 节点(https://lambda.ai/service/gpu-cloud),开机即带 CUDA 12、NVLink 已链好。 -
拉代码:
git clone https://github.com/karpathy/nanochat.git
cd nanochat
# 推荐用 uv 一键装好依赖,30 秒收工
curl -LsSf https://astral.sh/uv/install.sh | sh
source .venv/bin/activate
uv pip install -r requirements.txt
-
检查显存: nvidia-smi
确认 8 卡在线;驱动≥525。 -
(可选)挂 screen
:防止 SSH 掉线把训练打断。
screen -L -Logfile speedrun.log -S speedrun
三、一条脚本跑完全程——speedrun.sh 拆解
不想读 8 千行源码?直接
cat speedrun.sh
也能看懂——它把 5 大步骤串成了 Linux 管道:
阶段 | 对应脚本 | 耗时 | 产物 |
---|---|---|---|
① Tokenize | python -m nanochat.dataset -n 450 |
~10 min | data/*.bin |
② Pretrain | torchrun --nproc_per_node=8 -m scripts.base_train |
1 h 30 m | ckpt/base.pt |
③ Mid-train | 同上,换脚本 mid_train | 1 h 20 m | ckpt/mid.pt |
④ SFT | scripts.sft_train |
40 m | ckpt/sft.pt |
⑤ Eval & Report | scripts.eval |
5 m | report.md |
关键参数只有 2 个:
--depth=12
默认,改 26 即可冲到 GPT-2 量级;
--device_batch_size=32
显存告急就砍到 16、8、4……脚本会自动梯度累积,保证 global batch 不变。
四、让模型开口——3 行命令启动网页聊天
训练一结束,终端会弹出:
>>> Done. Run `python -m scripts.chat_web` to talk to your LLM.
照做即可:
# 仍在虚拟环境
python -m scripts.chat_web
# => Uvicorn running on http://0.0.0.0:8000
把 0.0.0.0
换成实例公网 IP,浏览器打开 http://<ip>:8000
,你就能与“4 小时速成”的娃对话:
你:为什么天是蓝的?
nanochat:因为大气散射了短波长的蓝光……(省略 100 字)
你:那如果我把海水染成红色,天会变红吗?
nanochat:有趣的问题!理论上……(开始一本正经地幻觉)
五、成绩单长什么样?——report.md 速读
流水线最后一行会自动写报告,核心指标如下(来自笔者真实跑鞋):
Benchmark | MID | SFT | RL(可选) |
---|---|---|---|
ARC-Easy | 0.356 | 0.388 | – |
GSM8K | 0.025 | 0.046 | 0.076 |
HumanEval | 0.067 | 0.085 | – |
MMLU | 0.311 | 0.315 | – |
解读:
这是一张“幼稚园毕业证”——能对话,但算术和编程题经常翻车。 RL 阶段默认关闭,需要额外实现 PPO;作者留好接口,等你 PR。
六、想再猛一点?——300 USD 档“小 GPT-2”攻略
-
估算数据量:
params × 20 × 4.8 ÷ 250 M ≈ shard 数
d26 约 450 M 参数 → 170 个 shard(已内置下载脚本)。 -
显存对冲:
batch 减半--device_batch_size=16
,训练时间涨到 12 h,总账单 ≈ 300 USD。 -
性能对比:
CORE 分数略超 GPT-2-124 M,文本流畅度肉眼可感提升。
七、常见坑与急救包(FAQ)
Q1:显存 40 GB 够吗?
A:单卡可跑,把 device_batch_size
压到 2 或 1,速度×8;最好有 80 GB。
Q2:SSH 断了怎么办?
A:训练支持断点续传,同级目录下 resume=<ckpt>
即可;用 screen
/tmux
更省心。
Q3:想换中文语料?
A:只要整理成 .txt
→ rustbpe
编码 → 按行随机 shuffle,命名 data/shard_xxx.bin
就行,代码零改动。
Q4:可以上多机吗?
A:目前脚本仅做单机 8 卡;多机需改 torchrun --nnodes
,作者表示欢迎 PR。
八、总结:nanochat 给社区带来了什么?
-
价格锚点——“100 USD 就能端到端”打破心理门槛; -
教育锚点——8 K 行可读代码,把 LLM 黑盒拆成 5 个清晰阶段; -
魔改锚点——无巨型 config,改两行就能换深度、换语料、换奖励函数。
换句话说,nanochat 不是来“秒杀 GPT-4”的,它是给每个工程师递上一把可复现、可膨胀、可教学的瑞士军刀。先跑通 100 USD 的“小钢炮”,再决定要不要烧 1000 万美元炼巨兽——这份底气,正是开源最迷人的地方。
九、下一步玩什么?
-
把 RL 阶段补齐,让模型学会“说人话”而不是“说套路”; -
用 LoRA/QLoRA 压显存,让 24 GB 游戏卡也能入场; -
接入 RAG,把私域知识塞进 4 小时小脑瓜。
- 如果你已手痒,不妨现在就开一台云节点,复制粘贴本文的命令——4 小时后,你就能在浏览器里跟自己的“百元 ChatGPT”打招呼。别忘了回来留言:它第一次回答你什么?
- CyberAgent 如何部署内置 AI 技术来改善内容创作
- 程序员眼中的 ChatGPT