当前位置:首页 > 科技资讯 > 正文

Andrej Karpathy开源nanochat:极简ChatGPT复现工具链,低成本训练模型引热议

“这是我创作过的最疯狂的项目之一。”近日,特斯拉前AI总监、OpenAI联合创始人安德烈·卡帕西推出了他的最新开源项目——nanochat。这个存储库在GitHub上迅速走红,目前已获得超过7.9k星标,卡帕西本人形容其为“精神错乱之作”。

GitHub仓库地址:https://github.com/karpathy/nanochat

据悉,与卡帕西之前仅支持预训练的nanoGPT不同,nanochat是一个从零构建的极简全流程训练和推理工具链,可用于搭建简易版ChatGPT模型。整个代码库仅包含一个文件,依赖项极少,设计简洁明了。

仅需100美元和半天时间,训练模型超越GPT-2性能

卡帕西在公告中称nanochat为“100美元能买到的最好的ChatGPT”。用户只需启动一台云GPU服务器,运行一个脚本,最快4小时后,就能在类ChatGPT的网页界面上与自行训练的大语言模型(LLM)对话。

具体而言,该项目支持以下功能:

  • 基于Rust语言实现训练分词器(tokenizer)
  • 在FineWeb数据集上对Transformer架构大语言模型进行预训练,并通过多项指标评估CORE得分
  • 在SmolTalk用户-助手对话数据集、多项选择题数据集和工具使用数据集上进行中期训练(Midtrain)
  • 对聊天模型进行指令微调(SFT),并在世界知识多项选择题(ARC-E/C、MMLU)、数学题(GSM8K)和代码任务(HumanEval)上评估性能
  • 可选通过“GRPO”算法在GSM8K数据集上进行强化学习(RL)训练
  • 在带KV缓存的推理引擎中实现高效推理,支持预填充/解码流程、工具使用(轻量级沙箱中的Python解释器),可通过命令行界面(CLI)或类ChatGPT网页界面(WebUI)交互
  • 自动生成Markdown格式“报告卡”,总结项目流程并以“游戏化”方式呈现指标

据卡帕西介绍,即使成本低至约100美元(在8卡H100节点上训练约4小时),也能用nanochat训练出可对话的简易版ChatGPT复现模型,它能创作故事、诗歌并回答简单问题。训练约12小时后,模型性能即可在CORE指标上超越GPT-2。

Andrej Karpathy开源nanochat:极简ChatGPT复现工具链,低成本训练模型引热议 nanochat  ChatGPT复现 机器学习工具 开源AI项目 第1张

在GitHub上,卡帕西详细讲解了用100美元“极速训练”出最优ChatGPT模型的过程。

详细技术步骤:https://github.com/karpathy/nanochat/discussions/1

若将成本提升至约1000美元(训练约41.6小时),模型的连贯性会显著增强,能够解决简单数学题、代码任务并完成多项选择题测试。例如,一个深度为30的模型训练24小时后(其计算量FLOPs与GPT-3 Small(12.5亿参数)相当,仅为GPT-3的1/1000),在MMLU数据集上可取得40多分,在ARC-Easy数据集上可取得70多分,在GSM8K数据集上可取得20多分。

Andrej Karpathy开源nanochat:极简ChatGPT复现工具链,低成本训练模型引热议 nanochat  ChatGPT复现 机器学习工具 开源AI项目 第2张

卡帕西的目标是将这套完整的“强基准”工具链整合到一个逻辑连贯、极简、易读、可修改性强且极适合分支开发(forkable)的代码仓库中。他表示:“nanochat将成为LLM101n课程(目前仍在开发中)的核心项目。我认为它还有潜力发展成一个研究工具框架或基准测试工具,就像之前的nanoGPT一样。”

据透露,该项目目前并非最终版本,既未完成全面调优,也未进行性能优化,但整体框架已足够完善,可以发布到GitHub上,后续所有模块都可在社区中进一步改进。卡帕西还称,nanochat其实有不少容易实现的优化点。

纯手写约8000行代码,AI辅助工具“帮不上忙”

整个项目仅有约8000行代码,但卡帕西强调“代码结构相当清晰”。这个代码仓库基本完全由卡帕西手写完成,仅使用了Tab键自动补全功能。

“我之前试过几次用Claude或Codex的Agent来辅助,但效果都特别差,到头来反而帮不上忙;可能是因为这个仓库的代码风格和功能,跟这些工具训练数据里的常规代码偏差太大了吧。”卡帕西解释道。

谈及nanochat的模型架构,卡帕西介绍,整体类似Llama模型,但结构更简洁,同时借鉴了modded-nanoGPT(改进版nanoGPT)的部分设计思路。他尝试为该规模模型确定一个可靠基准架构,具体包括:

  • 稠密Transformer(无稀疏结构)
  • 旋转位置编码(Rotary Embeddings),不使用其他位置编码
  • QK归一化(QK Norm,对查询向量Q和键向量K进行归一化)
  • 嵌入层(embedding)与解嵌入层(unembedding)权重不共享
  • 对词元嵌入(token embedding)结果进行归一化
  • 多层感知机(MLP)中使用relu平方(relu²)激活函数
  • 根均方归一化(RMSNorm)中不包含可学习参数
  • 线性层(linear layers)中不使用偏置项(biases)
  • 多查询注意力(Multi-Query Attention, MQA)
  • 对数概率软截断(logit softcap,限制logit数值范围以稳定训练)

nanochat的优化器采用Muon+AdamW组合,该设计很大程度上参考了modded-nanoGPT。据悉,卡帕西目前有一个待办项:尝试通过优化Adam的学习率(例如为不同模块设置专属学习率)来移除对Muon的依赖,但他尚未投入足够精力处理此事。

网友热议:获封“机器学习工程师”头衔

除了GitHub,nanochat在社交平台上也引发高度关注。

一位网友表示:“一直喜欢Nano系列项目!这套极简的端到端训练/推理工具链,一定会给众多机器学习学习者和科研人员带来深远影响。”

也有网友指出:“对我个人而言,这个代码仓库是一份超棒的未来学习资料——不管是理解基于Rust的底层深度学习实现,还是更基础的Python深度学习开发,都很有帮助。”同时,他质疑道:“如果现在每个人都能借助这个仓库,用最少精力训练出自己的大语言模型(LLM),那Anthropic、OpenAI这类公司的技术优势不就被削弱了吗?毕竟市面上有很多优秀工程师,只要有足够资源,他们完全有可能训练出更强大的大语言模型。”

还有人评论:“我认为这个代码仓库最大的受众是科研人员。很多人可能都有改进大语言模型(LLM)的想法,但要把想法落地成完整实现,不仅需要投入大量精力,最终效果还充满不确定性。而现在,我们有了这样一套现成的工具流程,大家可以直接用它来做实验。以前只是‘如果能这样做会怎么样?’的空想,现在变成了‘我下周末就能试着把这个想法实现出来’的切实行动。”

甚至有网友玩笑道:“跑完这个项目后,我肯定要在简历上加上‘机器学习工程师’这个头衔。”

参考链接:

https://x.com/karpathy/status/1977755427569111362

https://github.com/karpathy/nanochat