当前位置: 首页 > news >正文

Andrej Karpathy 发布新项目 nanochat:一个从零开始构建的极简全栈式 ChatGPT 克隆

nanochat

刚刚,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

http://www.dtcms.com/a/481869.html

相关文章:

  • 苍穹外卖[操作步骤+讲解]
  • 用vs2008做网站教程成都旅游景点排名前十
  • 悟空 AI CRM 的回款功能:加速资金回流,保障企业财务健康
  • 奥威BI金蝶数据分析可视化方案:200+开箱即用报表驱动智能决策
  • 盲盒小程序系统开发:未来趋势与长期价值
  • 查找成绩(数组实现)
  • 桃城区网站制作公司做网站注册商标
  • RCE 漏洞全解析:从原理到实战
  • VScode无法获取扩展 Error while fetching extensions.Failed to fetch
  • 用 Docker + Squoosh 打造图片压缩 API 服务
  • 仙桃网站设计公司易拉罐手工制作大全
  • 企业级DevOps选型新思维:从“工具堆砌”到“平台赋能”
  • ThinkPHP8集成RabbitMQ的完整案例实现 原创
  • 一份关于语言模型对齐的技术论述:从基于PPO的RLHF到直接偏好优化
  • 扬州市建设厅网站网站空间在哪里
  • 开源 C++ QT QML 开发(十九)多媒体--音频录制
  • json转excel python
  • 在传输数据时,网络中会出现的问题
  • jenkins在使用中遇到的问题
  • 第8章 zynq uboot更新系统镜像并引导启动和个人心得
  • 网站系统升级建设合同汽车之家官网首页网页
  • 电销外包公司有哪些seo学习网站
  • 基于弱监督病灶增强的模型展开式快速磁共振成像|文献速递-文献分享
  • 十四、OpenCV中的形态学操作
  • 算法279. 完全平方数
  • Prometheus pushgateway学习
  • MySQL索引结构:B树与B+树
  • 进程的基本认识
  • Webpack 打包优化与骨架屏结合:双管齐下提升前端性能与用户体验
  • 鸿蒙:在沙箱目录下压缩或解压文件