> 自媒体 > (AI)人工智能 > 卡帕西8000行代码手搓ChatGPT,成本仅100美元,训练12小时CORE表现超越GPT-2,手把手教程来了
卡帕西8000行代码手搓ChatGPT,成本仅100美元,训练12小时CORE表现超越GPT-2,手把手教程来了
来源:36氪
2025-10-16 08:14:34
220
管理

100美元成本、8000行代码纯手搓克隆ChatGPT!

特斯拉前AI总监、OpenAI创始成员、宣布全职搞教育的AI大神Andrej Karpathy(卡帕西)沉寂了好久,终于终于终于来上新课了!

新作nanochat,被其本人称作是写得最“精神错乱”放飞自我的作品之一。

它是一个极简的、从零开始构建的全栈训练/推理pipeline,用最少量依赖的单一代码库实现了简易版ChatGPT。

只要你启动一台云GPU服务器,运行一个脚本,最快只要4小时,就能在类似ChatGPT的网页界面与自己训练的大语言模型对话。

训练约12小时后,模型在CORE指标上的表现即可超越GPT-2。

若进一步将成本提升至约1000美元(训练约41.6小时),模型表现显著提升,能解决简单的数学/代码问题,还能做多项选择题。

举个具体的例子:一个深度为30的模型训练24小时后(相当于GPT-3 Small 125M的算力消耗,仅为GPT-3的千分之一),在MMLU数据集上可达到40多分,在ARC-Easy数据集上达70多分,在GSM8K数据集上达20多分。

卡帕西表示,他的目标是将这套完整的“强基线”技术栈整合为统一、极简、易读、可修改、易分发的代码库。

nanochat将成为LLM101n课程的压轴项目(该课程仍在开发中)。

我认为它还有潜力发展为一个研究工具框架或基准测试的工具,就像之前的nanoGPT一样。目前该项目远未完全优化(实际上存在大量可改进空间),但整体框架已足够完整,可以发布到GitHub上,后续所有模块都能在社区中进一步优化。

等来新作的网友也已彻底疯狂。项目刚发出来,GitHub Star数已飙到4.8k:

话不多说,下面来看nanochat快速上手的详细指南。

100美元成本,能捏出的最好的ChatGPT

从比如Lambda GPU Cloud上启动了一台8卡H100的服务器,每小时要花大约24美元,所以接下来得争分夺秒了。

环境搭建

克隆项目:

目标是用100美元的成本训练出一个最好的类ChatGPT模型,称之为一次“速通(speedrun)”,可参考speedrun.sh这个脚本,它被设计成能在一台全新的服务器上直接从头到尾运行。

但接下来,卡帕西会逐步讲解其中的每一步。

首先需要确保安装了当下热门的uv项目管理器。安装uv,在.venv目录下创建一个新的虚拟环境,获取所有依赖项,然后激活该环境,这样当输入python时,使用的是虚拟环境中的Python,而不是系统自带的Python:

接下来,需要安装Rust/Cargo,以便编译自定义的Rust分词器。引入一个全新/自定义的分词器确实有点折腾,但遗憾的是,卡帕西觉得早期minbpe项目中的Python版本速度太慢,而huggingface的分词器又过于臃肿且令人困惑。

因此要专门为训练打造了自己的新分词器(经测试与Python版本效果一致),不过在推理时仍会使用OpenAI的tiktoken来保证效率。

现在就开始编译分词器吧:

训练分词器

接下来,需要获取预训练数据,这样才能:1)训练分词器;2)对模型进行预训练。

预训练数据就是大量网页的文本内容,这里将使用FineWeb-EDU数据集。

通常来说,可以直接用huggingface datasets.load_dataset,但卡帕西不喜欢它过于臃肿笨重且掩盖了本应简单的逻辑,所以把整个数据集重新打包成了简单、完全打乱的分片,这样就能轻松高效地随意访问,并且把它的sample-100B版本重新上传为karpathy/fineweb-edu-100b-shuffle。

在这个页面上,你还可以预览数据集中的示例文本。每个分片是一个约0.25M个字符的简单parquet文件,压缩后(gzip格式)在磁盘上大约占100MB。总共有1822个分片,但训练深度为20的模型只需要其中240个。

现在就开始下载所有数据吧。虽然需要下载约24GB,但在云服务器上通常速度很快:

默认情况下,所有这些都会被下载到~/.cache/nanochat目录下。

下载完成后,开始训练分词器——它负责在字符串与符号码本(codebook)序列之间进行双向转换。默认情况下,训练的词汇表大小是2¹⁶= 65,536个tokens(这是个不错的数字),其中部分tokens会被保留作为特殊tokens(供后续聊天模式使用)。训练集包含2B字符,训练仅需约1分钟。

训练算法与OpenAI使用的完全一致(regex splitting, byte-level BPE)。想了解更多信息,可以看卡帕西关于tokenization技术的视频讲解。

训练完成后可以评估这个分词器:

评估结果显示,实现了约4.8的压缩比(即原始文本中平均4.8个字符压缩为1个token),还可以看到与GPT-2、GPT-4分词器的对比结果。

相比GPT-2(拥有50257个tokens),在压缩文本方面全面更优,仅在数学内容上稍逊一筹:

尽管如此,即使在词汇量较小的条件下,我们在FineWeb数据集上仍以微弱优势超越了GPT-4——因为这正是我们训练所用的数据集,所以我们的分词器能完美契合该文档分布(例如在英语文本压缩方面可能更具优势)。

预训练

在启动预训练之前,需要下载另一个被卡帕西称之为“评估包(eval bundle)”的文件。

在预训练过程中,脚本会定期评估CORE指标。你可以在DCLM论文中看到一些细节,本质上,它是一个很好的、标准化的、宽泛的指标,用于衡量模型在大量自动补全数据集上的表现好坏。

这些数据集包括HellaSwag、jeopardy、bigbench QA wikidata、ARC-Easy/Challenge、copa、commonsense qa、piqa、lambada、winograd、boolq等等(共22个)。

下载、解压该评估包,并将评估包目录放置到基础目录~/.cache/nanochat/eval_bundle下:

还建议(尽管这是可选的)再做一项设置:

配置wandb,以便在训练过程中查看美观的图表。前面uv已经安装好了wandb,但你仍需创建账户并登录:

现在我们可以启动预训练了!这是计算量最大的部分,要训练大语言模型(LLM),通过预测序列中的下一个token来压缩互联网网页文本,在此过程中,大语言模型会获取大量关于世界的知识:

在这里,通过scripts/base_train.py脚本在8块GPU上启动训练。我们正在训练一个有20层的Transformer。默认情况下,每块GPU在每次前向/反向传播时处理32行、每行2048个tokens的数据,优化器每一步总共处理32×2048=2¹⁹=524,288≈0.5M个tokens。

如果已经设置好了wandb,可以添加—run=speedrun(所有训练脚本都支持该参数)来设置运行名称并记录相关数据。

当你启动训练后,会看到类似这样的输出(为简洁起见,省略了大量内容):

随着时间的推移,bpb下降是好的迹象(说明模型能更准确地预测下一个token)。此外,CORE分数在上升。

除了这些近似的指标,还可以更全面地评估模型:

可以看到,训练集/验证集的bpb达到了约0.81,CORE指标上升到了0.22。

作为对比,评估包中包含了GPT-2模型的CORE分数。具体来说,0.22的CORE分数略高于GPT-2 large(0.21),但略低于GPT-2 xl(即“标准”的GPT-2,为0.26)。

此时,这个模型就像一个高级的自动补全工具,所以我们可以运行一些提示词,来感受模型中存储的知识。base_loss.py文件会运行这些提示词。这些提示词包括:

补全后的文本如下:

所以,模型知道巴黎是法国的首都、Au代表金、星期六在星期五之后、“冷”是“热”的反义词,甚至还知道太阳系的行星。

不过,它对天空的颜色还不太确定,也不太会做简单的数学题。

对于一个花费72美元训练出来的模型来说,已经不算太差了。推理过程使用了一个自定义的Engine class,利用KV缓存来实现高效推理,同时还简单实现了两种常见的推理阶段:预填充和解码。

我们的Engine class还支持工具使用(比如Python解释器),这在GSM8K数据集上训练时会很有用(之后会详细介绍)。

训练中期

接下来是中期训练,这一步会在smol-SmolTalk数据集上进一步微调模型。

算法层面和预训练完全一致,但数据集变成了对话内容,而且模型会去适应那些用于构建多轮对话结构的新特殊token。现在,每次对话大致是这样的,大致遵循OpenAI的Harmony聊天格式:

像这样显示的token是特殊token,遵循OpenAI特殊token的格式。中期训练阶段对模型的多种适配非常有用:

模型学习与多轮对话相关的特殊token (除了用于分隔文档的token,基础模型预训练期间没有这些token) 。

模型适应对话的数据分布,而非互联网文档的数据分布。

对我们来说非常重要的一点是,必须教会模型做多项选择题,因为在这么小的模型规模下,模型无法从随机的互联网数据中学会这一点。具体而言,模型必须学会将几个选项与几个字母 (如ABCD) 关联起来,然后输出正确选项的算法。通过混合10万道来自MMLU辅助训练集的多项选择题来实现这一点。需要明确的是,问题不在于模型没有相关知识,而在于它不理解多项选择题的运作方式,无法将知识展现出来。这很重要,因为许多常见的模型评估 (如MMLU) 都采用多项选择题的形式。

你可以教会模型使用各种工具。对我们来说,需要通过在特殊token 和之间放入Python命令,来教会模型使用Python解释器。这对之后解决GSM8K问题会很有用。

在中期训练期间,你还可以针对许多其他适配进行训练,例如上下文长度扩展 (尚未探索) 。

中期训练混合数据默认是这样的:

然后按如下方式启动它:

这次运行只需要大约8分钟,比预训练的约3小时短得多。现在,模型已经是一个真正的聊天模型,能够扮演助手的角色回答用户的问题,可以对其进行评估:

得到了该阶段模型的以下结果:

监督微调

中期训练之后是监督微调(SFT)阶段。

这是在对话数据上额外进行的一轮微调,理想情况下,你会精心挑选最优质的好数据,而且也会在这里进行安全训练(比如助手拒绝不当请求的训练)。

我们的模型甚至连天空的颜色都还不确定,所以目前在生物危害这类问题上可能还是安全的。这里会进行的一项领域适配是,SFT会拉伸数据行并对其进行填充,完全模拟测试时的格式。

换句话说,示例不再像预训练/中期训练时那样为了训练效率而被随机拼接成长行。修正这种领域不匹配的问题,是另一个小小的“拧紧螺丝”式的提升。我们可以运行SFT并重新评估:

这个过程同样只需运行约7分钟,你应该能观察到各项指标均有小幅提升:

成绩

最后卡帕西指出的是项目文件夹里出现的report.md文件。它包含了很多与运行相关的细节,最后还有一个不错的总结表格:

Characters:333,989

Lines:8,304

Files:44

Tokens(approx):83,497

Dependencies(uv.lock lines):2,004

今天的不少学者和创业者,都是跟着他入门的。

卡帕西对教育的热情,甚至可以追溯到学生时期在网上教大家玩魔方。

去年7月,从OpenAI离职的卡帕西突然官宣创业,搞了一家AI原生的新型学校——Eureka Labs。

怎么理解AI原生?

想象一下与费曼一起学习高质量教材,费曼会在每一步中1对1指导你。

不幸的是,即使每个学科都能找到一位像费曼这样的大师,他们也无法分身亲自辅导地球上的80亿人。

但AI可以,而且AI有无限的耐心,精通世界上所有的语言。

所以卡帕西要打造“教师 人工智能的共生”,可以在一个通用平台上运行整个课程。

如果我们成功了,任何人都将易于学习任何东西,扩大教育这个概念本身的“范围”和“程度”。

Eureka Labs首个产品,也是首门课程LLM101n。

手把手带你构建一个类似ChatGPT的故事生成大模型,以及配套的Web应用程序。

GitHub repo:https://github.com/karpathy/nanochat

详细指南:https://github.com/karpathy/nanochat/discussions/1

参考链接:https://x.com/karpathy/status/1977755427569111362

本文来自微信公众号“量子位”,作者:西风,36氪经授权发布。

0
点赞
赏礼
赏钱
0
收藏
免责声明:本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本网证实,对本文以及其中全部或者 部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。 凡本网注明 “来源:XXX(非本站)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对 其真实性负责。 如因作品内容、版权和其它问题需要同本网联系的,请在一周内进行,以便我们及时处理。 QQ:617470285 邮箱:617470285@qq.com
相关文章
三菱退出中国?官方回应:将与现有伙伴继续合作
6月23日,有媒体报道称,三菱汽车将逐步取消包括欧洲、中国在内的市场业..
2026款三菱帕杰罗曝光,第二代超选四驱+2.4T/2.0T双动力..
硬派越野圈的“老将”居然换小排量了?2026款三菱帕杰罗刚露出消息,就把..
恩智浦计划退出5G功率放大器业务;三星或将退出SATA SSD市场;三菱化学出售..
五分钟了解产业大事每日头条芯闻 恩智浦计划退出5G功率放大器业务我国首..
实拍三菱全新欧蓝德!搭1.5T四缸,内饰配大屏,不比奇骏香?..
在重庆车展上,全新一代三菱欧蓝德终于在国内亮相了,相比其国外的发布时..
试驾广汽三菱奕歌:小巧灵动
■ 阅车试驾车型:广汽三菱奕歌长/宽/高(mm):4405/1805/1685轴距(mm..
新车 | 四驱越野MPV/配侧滑门/2.2T柴油机,新款三菱Delica D:5亮相..
文:懂车帝原创 高帅鹏[懂车帝原创 产品] 日前,2025东京车展开幕,新款..
三菱集团的传奇发家史
“三菱”两个字,在日本就像一把瑞士军刀:银行、飞机、汽车、火箭、寿司..
2026款三菱Montero曝光,S-AWC四驱+差速锁全配,普拉多见了..
当 “普拉多见了都得慌” 的话题在越野圈炸锅,2026 款三菱 Montero 的曝..
日韩巨擘数据,三星2.1万亿三菱21万亿,中国第一谁?..
图片来源于网络2025年,让人火大的资本较量又来一波。韩国三星手里握着2...
关于作者
聚焦每日新资..(普通会员)
文章
1721
关注
0
粉丝
0
点击领取今天的签到奖励!
签到排行

成员 网址收录40418 企业收录2986 印章生成263572 电子证书1157 电子名片68 自媒体91237

@2022 All Rights Reserved 浙ICP备19035174号-7
0
0
分享
请选择要切换的马甲:

个人中心

每日签到

我的消息

内容搜索