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

相关推荐
Geo_V11 小时前
OpenAI 大模型 API 使用示例
python·chatgpt·openai·大模型应用·llm 开发
福大大架构师每日一题11 小时前
⽬前 主流的开源模型体系 有哪些?
chatgpt·开源
Imency1 天前
win10本地部署weknora记录
人工智能·chatgpt
CV-杨帆2 天前
博客阅读:chatgpt 2025 GPT-5 Jailbreak with Echo Chamber and Storytelling
gpt·chatgpt
西西阿西哥2 天前
【随便聊聊】和ChatGPT聊聊潜空间
深度学习·chatgpt
FreeBuf_4 天前
新型Agent感知伪装技术利用OpenAI ChatGPT Atlas浏览器传播虚假内容
人工智能·chatgpt
GPT-Mirrors6 天前
通知:大可Ai镜像版更名为 GPT-Mirrors
人工智能·ai·chatgpt
AI大模型学徒6 天前
Chatbox 安装 for Windows
windows·语言模型·chatgpt
AmazingKO6 天前
推送报错403怎么办?vscode推送项目到github
chatgpt·github·visual studio code·竹相左边
丁学文武6 天前
如何把ChatGPT嵌入到自己的应用中?
人工智能·chatgpt·编码·大模型应用·ai替代