karpathy/nanochat View GitHub Homepage for Latest Official Releases
100美元打造ChatGPT克隆体 - 单文件全栈LLM实现方案
MITPythonnanochatkarpathy 33.3k Last Updated: October 25, 2025
nanochat 项目详细介绍
项目概述
nanochat 是由知名AI研究者 Andrej Karpathy 开发的一个全栈大语言模型(LLM)实现项目,其核心理念是用最少的代码和最低的成本,完整展示如何从零开始构建一个类似 ChatGPT 的聊天机器人。
项目标语: "The best ChatGPT that $100 can buy." (100美元能买到的最好的ChatGPT)
核心特点
1. 极简设计哲学
- 单一、清晰、最小化、可修改的代码库
- 低依赖性设计
- 约8,300行代码,44个文件
- 总计约83,497个tokens(约334KB)
2. 端到端完整流程
nanochat 涵盖了构建LLM的全部环节:
- Tokenization (分词)
- Pretraining (预训练)
- Finetuning (微调)
- Evaluation (评估)
- Inference (推理)
- Web Serving (Web服务)
3. 低成本训练
- 基础版本($100级别):在8×H100节点上约4小时完成
- 中级版本($300级别):约12小时,性能略超GPT-2
- 高级版本($1000级别):约41.6小时
4. 教育定位
- 设计为 Eureka Labs 的 LLM101n 课程的毕业项目
- 代码高度可读,便于学习和理解
- 适合想要深入了解LLM训练全流程的开发者
快速开始
运行快速训练脚本
在8×H100 GPU节点上运行:
bash speedrun.sh
或在screen会话中运行(推荐):
screen -L -Logfile speedrun.log -S speedrun bash speedrun.sh
等待约4小时后,即可获得一个可用的LLM模型。
启动Web界面
训练完成后,激活虚拟环境并启动服务:
source .venv/bin/activate
python -m scripts.chat_web
然后访问显示的URL(例如 http://209.20.xxx.xxx:8000/),即可像使用ChatGPT一样与你自己的LLM对话。
训练结果示例
训练完成后会生成 report.md 文件,包含模型的评估指标:
Metric | BASE | MID | SFT | RL
---------------|--------|--------|--------|-------
CORE | 0.2219 | - | - | -
ARC-Challenge | - | 0.2875 | 0.2807 | -
ARC-Easy | - | 0.3561 | 0.3876 | -
GSM8K | - | 0.0250 | 0.0455 | 0.0758
HumanEval | - | 0.0671 | 0.0854 | -
MMLU | - | 0.3111 | 0.3151 | -
ChatCORE | - | 0.0730 | 0.0884 | -
Total wall clock time: 3h51m
注意: $100训练出的模型性能有限(约4e19 FLOPs),相当于"幼儿园水平"的语言能力,但足以展示完整的训练流程。
扩展到更大模型
要训练更大的模型(如GPT-2级别的d26模型),只需对 speedrun.sh 做少量修改:
# 1. 下载更多数据分片
python -m nanochat.dataset -n 450 &
# 2. 增加模型深度,减小批次大小以适应内存
torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- --depth=26 --device_batch_size=16
# 3. 中期训练时保持相同配置
torchrun --standalone --nproc_per_node=8 -m scripts.mid_train -- --device_batch_size=16
运行环境要求
推荐配置
- 8×H100 80GB GPU节点(约$24/小时)
- 提供商建议:Lambda GPU Cloud
兼容性
- 8×A100 GPU: 可运行,但速度较慢
- 单GPU: 可运行,但训练时间延长8倍
- 小显存GPU(<80GB): 需要调整
--device_batch_size参数(从32降至16、8、4、2或1) - 其他平台: 基于PyTorch,理论上支持xpu、mps等,但需要额外配置
技术栈
- 深度学习框架: PyTorch
- 分布式训练: torchrun
- 包管理: uv
- 数据集: HuggingFace Fineweb, Smoltalk
- Tokenizer: 自定义Rust实现(rustbpe)
与AI对话探索代码
由于代码库简洁(~330KB),可以将整个项目打包后提供给LLM进行分析:
files-to-prompt . -e py -e md -e rs -e html -e toml -e sh --ignore "*target*" --cxml > packaged.txt
或者使用 DeepWiki 直接在线探索代码库。
测试
项目包含单元测试,特别是针对分词器:
python -m pytest tests/test_rustbpe.py -v -s
项目定位与目标
nanochat 不是:
- 一个功能齐全的LLM框架
- 高度可配置的模型工厂
- 生产级别的解决方案
nanochat 是:
- 教育性质的参考实现
- 可修改、可分叉的强基线
- 面向预算<$1000的微型模型研究
- 降低LLM开发的认知复杂度
项目历史与致谢
灵感来源:
- nanoGPT - Karpathy的早期预训练项目
- modded-nanoGPT - 游戏化的nanoGPT变体
鸣谢:
- HuggingFace - 提供fineweb和smoltalk数据集
- Lambda - 提供开发所需的算力
- Alec Radford - LLM首席顾问
开源协议
MIT License
引用格式
@misc{nanochat,
author = {Andrej Karpathy},
title = {nanochat: The best ChatGPT that $100 can buy},
year = {2025},
publisher = {GitHub},
url = {https://github.com/karpathy/nanochat}
}
项目现状
项目仍在活跃开发中,目标是不断改进微型模型的最先进水平,让更多人能够以可承受的成本完整体验LLM的训练全流程。
GitHub地址: https://github.com/karpathy/nanochat