100美元、8000行代码手搓ChatGPT,Karpathy最新开源项目爆火,一夜近5k star
来源:36kr 18 小时前

「这是我写过最疯狂的代码之一。」

本周一,AI 领域大神 Andrej Karpathy 发布了自己的最新开源项目,瞬间引来了整个社区的关注。

这个名为 nanochat 的项目据说可以教你从零开始,以 100 美元的成本自建 ChatGPT。它覆盖 LLM 的训练和推理,只要跟着学就可以了解构建大模型的所有步骤了。

总共是 8000 行代码,在 GitHub 上放出不到 12 个小时,star 量就已经超过 4500:

GitHub 链接:https://github.com/karpathy/nanochat

与 Karpathy 之前发布的 nanoGPT 仓库(只覆盖了预训练阶段)不同,nanochat 是一个从零开始实现的、极简但完整的 ChatGPT 克隆版训练 / 推理全流程项目,所有内容都集中在一个依赖极少、结构干净的代码库中

你只需要启动一台云 GPU 机器,运行一个脚本,大约 4 小时后就可以在 ChatGPT 风格的 Web 界面里和你自己的 LLM 聊天。

仓库大约8,000 行代码,但已经实现了以下全部功能:

使用全新的 Rust 实现训练分词器。

在 FineWeb 数据集上预训练 Transformer LLM,并在多个指标上评估 CORE 分数。

Mid-train 阶段训练 SmolTalk 的用户 - 助手对话、多选问答、工具使用等数据。

SFT 微调,并评估模型在世界知识类多选题(ARC-E/C、MMLU)、数学(GSM8K)、代码(HumanEval)上的表现。

可选:使用 GRPO 在 GSM8K 上进行 RL 强化训练。

高效推理引擎,支持 KV Cache、prefill/decode 推理、工具调用(轻量沙箱中的 Python 解释器),可通过 CLI 或 ChatGPT 风格 WebUI 交互。

自动生成 Markdown 评分报告卡,总结与游戏化展示整个训练过程。

Karpathy 表示,只花约 100 美元成本(8×H100 上 4 小时训练),你就能训练一个「能聊的」迷你 ChatGPT,可以写故事 / 诗歌、回答简单问题。大约 12 小时训练即可超过 GPT-2 的 CORE 指标。

如果进一步扩展到 1000 美元预算(训练 41.6 小时),模型连贯性会快速提升,能解决基础数学 / 代码任务,并通过一些多选测试。例如,一个 30 层深度、训练 24 小时的模型(相当于 GPT-3 Small 125M 的 FLOPs,约为 GPT-3 的 1/1000 规模)即可在 MMLU 拿到 40+ 分、ARC-Easy 70+ 分、GSM8K 20+ 分 等。

Karpathy 的目标是把一整套「强势基线」能力完整地打包进一个结构统一、可读性强、易于 hack、方便 fork 的仓库中。nanochat 将会是 LLM101n 课程的压轴项目(课程仍在开发中)。

Karpathy 认为 nanochat 也有潜力像 nanoGPT 一样,逐渐成长为一个 研究平台或标准基准。它现在还远未算完美,也没有特别调优或性能优化(他认为很接近了)。不过,整体框架已经成型,因而适合放到 GitHub 上,让社区协同迭代改进每个模块。

使用 WebUI 与价值 100 美元、耗时 4 小时的 nanochat 进行的示例对话。

下图是 Karpathy 这次 100 美元快速训练(speedrun)示例在报告中产出的一些指标摘要。

这样看来,构建一个具备聊天功能的大模型是如此的简单且低成本,并且有了 Karpathy 成熟的开源代码支持,那我们创建一个属于自己的个人化的模型来辅助工作可行吗?

有网友提出了大家都会关心的问题:

但 Karpathy 却对这类应用破了一盆冷水,他认为这不是一个适合个性化目的的代码。

Karpathy 认为,应该把这个微型模型更多地看作是非常年幼的孩子,并没有那么强大的原始智能。如果你在自己的数据上微调 / 训练它,你可能会得到一些有趣的鹦鹉学舌效果,感觉像是你在风格上写作,但它会一团糟。

要实现个性化模型的效果,大致需要这样几个步骤:

准备原始数据

在此基础上进行大量的合成数据生成和重写(复杂、不明显、需要研究)

用这些数据去微调一个当前较强的开源大模型(比如 tinker )

微调时还可能需要混入大量预训练数据,以避免模型丢失太多通用智能能力

可以说,要真正把这个方案跑得效果好,现在还是偏科研的事情。

更多详细技术介绍与分步构建示例请参阅以下链接:

https://github.com/karpathy/nanochat/discussions/1

简体中文 English