机器之心报道 编辑:陈陈、蛋酱
让 Llama 2 在 Windows 98 奔腾 2(Pentium II)机器上运行,不但成功了,输出达到 39.31 tok / 秒。
这台 PC 可能比你的年龄还大,要知道它已经是 26 年前的硬件了,配备英特尔奔腾 2 CPU 和 128MB 的内存。
该项目是一个名为 EXO Labs 组织的一次大胆尝试,其证明了如果 Llama 模型能在 26 年前的硬件上跑通,那么它可以在任何地方运行。
为了证明这是真实发生的,EXO Labs 还放出了一段视频。视频显示一台古老的 350 MHz Elonex 奔腾 2 电脑启动 Windows 98 后,然后启动了基于 Andrej Karpathy 开发的 Llama2.c 定制的纯 C 推理引擎,并要求 LLM 生成一个关于 Sleepy Joe 的故事。
令人惊讶的是,它成功了,故事的生成速度非常快。
视频链接:https://mp.weixin.qq.com/s/TRR5yZz5we1ezNuwfIMGjA?token=654253964&lang=zh_CN
不过,上述令人大开眼界的壮举远不是 EXO Labs 的最终目标。这个有点神秘的组织于 9 月正式成立,其使命是「让人工智能普及大众」。该组织由牛津大学的研究人员和工程师组成。简而言之,EXO 认为少数几家大公司控制人工智能对文化、真理和我们社会的其他基本方面来说是一件非常糟糕的事情。因此,EXO 希望建立开放的基础设施来训练前沿模型,并使任何人都可以在任何地方运行它们。通过这种方式,普通人几乎可以在任何设备上训练和运行人工智能模型 —— 而这个疯狂的 Windows 98 运行大模型只是一个演示,展示了在(严重)有限的资源下我们可以做些什么。
正如读者所料,EXO 轻而易举地从 eBay 上买到了一台旧的 Windows 98 PC 作为该项目的基础,硬件有了,但仍有许多障碍需要克服。EXO 解释说,将数据导入旧硬盘就是一项巨大的挑战,因此他们只能使用老式 FTP(good old FTP)通过这台古老机器的以太网端口进行文件传输。
然而,更大的挑战是让 Windows 98 编译现代代码。好在 EXO 找到了 Andrej Karpathy 的 llama2.c 项目。借助此资源和旧的 Borland C++ 5.02 IDE 和编译器(加上一些小调整),可以将代码制作成与 Windows 98 兼容的可执行文件并运行。
通过 FTP 以二进制模式传输 stories260K.bin 模型文件。 编译挑战
在 Windows 98 下编译现代代码非常棘手。我们首先尝试了 mingw,据说它可以为 Windows 98/Pentium II 编译现代 C++。结果却走入了死胡同 — 可能是由于 CMOV 指令不支持奔腾 Pro 之前的版本。
于是,我们采用了老式的方法:Borland C++ 5.02 是一款有 26 年历史的集成开发环境和编译器,可直接在 Windows 98 上运行。唯一的问题是它支持的是非常老的 C/C++ 版本。现代 C++ 是不可能的,但几十年来 C 语言的变化却少得惊人。C 语言最大的变化是在 1999 年(C99),所以很遗憾我们错过了。旧版 C 的主要限制是不能「随处声明」变量,所有变量都必须在函数的开始部分声明。
Borland C++ 5.02,一款有 26 年历史的集成开发环境,仍然能够完成任务。 Karpathy 救场
这让我们想到了 Andrej Karpathy 的 llama2.c:700 行纯 C 语言,可以在具有 Llama 2 架构的模型上运行推理。非常完美,但为了在奔腾 II 上运行 Win98,它仍然需要一些调整: 用「DLONGWORD」代替「long long」(使用类型定义);将所有变量声明移至函数起始处;简化了从磁盘到内存的加载(内存映射会导致 SEGFAULTS);通过用 GetTickCount () 代替 clock_gettime 修复了时间戳问题。
本项目的代码可在 GitHub 上的 llama98.c 获取。
成功!在 Windows 98 上运行的 260K 参数 Llama 模型生成了一个关于 Sleepy Joe 的故事。 结果
终于让它工作了!以下是我们实现的结果,完全在 Pentium II CPU 上运行,无需 GPU:
Llama 3.2 1B 的结果是基于运行适合内存的模型碎片的基准测试和磁盘读取基准测试得出的。Llama98.c 正在通过卸载功能进行扩展,以运行更大的模型来进行实际测试。
虽然没有达到 ChatGPT 的速度,但让任何现代人工智能模型在二十多年前的 CPU 硬件上运行,都是朝着我们的使命迈出的重要一步。在此特别感谢 Chris Wellons 关于如何在 Windows 98 上运行 C++ 的精彩博文。 未来:BitNet 及其他
BitNet 是前沿模型真正可以在任何硬件上运行的一个前景广阔的方向。BitNet 是一种使用三元权重的 transformer 架构,每个权重只能是 0、-1 或 1,每个权重只需要 1.58 比特(log₂(3) ≈ 1.58)。这一简单的变化具有重大意义: