Andrej Karpathy 发布新项目 nanochat:一个从零开始构建的极简全栈式 ChatGPT 克隆

刚刚,Andrej Karpathy 推出了他的最新开源项目 nanochat。与之前聚焦于预训练阶段的 nanoGPT 不同,nanochat 提供了一个从头开始、代码极简的全栈式类 ChatGPT 模型的训练与推理流水线。 整个项目被整合在一个依赖极少的单一代码库中,旨在帮助开发者和研究者深入理解大语言模型(LLM)的完整生命周期。

根据 Karpathy 的介绍,用户只需启动一台云端GPU服务器并运行一个脚本,最快在4小时后,便能通过一个类似 ChatGPT 的网页界面,与自己亲手训练的语言模型进行交互。

完整的端到端实现流程

nanochat 项目的代码量约 8000 行,覆盖了构建一个聊天机器人的完整技术流程,具体包括:

  • 分词器训练 (Tokenizer Training): 采用了一个基于 Rust 的全新实现来训练分词器。
  • 预训练 (Pre-training): 在 FineWeb 数据集上预训练一个 Transformer 架构的语言模型,并依据多项指标评估其 CORE 分数。
  • 中间训练 (Intermediate Training): 使用来自 SmolTalk 的用户-助手对话数据、多项选择题及工具使用数据,对预训练模型进行进一步训练。
  • 监督微调 (SFT): 在多个领域的基准测试上对聊天模型进行微调与评估,涵盖世界知识(ARC-easy/challenge, MMLU)、数学推理(GSM8K)和代码生成(HumanEval)。
  • 强化学习 (RL): 提供一个可选的强化学习阶段,使用 "GRPO" 算法(PPO的简化变种)在 GSM8K 数据集上进一步优化模型。
  • 高效推理 (Inference): 实现了一个带有 KV 缓存的高效推理引擎,支持 prefill/decode 模式和工具使用(通过轻量级沙箱调用 Python 解释器)。用户可以通过命令行或网页界面与模型交互。
  • 生成式报告卡 (Report Card Generation): 自动生成一份 Markdown 格式的报告卡,以游戏化的方式总结和呈现整个训练过程的各项指标与成果。

成本与性能预期

Karpathy 详细说明了不同计算投入所能达成的模型性能水平:

  • 约 100 美元成本(在 8x H100 节点上训练约 4 小时): 可以训练出一个能够处理简单对话、生成故事或诗歌,并回答基础问题的小型 ChatGPT 克隆体。 经过约 12 小时的训练,模型的 CORE 指标能够超越 GPT-2。
  • 约 1000 美元成本(训练约 41.6 小时): 随着投入增加,模型将表现出更强的连贯性,能够解决简单的数学和代码问题,并在多项选择题测试中取得更好的成绩。

例如,一个拥有 30 层深度、训练 24 小时(其总计算量约等于 GPT-3 Small 125M 模型的千分之一)的模型,能在 MMLU 测试中获得 40+ 的分数,在 ARC-Easy 上得分超过 70,在 GSM8K 上的得分也达到了 20+。

项目愿景与技术细节

Karpathy 的核心目标是创建一个高度集成、代码极简、易于理解、可被任意修改和复刻(forkable)的强大基线技术栈。 nanochat 也将成为他正在开发的 LLM101n 课程的顶点项目。 他认为,该项目具备发展成为一个重要研究工具或行业基准的潜力,正如 nanoGPT 此前所取得的成功一样。

同时,Karpathy 也坦言,项目目前远未达到完全优化或精调的状态,但他认为其整体框架已经足够成熟,可以发布并交由社区共同改进。

技术细节与官方问答

在项目发布后,Karpathy 回答了社区关心的一些技术问题。

问:该项目训练所用的模型架构是什么?

Karpathy: 其架构基本与 Llama 类似,但经过了简化,并受到了一些修改版 nanoGPT 的启发。具体的技术选型包括:

  • 核心架构: 密集的 Transformer (Dense Transformer)。
  • 位置编码: 旋转位置嵌入 (RoPE),不使用绝对位置嵌入。
  • 归一化: 查询(Query)和键(Key)应用了归一化(QK Norm)。同时,在 Token 嵌入后和 MLP 层前使用了 RMSNorm,且 RMSNorm 中不包含可学习参数。
  • 权重共享: 词嵌入(Embedding)与分类头(Unembedding)的权重不进行绑定。
  • 激活函数: MLP 层中使用的激活函数为平方 ReLU,其数学表达式为:
    f(x)=(ReLU(x))2=(max⁡(0,x))2 f(x) = (\text{ReLU}(x))^2 = (\max(0, x))^2 f(x)=(ReLU(x))2=(max(0,x))2
  • 偏置项: 所有线性层(Linear layers)均不使用偏置项(bias)。
  • 注意力机制: 采用多查询注意力(Multi-Query Attention, MQA)。
  • 输出处理: 对 Logits 应用 Softcap。
  • 优化器: 采用 Muon + AdamW 优化器,这一选择深受修改版 nanoGPT 的影响。

问:我是否可以用这个项目来训练一个处理我个人数据(如 Notion 笔记、健康数据等)的私人聊天机器人?

Karpathy: Karpathy 认为 nanochat 目前并不适合此用途。他将这类小型模型比作"幼儿园水平的孩子",它们不具备大型模型所拥有的原始智能。 直接用个人数据对这类模型进行微调,虽然可能在风格上模仿用户的写作,但生成内容的质量会很差。

要实现高质量的个人机器人,需要更复杂的流程,这在很大程度上仍属于前沿研究领域:

  1. 首先,获取原始个人数据。
  2. 在此基础上进行大量的合成数据生成与重写。
  3. 在一个性能顶尖的开源大语言模型上进行微调。
  4. 在微调过程中,可能还需要混合大量的预训练数据,以防止模型"遗忘"其原有的通用能力(即灾难性遗忘)。

对于非研究用途,Karpathy 推荐的替代方案是使用如 NotebookLM 这样的工具,它通过检索增强生成(RAG)技术来处理个人数据。 在此模式下,数据作为上下文被输入模型,但并不改变模型的权重。因此,模型并非真正地"了解"你,但这可能是当前最容易实现的方案。

相关链接

GitHub 仓库地址: https://github.com/karpathy/nanochat
更详细的技术介绍: https://github.com/karpathy/nanochat/discussions/1

相关推荐
神码小Z13 小时前
特斯拉前AI总监开源的一款“小型本地版ChatGPT”,普通家用电脑就能运行!
人工智能·chatgpt
mit6.82414 小时前
[tile-lang] 张量核心 | 传统MMA->WGMMA | 底层自动选择优化
人工智能·chatgpt
AI拉呱_16 小时前
第144期《2025年AI现状报告》解读(二):产业篇
人工智能·chatgpt
哪吒编程2 天前
谁是最强编程大模型?横向对比GPT-5、GPT-5 Codex、Claude Sonnet 4.5、Gemini 2.5 Pro
gpt·chatgpt·claude
许泽宇的技术分享2 天前
百刀打造ChatGPT:nanochat极简LLM全栈实现深度解析
chatgpt·transformer·大语言模型·nanochat
算家计算2 天前
AI大神100美元手搓ChatGPT!nanochat教程爆火,4小时炼成聊天机器人
人工智能·chatgpt·资讯
陈敬雷-充电了么-CEO兼CTO4 天前
DeepSeek vs ChatGPT 技术架构、成本与场景全解析
人工智能·chatgpt·架构
siliconstorm.ai5 天前
阿里下场造“机器人”:从通义千问到具身智能,中国AI正走向“实体化”阶段
人工智能·自然语言处理·chatgpt·机器人·云计算
聚客AI5 天前
系统提示的“消亡”?上下文工程正在重新定义人机交互规则
图像处理·人工智能·pytorch·语言模型·自然语言处理·chatgpt·gpt-3