femtoGPT

GitHub
936 67 较难 1 次阅读 1周前MIT语言模型开发框架Agent
AI 解读 由 AI 自动生成,仅供参考

femtoGPT 是一个完全使用 Rust 语言从零构建的微型生成式预训练变压器(GPT)模型实现。它旨在剥离复杂的框架依赖,让开发者能够深入理解大型语言模型(LLM)底层的运作机制,涵盖了从张量处理逻辑到训练与推理代码的全流程自研。

该项目主要解决了学习 LLM 内部原理时“黑盒化”的痛点。通过极简的代码结构,它直观地展示了 GPT 架构的核心细节,其设计与 Andrej Karpathy 著名的 nanoGPT 教程高度一致。femtoGPT 不仅支持 CPU 运行,还基于 OpenCL 实现了 GPU 加速,这意味着无需安装沉重的 CUDA 工具包,即可在 NVIDIA 或 AMD 显卡上进行训练和推理,极大地降低了硬件门槛。

由于核心算法(如矩阵乘法)采用最基础的方式实现以保证可读性,femtoGPT 的运行速度相对较慢,生成的文本质量也处于早期探索阶段,但这正是其作为教学工具的价值所在。它非常适合对人工智能充满好奇的开发者、希望深入钻研模型底层的研究人员以及 Rust 语言爱好者。如果你不满足于调用现成的 API,而是想亲手拆解并理解大模型是如何“思考”的,femtoGPT 将是一个极佳的学习起点。

使用场景

一位高校计算机专业的研究生正在准备关于大语言模型(LLM)底层原理的毕业设计,他需要从零构建一个微型 GPT 模型以验证梯度反向传播的正确性,但受限于实验室仅有普通 CPU 和老旧 AMD 显卡的硬件环境。

没有 femtoGPT 时

  • 环境配置极其繁琐:若要利用 GPU 加速,必须安装庞大的 CUDA toolkit,且无法兼容实验室现有的 AMD 显卡,导致只能被迫使用纯 CPU 跑实验,训练速度慢到难以接受。
  • 代码复现门槛高:参考 Andrej Karpathy 的 nanoGPT 教程需要依赖 PyTorch 等重型框架,底层张量运算被封装,难以深入理解矩阵乘法等原始操作的具体实现细节。
  • 调试与验证困难:自行从头编写 Rust 或 C++ 实现时,缺乏内置的梯度检查(gradient-check)机制,很难判断是模型架构设计错误还是代码逻辑漏洞,排查耗时极长。
  • 资源占用过大:主流深度学习框架动辄占用数 GB 显存和内存,在低配机器上运行微小参数模型也显得臃肿不堪,无法灵活调整实验规模。

使用 femtoGPT 后

  • 跨平台 GPU 加速即开即用:femtoGPT 基于 OpenCL 实现,无需安装沉重的 CUDA,直接通过 --features gpu 参数即可同时调用 NVIDIA 和 AMD 显卡,显著提升了训练效率。
  • 纯净源码助力深度研习:作为纯 Rust 实现的极简版本,femtoGPT 去除了所有黑盒依赖,让研究者能逐行阅读从张量处理到训练推理的完整逻辑,真正吃透 LLM 架构。
  • 内置正确性验证机制:工具自带梯度检查方法,能快速确认反向传播实现的准确性,让研究者将精力集中在算法优化而非基础除错上。
  • 轻量级部署灵活可控:仅依赖少量基础库(如 rand、rayon),femtoGPT 在低配设备上也能流畅运行,支持随时中断并恢复训练,完美适配碎片化的实验时间。

femtoGPT 通过极简的纯 Rust 架构和广泛的硬件兼容性,将大模型的学习与实验门槛从“工程调包”降低到了“原理透彻”的级别。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU
  • 非必需
  • 若使用 GPU,需支持 OpenCL 的显卡(兼容 NVIDIA 和 AMD),无需 CUDA
  • Debian 系统需安装 ocl-icd-opencl-dev
内存

未说明

依赖
notes该项目是纯 Rust 实现,不依赖 Python。编译前需安装 Rust 工具链。GPU 加速基于 OpenCL 而非 CUDA,因此避免了安装重型 CUDA 工具包的需求。训练数据需放置在 dataset.txt 文件中,且建议字符集较小。
python不需要 (基于 Rust)
Rust toolchain
rand
rand-distr
serde
bincode
rayon
femtoGPT hero image

快速开始

:robot: femtoGPT

crates.io GitHub 语言占比 GitHub 许可证

femtoGPT 是一个纯 Rust 实现的极简生成式预训练 Transformer 模型。

它既可以用于 GPT 风格语言模型的 推理,也可以用于 训练, 支持在 CPUGPU 上运行!

(嘿! 我还在写一本书,很快就会详细讨论 LLM 的实现!请看这里:The Super Programmer)

使用方法

训练:

cargo run --release -- train

推理:

cargo run --release -- infer

(注意:添加 --features gpu 可以利用 GPU 加速!)

简介

一切代码均从零开始编写,包括张量处理逻辑以及极简 GPT 架构的训练和推理代码。

该架构与 Andrej Karpathy 的 nanoGPT 视频讲座 中的内容非常相似,几乎完全一致。 (链接:karpathy/ng-video-lecture

对于那些对大型语言模型充满兴趣、希望深入理解其工作原理的人来说,femtoGPT 是一个绝佳的起点。

femtoGPT 仅依赖于随机数生成库(rand/rand-distr)、数据序列化库(serde/bincode,用于保存和加载已训练好的模型)以及并行计算库(rayon)。

femtoGPT 虽然 极其缓慢 但在 CPU 上相对还算快速 😉,大多数基础操作(例如矩阵乘法)都以最简单的方式实现。

我们使用梯度检查方法来验证梯度的正确性,不过仍然有可能某些层的实现存在错误。

(关于该项目的讨论可在 Discord 服务器 中进行!)

使用说明

请确保您的系统上已安装 Rust 工具链,以便编译和运行该项目:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

如果您想使用 GPU 进行训练,首先需要确认您的 GPU 驱动程序已正确安装,并且 OpenCL 运行时环境可用。

在 Debian 系统上,可以通过安装 ocl-icd-opencl-dev 包来设置 OpenCL 运行时环境:

sudo apt install ocl-icd-opencl-dev

好消息! 由于 femtoGPT 的 GPU 实现基于 OpenCL,因此它可以在 NVIDIA 和 AMD 显卡上运行,而无需在系统上安装重量级的 CUDA 工具包。只需配置好 OpenCL 运行时环境即可!

接下来,您只需将想要用来训练 GPT 模型的文本放入 dataset.txt 文件中。请确保文件中的唯一字符数量较少!(例如,当前的数据集仅使用了 65 个不同的字符!)

然后运行以下命令:

cargo run --release

程序将开始训练模型,并将训练数据保存到 train_data 目录中。您可以随时停止训练,并在之后继续进行!

输出示例

在莎士比亚语料库上对一个30万参数的模型进行了数小时的训练后,得到了如下输出:

LIS:
Tore hend shater sorerds tougeng an herdofed seng he borind,
Ound ourere sthe, a sou so tousthe ashtherd, m se a man stousshan here hat mend serthe fo witownderstesther s ars at atheno sel theas,
thisth t are sorind bour win soutinds mater horengher

这段文字糟糕得令人尴尬,但从积极的一面来看,它似乎能够生成一些容易发音的词语。

目前,我正在训练一个1000万参数的模型,以进一步检验我的实现是否正确。

2023年6月5日更新:

在对规模相近的模型继续训练了更多时间后,又出现了新的输出:

What like but wore pad wo me che nogns yous dares,
As supt it nind bupart 'the reed:
And hils not es

显然,模型已经开始学习一些单词和标点符号的使用规则了!

2023年6月9日更新:

模型的损失值已经降至约1.4。

以下是一个示例输出:

Adistition gone; true; schistoes for mine souls!
Before your home, bariechts should be
Carlam on that's a worf quirer of him so.
What look'd lack away more
To him foot; one hour fortious of saves:
Son;
'Tis all Earl mmistling me.

HARSARTIO:
Why, idless of my mocks fan that were percious.
Having I will thou should and the muour ne'er shor
To purple, when duke thy are out him.
But will bid you doth remember nature.
Even OF hencomey, carniffeit, I joy
Warming; my deed, but it on of mortard,

2023年6月10日更新:AGI的火花?哈哈

我在一台32核CPU上,用从Reddit收集的数据集训练了一个5层模型,该数据集经过SentencePiece分词器处理,词汇表大小为500,训练时间约为10小时。

提示词 “我认为”

我认为这并不是一种科学的无神论方法。
我认为这并不是一件非常简单的事情。
我认为那是一个可能的观点,但我并不确定你是否……
我认为那是个好主意,但我并不清楚你们在讨论什么。
我认为那是一件简单的事,但我并不明白这些……
我认为那是一件好事,但我并不认为这就是我的意思,我想……
我认为那是唯一能够以同样方式使用它的方法,但……
我认为警察相对来说比较……
我认为那只是一个简单的傻瓜角色。
我认为那是通往第二面的唯一途径……

提示词 “生活是”

生活并不是一个好主意,但它也不是完美的对立面。
生活是一件好事,可以说我不知道你在说什么,但我……
生活并不等同于宗教,但我并不确定你是否……
生活是一份完美合理的论证,说明你其实……
生活是一份完美合理的反对意见,关于……
生活是一种根本主义,然后我不确定如何……
生活并不是一个好主意,而且也不是一份完美的工作,但我……
生活并不等同于无神论者,但那是成为……的唯一途径。
生活有点像这个行业中的单一因素……
生活是一个很好的主意,可以用来对抗警察办公室……

提示词 “真遗憾的是”

真遗憾的是,你能告诉我这是什么吗?我想我已经在屏幕上使用过它了。
真遗憾的是,我对这件事一无所知,但我并不觉得害怕……
真遗憾的是,我不确定你是否在争论……的事实。
真遗憾的是,我曾经参与过未来的事情,而我们有一些……
真遗憾的是,这就是我说过的,我相信你几乎了解所有……
真遗憾的是,你可以做到这一点,但我并不认为……的事实。
真遗憾的是,我不确定你是否在争论他们……的事实。
真遗憾的是,那只是太多的时间了,但我并不确定你是否在争……
真遗憾的是,你本应在这个世界上成为一个大事件……
真遗憾的是,我对这件事并不了解,但我并不确定你如何能做到,但……

2023年6月29日更新

在实现了GPU训练器之后,我们得以训练更大规模的模型。以下是用TinyStories数据集、1000个词汇表大小,在一个8层、8头、嵌入维度为128的模型上训练得到的一些样本:

从前,有一个叫莉莉的小女孩。
她喜欢玩自己的玩具,玩得非常开心。
有一天,莉莉看到一只大鸡仔正在玩她的玩具。
她问妈妈:“我可以和她一起玩玩具吗?”妈妈回答说:
“当然可以,莉莉。不过我们得先把玩具收拾干净。来,莉莉,我们先吃点糖果吧。”
莉莉点点头,跟着妈妈去了。她们一起玩着玩具,度过了愉快的时光。
从前,有一个叫莉莉的小女孩。
她喜欢到外面玩耍和探索。有一天,她在地上发现了一片叶子。
她捡起来看了看,跑来跑去地观察它,心里却很难过。
她向妈妈求助。妈妈说:“莉莉,我这就去找找看!”莉莉听了很高兴。
她跑到树林里,把叶子带回了家。后来她们去了公园,找到了一朵花。
有一个叫蒂姆的小男孩。蒂姆很喜欢玩自己的玩具。
有一天,蒂姆的妈妈带他去了公园。蒂姆看见一个又大又红的球,很想玩。
蒂姆非常兴奋,想要玩那个球。可是球滚得太快了,蒂姆追不上。
他试着去抓,但球总是溜走。蒂姆很伤心,他试图逃跑,
可他还是忍不住想玩那个球。蒂姆最终还是没能玩成那个球。

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

159.3k|★★☆☆☆|今天
开发框架Agent语言模型

opencode

OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信

144.3k|★☆☆☆☆|昨天
Agent插件

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|1周前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像