YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
nanochat-d24
nanochat d24 三阶段训练 checkpoint(pretrain → SFT → RL),4×A100 40GB bf16 训练。
架构
| 字段 | 值 |
|---|---|
| depth (n_layer) | 24 |
| n_embd | 1536 |
| n_head / n_kv_head | 12 / 12(无 GQA) |
| head_dim | 128 |
| vocab_size | 32768 |
| max_seq_len | 2048 |
| window_pattern | "L"(A100 走 SDPA,无 sliding window) |
| 参数量 | ~412M |
训练(详见各阶段 meta_*.json 的 user_config)
| 阶段 | 最终 step | 关键配置 | val_bpb |
|---|---|---|---|
| base (pretrain) | 5568 | target_param_data_ratio=8(GPT-2 undertrain 风格), total_batch_size=1048576, 4×A100 DDP | 0.709 |
| SFT | 467 | smoltalk + mmlu(3ep) + gsm8k(4ep) packed 1 epoch, optimizer 热启动自 base | 0.273 |
| RL | 466 | GSM8K GRPO, num_epochs=1, num_samples=8, 每 100 步存档 | — |
仓库结构
tokenizer/
tokenizer.pkl # nanochat BPE tokenizer
token_bytes.pt # tokenizer 字节表
base_checkpoints/d24/
model_005568.pt # base pretrain 权重
meta_005568.json # base 配置 + user_config + loop_state
chatsft_checkpoints/d24/
model_000467.pt # SFT 权重
meta_000467.json # SFT 配置
chatrl_checkpoints/d24/
model_000466.pt # RL 最终步权重
meta_000466.json # RL 配置
使用方法
下载整个仓库后,把目录树原样合并到 ~/.cache/nanochat/(或你设置的 $NANOCHAT_BASE_DIR):
# 假设仓库 clone 到 ./nanochat-d24
cp -r ./nanochat-d24/* ~/.cache/nanochat/
合并后目录应为:
~/.cache/nanochat/
├── tokenizer/{tokenizer.pkl, token_bytes.pt}
├── base_checkpoints/d24/{model_005568.pt, meta_005568.json}
├── chatsft_checkpoints/d24/{model_000467.pt, meta_000467.json}
└── chatrl_checkpoints/d24/{model_000466.pt, meta_000466.json}
然后用 nanochat 加载(source 可选 base / sft / rl):
from nanochat.checkpoint_manager import load_model
model, tokenizer, meta = load_model("rl", device, phase="eval")
或命令行:
python -m scripts.chat_cli --source=rl -p "your prompt" # RL 后的对话模型(会数学推理)
python -m scripts.chat_cli --source=sft -p "..." # SFT 后的对话模型
python -m scripts.chat_cli --source=base -p "..." # 纯 base,续写模式
--source 不传时默认 sft。load_model 会自动找对应目录下最高 step 的 checkpoint(find_largest_model + find_last_step),所以文件名里的 step 号不需要手动指定。
⚠️ 不是 HuggingFace transformers 格式
本仓库仅包含 nanochat 原生 checkpoint(.pt + meta_*.json),不是 HF transformers / vLLM / Ollama 格式:
AutoModelForCausalLM.from_pretrained(...)加载不了- 没有
config.json/model.safetensors/tokenizer_config.json等 HF 标准文件 - nanochat 的
GPT是裸nn.Module(不是PreTrainedModel),架构用 RoPE + RMSNorm(无 learnable 参数)+ GQA + 无 bias +relu^2激活 + sliding window + logit softcap + value embedding,没有现成的 HF 架构完全匹配
要用 transformers / vLLM 需自行写 weight 转换器,参见 nanochat 仓库的
docs/2026-07-18-checkpoint格式pt-vs-safetensors对比.md。
未上传的内容
- optimizer 分片(
optim_*_rank*.pt):DDP 续训热启动用的中间状态,分发场景不需要。chat_rl.py也根本不读 SFT 的 optim。参考 karpathy/nanochat-d34 的做法同样不传。 - RL 中间快照(
model_000{100,200,300,400}.pt):只保留最终步 466,前面 4 个是训练过程快照。
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support