OpenAI创始成员发布开源项目nanochat,仅需100美元就能实现类ChatGPT
创始成员发布开源项目,仅需100美元就能实现类
电子产品世界2025.10.1612:37

曾身为AI团队负责人、创始成员的安德烈·卡帕西, 公布重大项目。所涉项目是一个极为精简可实则完成的「从头进行构架创建」运作框架并且仅需大概100美元那般一小笔款项之数、会于不够4小时这么短的时间范围内达成完整的类似训练进程, 当中涵盖了诸如预先训练、精细调试(SFT)以及实施强化学习(RL)等内容。
讲此为他所撰写过的最为疯狂的项目当中的一个, 恰似每个人都能够自行拥有一个专属的, 需要留意的是, 这个项目基本上是全然手写而成的。
和早期情形不一样, 它不但包含预训练, 还把从数据准备开始, 经过预训练, 再到中期训练(其中有对话、多项选择题、工具使用),接着是SFT、RL微调, 最后到推理部署的一整个流程都涵盖进去了。整个项目大概有8000行代码, 能够达成以下这些功能:
· 基于全新Rust语言实现,训练分词器()
针对数据集, 预先训练架构大语言模型, 并且借助多项指标, 对CORE得分展开评估。
需要在用户与助手对话所形成的数据集上, 开展中期训练, 还要在多项选择题的数据集上, 实施中期训练, 此外又要在工具使用的数据集上, 进行中期训练。
· 开展执行指令微调, 也就是SFT, 后在世界知识多项选择题数据集, 即ARC-E/C上, 对对话模型性能予以评估, 还在数学数据集, 也就是GSM8K上进行评估, 同时也在代码数据集上评估其性能。
有这样一种选择, 是在GSM8K数据集之上, 借助“GRPO”算法, 针对模型开展强化学习, 也就是RL训练。
实现高效模型推理于推理引擎里, 支持KV缓存、简易预填充及解码流程、工具使用(轻量级沙箱环境之解释器), 能借CLI或类的WebUI与模型交互。
生成仅仅一个格式的报告卡,对于整个训练推理的流程去做出总结, 并且添加“游戏化”这种呈现方式, 像是采用评分、进度等形式以直观地展示结果。
约训练十二小时之后, 模型于CORE指标之上的表现, 便能够超越GPT - 2。要是再进一步把成本提升至大约一千美元(训练约四十一点六小时), 模型表现会显著提高。宣称, 其目标是把这套完整的“强基线”技术栈整合成为统一的、至极简约的、易于阅读的、能够修改的、易于分发的代码库。
我觉得它具备朝着成为一个用于研究工具的框架, 或者是当作基准测试的工具去进展的可能性, 如同先前那般。当前该项目距离完全实现优化还差很多(实际上有着大量能够改进的空间), 不过整体的框架已经足够完善, 可以放到上面去发布, 后续所有的模块都能够在社区里进一步地进行优化。
下述这张图所展示的, 为在「$100速度跑」实验里生成的「成绩单」部分内容, 该实验是仅用一台GPU、历经约4小时训练得出的小模型, 它说明了模型规模, 说明了训练耗时, 还说明了在各类标准评测上的性能。
快速上手
教程在上详细分享, 目的是让更多爱好者能迅速上手, 该教程设计为在单个8×H100 GPU机器上运行, 此次教程使用了GPU Cloud, 每小时大约24美元, 当然想要尝试的爱好者们可根据个人情况自行尝试, 接下来看看他到底做了什么?
环境搭建
首先,克隆项目并进入目录:
git clone :/.git
cd
运用100美元去训练出最为强悍的类, 在此背后, 速度最快能体验魔力的办法是运行.sh(也就是速通)脚本。
在一台全新设备之上, .sh脚本能够直接予以运行, 自始至终达成训练以及推理这项工作。
所有的基础条件便是要保证安装了全新的uv项目管理工具, 接着去创建虚拟环境, 再安装依赖并将其激活, 如此一来, 当在终端进行输入操作时, 所使用的便是虚拟环境当中的, 而非系统本身所自带的。
# 安装 uv(如果还没安装的话)
# 创建本地虚拟环境 .venv(如果不存在的话)
-d ".venv"
|| uv venv
# 安装仓库依赖
uv sync
# 激活虚拟环境,这样 `` 就会使用项目的虚拟环境
.venv/bin/
紧接着, 要去安装Rust/Cargo, 以此来对其中自定义的Rust分词器展开编译。
声称, 把新的分词器给引入进来, 着实是有那么一点儿麻烦劲儿的, 然而先前版本的速度太慢, 并且那个又太过臃肿, 还特别复杂。所以哦, 他亲自去实现了一个全新的Rust分词器用于训练, 经测试后效果和版本保持一致, 可是在推理阶段依旧会选用那个来确保效率。
编译分词器步骤如下:
# 安装 Rust / Cargo
通过使用curl, 依据指定的协议为https, 并且采用tlsv1.2的版本, 以安静、安全且快速的方式进行操作,将获取到的内容通过管道符传递给sh程序, 同时以特定的格式传入参数-y来执行相关操作。
"$HOME/.cargo/env"
# 编译
uv运行, 路径为/Cargo.toml, 这是进行的一项操作。
这样就完成了分词器的编译和环境搭建,为后续训练做准备。
训练分词器
接下来,就需要预训练数据,以便完成两个任务:
i. 训练分词器()
ii. 预训练模型
这里的预训练数据, 是大量的网页文本, 在教程当中, 所使用的, 是-EDU数据集。
他作出解释, 一般而言大家能够直接采用的.()去进行加载, 然而这个太过厚重累赘, 何况还隐匿起一些颇为简易的逻辑,故而他自行抉择重新整合了整个数据集, 造就出简易且全然随机打乱的数据之分片, 以便利高效存取其. ()并利用来加载, 可是这个太过笨重臃肿, 还把一些很简便的逻辑隐藏起来;最终是他选择重新打包了整个数据集, 生成了简单、完全随机打乱的数据分片, 方便高效访问。
此外, 还将-100B版本上传成了/-edu-100b-()。
存在着这样一种情况, 每个分片呈现为一个简单的文件, 其字符数量大约是0.25M, 在经过gzip压缩这个操作之后, 于磁盘所占用的空间约为100MB。数据集整体一共拥有1822个分片, 然而, 就训练一个深度等于20的模型而言, 仅仅只需要240个分片。
下载数据:
按默认情形, 这些数据会被放置于~/.cache/。在下载完毕之后, 便能够对分词器展开训练了。所谓分词器, 其功能是将文本于字符串以及代码表符号序列两者之间进行相互转换。
在同样的默认情形之下, 表示, 用于训练的词表大小是2的16次方等于65536个token, 这个数值相对比较容易记忆。其中存在少数token被留存下来用作特殊的用途, 后续聊天的时候会用到。训练集的大小大约是20亿字符, 进行训练所需要的时间仅仅只需大约1分钟。
训练算法, 其采用的方法, 是与正则分割以及byte - level BPE一致的。
训练完成后,可以评估分词器效果:
-m . --=
-m .
评估得出的结果表明, 分词器的压缩比率将近4.8, 这意味着平均而言大约4.8个原本的字符将会转变成1个token, 与此同时, 还能够把所得到其的结果跟GPT - 2与GPT - 4分词器进行比较 :。
该分词器在与GPT - 2(50257个token)相比时。在诸如大部分文本压缩方面。展现出了更为出色的表现。然而。在数学文本这一特定领域。其表现相对而言略逊一筹。
相比GPT - 4, 其表现稍微逊色一些, 不过需要留意的是, GPT - 4的词表更大, 有100,277个token, 在多语言方面、代码方面以及数学方面有着显著的优势。
性能结果
需要留意的是, 项目文件夹当中会产生.md 文件, 该文件将训练的详细情节予以记录, 并且于末尾给出了一个明晰了的总结表格 这种表格有助于查看各类指标以及有关所展现而出的种种模样。
然而, 也进行了提醒, 指出当下距离完成还相差很远, 存在诸多有待调整或者优化之处, 不过整体框架已然足够明晰, 因而此刻将其上传至, 以便让更多人投身于改进与完善之中。
总体而言, 并非属于那种具有颠覆性的进展, 然而它具备极强的实用性, 它把 LLM 训练的门槛予以压低, 进而至普通人够得着的程度, 你能够亲眼目睹, 仅仅借助几百美元以及数小时便能够达成怎样的情形。
这个项目展现出他的关键理念, 即「降低LLM研究与复现门槛, 使得每个人都能够亲手去训练自己的模型」, 这样的民主化路线, 跟他在时期所倡导的「从零实现」是一模一样的。
更多推荐



所有评论(0)