文|金鹿
编辑|博阳
10 月 14 日凌晨,AI 领域知名专家安德烈 · 卡帕西(Andrej Karpathy)发布了名为 "nanochat" 的新开源项目,他形容这是自己写过的 " 最不受约束 " 的疯狂项目之一。
与早期仅涵盖预训练的 nanoGPT 不同,新的 nanochat 是一个极简的、从零开始的全栈训练 / 推理流程,通过依赖项最少的单一代码库实现了一个简易版 ChatGPT 的完整构建。
nanochat 的使用流程非常简单:你只需要租用云 GPU 服务器,运行单个脚本,最快 4 小时后就能在类似 ChatGPT 的网页界面中与自己训练的大语言模型(LLM)对话。
nanochat 是什么?
从卡帕西提供的原理来看,Nanochat 打包了从零开始制造一个 Chatbot 所需的所有步骤和工具,这其中包括:
1. 数据准备 : 从原始网络文本(如 FineWeb 数据集)开始,创建分词器(tokenizer),把海量文本变成模型能理解的数字。
2. 模型预训练 : 在大规模数据上训练一个基础的 Transformer 模型,让它学习语言的语法、事实和基本推理能力。这是最耗时、最核心的一步。
3. 对齐微调 :
a. 指令微调 : 使用高质量的问答、对话数据,教模型如何像一个助手一样遵循指令、与人对话。
b. 强化学习 : (可选阶段)通过奖励和惩罚,进一步提升模型在特定任务(如数学解题)上的表现。
4. 模型推理 : 提供了一个高效的引擎,让你可以在命令行或一个类似 ChatGPT 的网页界面中,与你亲手训练出来的模型进行实时对话。
5. 评估 ( 训练完成后,系统会自动生成一份详细的 " 成绩单 "(报告),展示模型在多个标准测试(如数学、代码、常识推理)上的表现。
Karpathy 之前的nanoGPT项目主要关注第 2 步:模型预训练。它是一个极简的 GPT 模型训练代码,目的是为了教学,让大家理解大模型是怎么训练出来的。
而nanochat则是一个全栈(Full-Stack)项目,它不仅包含了 nanoGPT 的预训练部分,还补全了之后的所有关键步骤(指令微调、强化学习、推理、UI 界面),最终交付一个可以实际对话的聊天机器人。
而实现这一切,只靠着卡帕西手敲的 8000 行代码。
卡帕西做这个 nanochat 的意义是什么呢?
首先是教育和学习,它是目前理解 " 如何从零构建一个 ChatGPT" 的最佳学习资料。它让普通开发者和研究者有机会用相对低廉的成本亲手 " 烹饪 " 出一个属于自己的小型聊天模型,并完整地体验从一堆原始文本到一个智能对话助手的全过程。
其次是提供一个研究和实验平台。 为研究人员提供了一个轻量级、可控、可复现的实验平台。他们可以在这个框架上快速测试新的模型架构、训练方法或对齐技术,而不必动用昂贵的大规模计算资源。
最后,X 上的网友还发掘了它的新可能,他认为这套系统完全可以成为硬件评估的新基准。
这真是太棒了。这应该成为硬件评估的新基准——我们只需报告一个有序三元组:
● 端到端训练总成本(美元)
● 端到端训练总耗时(分钟)
● 在特定测试集上的综合性能表现
而且整个过程都具备高度可复现性。
100 美元,从头训练一个 AI
那这个 Nanochat 到底能多省钱?
● 仅需约 100 美元(在 8XH100 节点上训练约 4 小时),你就能训练出一个小型 ChatGPT 克隆版,可以进行基本对话,创作故事诗歌,回答简单问题
(在网页界面中,显示的是一个耗时 4 小时、花费 100 美元的 nanochat 模型进行对话。已经可以写诗了。)
(nanochat 报告卡片中展示了这次 100 美元 " 速通 " 训练所生成的部分总结性指标。整体效果很不错。)
● 训练约 12 小时即可在 CORE 指标上超越 GPT-2
● 如果将预算提升到约 1000 美元(训练 41.6 小时),模型会变得更加连贯,能够解决简单的数学和编程问题,并通过多项选择题测试。例如,一个深度为 30 的模型经过 24 小时训练(计算量相当于 GPT-3 Small 125M 或 GPT-3 的 1/1000),在 MMLU 上能达到 40 多分,在 ARC-Easy 上达到 70 多分,在 GSM8K 上达到 20 多分。
卡帕西亲自揭秘背后技术
在 X 平台上,卡帕西和网友展开问答对话,公开了 nanochat 的幕后开发详情和相关技术。
以下为问答精选:
问:这个模型的训练 / 基础架构是基于什么样的模型设计?
卡帕西:nanochat 的模型架构基本上与 Meta Llama 模型类似,但进行了一些简化,并吸收了一些来自其改进版 modded-nanoGPT 项目的设计思路。其目标是为此类规模的模型建立一个 " 稳健的基线 "。
主要架构特征包括:
● Dense Transformer(稠密模型 Transformer)
● Rotary Embeddings(旋转位置编码),无显式位置嵌入(positional embeddings)
● QK Norm(对 Query 和 Key 向量进行归一化)
● Embedding 与 Unembedding 权重不共享(untied weights)
● 在 Token Embedding 之后进行归一化处理
● MLP 使用 ReLU² 激活函数
● RMSNorm 中无可学习参数
● 线性层中无偏置项(bias-free linear layers)
● 采用多查询注意力机制(Multi-Query Attention, MQA)
● 输出层使用 Logit Softcap 技术
● 优化器采用的是 Muon + AdamW 组合,这很大程度上受到了 modded-nanoGPT 的影响。卡帕西提到,他计划未来通过精心调整 Adam 优化器每个模块的学习率来尝试移除 Muon,但目前这项工作尚未完成。
问:我是否可以用自己的数据来训练它?比如我所有的 Notion 笔记、健康数据,以及和其他大模型的对话记录?就像打造一个真正懂我的个人聊天机器人?
卡帕西:我觉得这个代码库并不适合这个用途。你可以把这些微型模型想象成幼龄儿童(比如幼儿园阶段),它们确实不具备那些大型模型的原生智力。如果你用自己的数据对它进行微调 / 训练,可能会得到一些看似模仿你文风的有趣回应,但最终效果会显得很粗糙。
要实现你期待的效果,可能需要这样的流程:先整理原始数据,在此基础上进行大量合成数据重写(这步骤很棘手,不确定性高,属于研究范畴),然后选用顶尖开源大模型进行微调。过程中可能还需要混合大量预训练数据,以免在微调过程中损失模型原有的智能水平。
因此,说实话,要让这套流程完美运作至今仍属于前沿研究领域。
目前最可行的非技术方案,是把所有资料导入 NotebookLM 这类工具,它可通过 RAG 技术(即分块检索参考)处理你的数据。你的信息会通过上下文窗口传递给模型,但不会改变模型本身的权重。虽然模型不会真正 " 认识你 ",但这可能是当前最容易实现的近似方案了。
问:这些代码有多少是你手写的?
卡帕西:代码基本上全是手写的(配合 Tab 键自动补全)。我尝试过几次使用 Claude/Codex 这类 AI 编程助手,但效果完全不行,总体上反而帮不上忙。可能我的代码库风格太偏离它们训练数据的风格了。
登录后才可以发布评论哦
打开小程序可以发布评论哦