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×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开发的认知复杂度

项目历史与致谢

  • 灵感来源:

  • 鸣谢:

    • 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

Star History Chart