2019 年训练一个 GPT-2 级别的模型 reportedly 花了 4.3 万美元现在 nanochat 的 README 上写着用 8 块 H100 跑大概 1 个半小时成本 48 美元左右就能训出一个 GPT-2 水平、还能对话的模型。spot 实例甚至可以压到 15 美元。一句话先说结论nanochat 不是又一个LLM 框架而是一个端到端的实验套件。它从分词、预训练、微调、评估到推理和聊天 UI 全包了代码量不大读得懂、改得动。最吸引我的是它用一个整数--depthTransformer 层数当复杂度旋钮宽度、头数、学习率、训练步数这些超参自动算好用户基本不用调。这项目到底解决了什么问题我自己之前想跑通一个 LLM 训练流程通常会遇到三种崩溃框架太胖打开仓库光是配置文件就有十几种model factory、trainer、registry 层层封装改一行要追十行。超参太多学习率、warmup、weight decay、batch size、调度策略……每个都要猜错了就 OOM 或者训飞了。只能训不能聊很多项目只到预训练这一步想做成能对话的模型还得自己接 SFT、RL、推理引擎、Web UI等于重新搭一座桥。nanochat 的思路是把上面这三件事全部压进一条命令里。它不是让你配置一切而是给你一个强基线——你 fork 过去改几行就能做实验或者直接用默认配置跑出一个能对话的小模型。一个旋钮调所有--depth这是 nanochat 最有意思的设计。你不用写 30 行配置只要告诉它--depth26代码就会自动推出模型宽度、注意力头数、学习率、训练步数、weight decay 等等按计算最优的方式配好。打个比方--depth就像汽车排量。你只需要说我要 1.5L 还是 2.0L油耗、变速箱、轮胎尺寸 nanochat 帮你配齐。GPT-2 的水平大致对应--depth在 24–26 之间。这种设计有个好处你做任何改动都得保证它在不同 depth 下都合理而不是只针对某一个规模 hand-tune。这让整个 repo 更像个连贯的研究基线而不是一个大杂烩。Time-to-GPT-2一个挺刺激的排行榜nanochat 主打的指标叫Time-to-GPT-2[达到 GPT-2 水平的墙钟时间]。判定标准是DCLM CORE 分数[一种评估语言模型综合能力的基准分可以理解成 LLM 的期末考分数] 超过 OpenAI 原版 GPT-21.6B的 0.256525。目前 leaderboard 上最快的记录已经卷到 1.65 小时。我把主要条目整理了一下val_bpb是验证集上的 bits per byte [衡量模型压缩文本能力的指标越低越好]排名时间val_bpbCORE说明日期0168 小时-0.2565OpenAI 原版 GPT-2 checkpoint201913.04 小时0.748330.2585d24 baseline略微过拟合2026-01-2922.91 小时0.745040.2578d26 fp82026-02-0232.76 小时0.746450.2602总 batch size 提到 1M tokens2026-02-0542.02 小时0.718540.2571数据集换成 NVIDIA ClimbMix2026-03-0451.80 小时0.718080.2690autoresearch 第一轮2026-03-0961.65 小时0.718000.2626autoresearch 第二轮2026-03-14数据来源nanochatdev/LEADERBOARD.md。你可以看到大家基本在预训练阶段疯狂优化——这也是目前项目开发最热闹的地方。从代码结构看它到底长什么样我翻了一下源码目录很清爽没有巨型抽象nanochat/ # 核心库 gpt.py GPT Transformer [Transformer 是处理序列数据的神经网络结构] tokenizer.py BPE 分词器封装 [BPE 是把文字切成小片段的算法] dataloader.py 分布式数据加载 optim.py AdamW / Muon 优化器 engine.py 带 KV Cache 的推理引擎 [KV Cache 是推理时缓存已算信息避免重复计算] core_eval.py CORE 分数评估 ... scripts/ # 入口脚本 base_train.py 预训练 base_eval.py 评估 chat_sft.py 监督微调 [SFT用对话数据专项训练让模型学会回答问题] chat_rl.py 强化学习 [RL用反馈打分让回答更像人] chat_cli.py 命令行聊天 chat_web.py Web 聊天 UI ... runs/ # 一键脚本 speedrun.sh 从零到 GPT-2 级并对话 scaling_laws.sh 缩放定律实验 miniseries.sh 训练一族不同 depth 的模型 runcpu.sh CPU / Apple Silicon 小 demo没有 model factory没有满屏 if-else代码基本都是普通 PyTorch。这也是它适合学习和二次开发的原因。怎么跑一条命令复现百元 ChatGPT环境推荐用 uv项目根目录有pyproject.toml和uv.lock。# 1. 克隆gitclone https://github.com/karpathy/nanochat.gitcdnanochat# 2. 装依赖CUDA 版本uvsync--extragpusource.venv/bin/activate# 3. 在 8×H100 节点上跑完整 pipelinebashruns/speedrun.shREADME 上说这个脚本大概跑1.5 小时。按当前 8×H100 节点约 $24/小时算成本就是$48 左右。如果用 spot 实例能到$15 左右。跑完之后启动命令行聊天python-mscripts.chat_cli或者启动 Web UIpython-mscripts.chat_web浏览器打开终端里打印的地址就能像 ChatGPT 一样跟模型对话。我试了一下示例对话效果大概像一个幼儿园小朋友——能回答问题、写诗但会一本正经地胡说八道。README 里给的例子也特实在你问它天为什么是蓝的它会跟你聊瑞利散射你让它写首诗它会贡献一堆blue。没有 8 块 H100 怎么办nanochat 也考虑到了穷鬼方案单 GPU去掉torchrun自动退化成梯度累积结果基本一致但慢 8 倍。显存不够把--device-batch-size从默认 32 往下降16 → 8 → 4 → 2 → 1直到不爆显存。CPU / MPS跑runs/runcpu.sh模型和步数会大幅缩水只能看个热闹别指望效果。精度这块也做了简单兜底按硬件自动选 dtype硬件默认 dtype原因A100 / H100SM 80bfloat16原生支持 bf16 Tensor CoreV100 / T4SM 80float32不支持 bf16可手动设NANOCHAT_DTYPEfloat16CPU / MPSfloat32安全默认新 macOS 上 MPS 可跑 bf16跟 nanoGPT、modded-nanogpt 有什么区别很多人看到 nanochat 会想到 Karpathy 之前的 nanoGPT。我整理了一张对比表维度nanochatnanoGPT大型 LLM 框架HF / Megatron 等覆盖阶段分词 → 预训练 → 微调 → 评估 → 聊天只有预训练全流程但配置复杂上手难度一个--depth旋钮需手动调超参配置项多、学习曲线陡代码量精简、可 hack精简庞大、抽象多目标百元级可对话模型预训练基线企业级通用训练社区玩法Time-to-GPT-2 排行榜无各有生态modded-nanogpt 更像是 nanoGPT 的竞速改装版专注于把预训练推到极致nanochat 则把它扩展成了完整的从数据到对话链路。适用人群从我自己的体验来看这几类人可能会觉得它好玩想亲手训一个 LLM 并跟它聊天的开发者百元级、一条命令、几小时就能对话成就感拉满。做 scaling / 预训练研究的人默认配置就是强基线改起来不累。教学场景代码结构清晰适合讲从 token 到 chat的全流程。需要可 fork 基线的团队不像大框架那样被配置绑架改几处就能出实验变体。几个注意事项项目还在快速迭代master 代码可能比讨论区的旧帖子新很多看文档时留意日期。提交 PR 需要披露哪些部分用了 LLM 辅助这点挺有意思。如果你只是想用一个强模型直接下载现成的更好nanochat 的价值在于你亲自跑通、亲自改。我的看法nanochat 最有价值的地方不是便宜而是它把 LLM 训练的认知成本也打下来了。你可以花一个下午从 0 走到和自己训的模型聊天中间每一步都看得见、改得了。对于想理解 LLM 是怎么从一堆文本变成能对话的助手的人来说这比读十篇论文都管用。如果你也有 8×H100或者单卡 耐心值得一试。项目地址https://github.com/karpathy/nanochat
阅读完成 · 觉得有帮助?