nanochat代码库架构指南 | AI生成和翻译

Home 2026.05

现在我对代码库有了全面的理解。以下是指南:


nanochat 代码库指南

nanochat(作者 Andrej Karpathy)是一个极简的端到端 LLM 训练框架,涵盖所有主要阶段:分词、预训练、SFT、RL、评估、推理以及类 ChatGPT 网络 UI。核心理念是:一个旋钮(--depth)控制模型大小,其他一切自动推导。


  1. 架构概览

项目包含 4 个目录:

nanochat/     -- 核心库(模型、数据、优化器、引擎)
scripts/      -- 可执行入口点(训练、评估、聊天)
tasks/        -- 评估任务定义(MMLU、GSM8K 等)
runs/         -- 完整训练流程的 Shell 脚本

训练流程如下:

分词器训练 -> 基础预训练 -> SFT 微调 -> RL(可选)-> 聊天

所有中间产物存放于 ~/.cache/nanochat/(可通过 $NANOCHAT_BASE_DIR 覆盖)。


  1. 核心库(nanochat/

gpt.py – GPT Transformer 模型

engine.py – 高效推理引擎

flash_attention.py – 统一 Flash Attention 接口

optim.py – 混合 Muon + AdamW 优化器

tokenizer.py – BPE 分词器

dataloader.py – BOS 对齐的最佳适应打包

dataset.py – 数据下载/管理

common.py – 工具函数

checkpoint_manager.py – 保存/加载

core_eval.py – DCLM CORE 指标评估

loss_eval.py – 每字节比特数(BPB)评估

fp8.py – FP8 训练支持(需要 H100+ 和 torchao)

execution.py – 模型的 Python 代码执行工具


  1. 脚本(scripts/

base_train.py – 预训练(主训练循环)

base_eval.py – 评估基础模型(CORE 分数 + BPB + 样本)

chat_sft.py – 监督微调

chat_rl.py – 强化学习(简化版 GRPO/REINFORCE)

chat_eval.py – 在任务套件上评估聊天模型

chat_cli.py – CLI 聊天界面

chat_web.py – FastAPI + uvicorn 网络 UI(类 ChatGPT)

tok_train.py – 训练 BPE 分词器

tok_eval.py – 评估分词器压缩率


  1. 任务(tasks/


  1. 运行脚本(runs/


  1. 深度旋钮

最重要的概念。设置 --depth=N 会自动推导所有内容:

n_embd      = depth * aspect_ratio(默认 64)
n_head      = n_embd // head_dim(默认 128)
n_kv_head   = n_head(GQA 可减少此值)
vocab_size  = 32768
sequence_len = 2048

GPT-2 能力约在 d24-d26 范围。快速实验约 d12(8xH100 上约 5 分钟)。


  1. 数据流

原始 parquet 分片
    -> dataloader.py(BOS 对齐的最佳适应打包)
    -> 分词后的批次(B, T)整数
    -> 模型前向传播(交叉熵损失)
    -> Muon + AdamW 优化器步骤
    -> 检查点保存
    -> SFT:带损失掩码的聊天格式对话
    -> RL:在线策略 rollout + REINFORCE
    -> Engine 推理(KV 缓存 + 预填充/解码)
    -> CLI 或 网络 UI

  1. 关键设计决策


Back Donate