karpathy/nanochat
机器学习在单张 GPU 节点上端到端训练 GPT-2 级小模型的最小化、可改造代码库。
项目介绍
nanochat 是一个刻意保持精简、可读的实验代码库,覆盖 LLM 的完整流程:分词、预训练、监督微调、评估和推理,目标运行环境是单个 GPU 节点。它不走「大而全配置框架」的路线,而是只暴露一个复杂度旋钮 --depth(Transformer 层数),其余超参数(宽度、头数、学习率调度、训练步数、权重衰减等)都由该值推导,使模型在算力上接近最优。按当前代码,约 24–26 层的模型大致对应 GPT-2 能力。
项目对外主张的重点是成本:README 中描述的 GPT-2 级训练在 8xH100 节点上约 2 小时,按约 $3/GPU/小时计约 $48,使用竞价实例可低至约 $15;作为对照,2019 年训练 GPT-2 的成本被引为约 $43,000。GPU 价格和可用性会变化,这些数字应视为作者的估算,而非实际账单结果。
快速使用
依赖通过 uv 管理。按硬件选择 extra 并激活环境:
uv sync --extra gpu # CUDA(A100/H100 等)
uv sync --extra cpu # 仅 CPU / MPS
source .venv/bin/activate
要复现参考的 GPT-2 级训练,准备一台 8xH100 机器(README 提到作者使用 Lambda),运行 speedrun 脚本,建议放在 screen 会话中,因为大约要跑 1.5 小时:
bash runs/speedrun.sh
结束后用 CLI 与模型对话(需保持 uv 虚拟环境已激活):
python -m scripts.chat_cli
对结果要有合理预期:speedrun 模型是约 4e19 FLOPs 的能力级别,README 示例里它会把瑞利散射解释错,语气却很自信。
使用约束
- 硬件:参考流程按 8xH100 设计。8xA100 也能跑,只是更慢;去掉
torchrun后可在单卡上运行,靠梯度累积保持近似结果,但耗时约 8 倍。显存不足 80 GB 时需要调低--device-batch-size(默认 32),否则会 OOM。 - CPU/MPS:runs/runcpu.sh 是玩具级示例,会把模型缩到能在几十分钟内跑完,README 明确说明效果不会好。
- 精度:项目不用 autocast,而是通过全局
COMPUTE_DTYPE显式控制精度:SM 80+ 的 CUDA 默认 bf16,较老 CUDA 以及 CPU/MPS 默认 fp32;可用NANOCHAT_DTYPE覆盖,fp16 训练会自动启用GradScaler。 - 定位:这是「强基线」而非可穷举配置的框架,改动需在所有 depth 设置下成立。提交 PR 时需声明大比例由 LLM 撰写、自己未完全理解的部分。
- 许可证:MIT。
进一步阅读
做研究迭代时,README 推荐 scaling laws 和 miniseries 脚本;作者常用的快速实验是一个约 5 分钟的 12 层(--depth=12)预训练循环,指标记录在 wandb(命令见这里)。更长的说明在项目指南里,包括「用不到 $100 打败 GPT-2」的过程记录;问题可以到 Discussions 或 DeepWiki 索引中查找。
HotRepo 点评
nanochat 在 2026-11-02 进入 GitHub 全语言日榜第 14 名,当日新增 325 Star,仓库累计约 59,600 Star、8,400 Fork。这只是单日快照,无法说明持续势头,但至少说明一个观点明确的小型训练代码库配上公开的 speedrun 排行榜,仍能持续吸引关注。更有分量的信号来自排行榜本身:README 记录的运行结果在 2026 年 1 月至 3 月间把「达到 GPT-2」的耗时从 3.04 小时压缩到 1.65 小时,这正是该仓库设计上想要激励的可度量社区进展。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。