被淘汰的“古董电脑”不一定非得走上“被卖掉换脸盆”的命运。有时稍加改造,它不仅能继续用,还能运行时下前沿的大模型!
最近,一个名为 EXO Labs 的团队发布了一段视频,展示了在一台有着 26 年历史的 Windows 98 Pentium II PC 上运行强大的 LLM 的经历。令人惊讶的是,这一过程成功了,而且大模型生成速度相当不错,每秒能有 39.31 个 token 的输出速度!
EXO Labs 表示,前沿 AI 并不一定非要依赖数据中心运行。他们这一次让 Llama 在一台运行 Windows 98 的奔腾 II 电脑上复活,这意味着——“如果它能跑在 25 年前的硬件上,那就说明它可以跑在任何地方!”
那么他们究竟是怎么实现的?我们将通过下文一起来了解一下~~
硬件设置
为了详细地说明,EXO Labs 还发布了一篇主题为《在 Windows 98 上运行 Llama》的博客文章进行了步骤解析与痛点难点分享。
首先在硬件方面,EXO 在 eBay 上花费了 118.88 英镑(约 1087 元)购买了一台 Windows 98 Pentium II PC 作为实验基础设备,其配备 128MB RAM,正如下图所示:
不难想象,5 年前的手机和电脑今天使用时还会遇到不少问题:一方面运行非常卡顿,另一方面许多设备也可能不兼容,更别提这台 26 年前的老旧设备了。
正因此,在把这台设备收到手后,EXO 就发现了现代 USB 键盘和鼠标根本无法与这台电脑配合使用,这是需要解决的首要难题。
经过一番思考,EXO 提出了一个解决方案——放弃现代 USB 外设,回归使用 PS/2 外设。毕竟,在那个年代,PS/2 接口是标准配置,Windows 98 与这类硬件天然兼容。
然而,使用 PS/2 键盘和鼠标时,该团队还遇到了一个有趣的“限制”:必须将鼠标插入 PS/2 的端口 1,键盘插入端口 2,否则系统无法正确识别这些外设。
文件传输:回归老旧的 FTP 协议
上面这个问题解决之后,接下来的挑战是将文件传输到这台老旧机器上。因为想要在这台 Windows 95 设备上运行大模型,就必须要传输模型权重、标记器配置(tokenizer configs)和推理代码等。
然而,该团队尝试了之后,现代解决方案全都失败了,其中:
系统无法识别可重写磁盘(RW disks)
4TB 的 USB 硬盘因 FAT32 文件系统限制而无法使用
没有其他办法,EXO 团队成员最终选择了经典的 FTP。
事实证明,FTP 在这些年里始终保持了向后兼容性。EXO 团队通过在一台 M4 MacBook Pro 上运行 FileZilla FTP 服务器,通过 USB-C 转以太网适配器的方式将其连接到 Windows 98 机器,设置静态 IP 后,可以直接通过命令行传输文件。
为了让 MacBook 的 USB-C 以太网适配器与 Windows 98 通信,该团队将其 IP 地址手动设置为 192.168.1.1,并验证了连接是否正常。
一个简单的 ping 测试证明两台设备可以成功互相通信:
Windows 98 命令提示符显示 ping 成功
Windows 98 与 MacBook 的延迟小于 1 毫秒
网络连接建立后,现在终于可以通过 FTP 传输文件。不过其中还有一个关键问题:可执行文件无法运行。
该团队发现,它们需要以二进制模式传输。解决方法也很简单——只需在 FTP 命令行中输入 binary 即可:
通过二进制模式成功传输 stories260K.bin 文件
编译挑战
让现代代码在 Windows 98 上进行编译想想都是一项非常棘手的任务。
最初,该团队希望尝试 mingw,这是一个用于在 Windows 操作系统上开发原生应用程序的开发工具集。它包含了一些 GNU 工具(如 GCC 编译器),使得开发者可以使用类似 Unix 的开发环境来编译和构建 Windows 应用程序,据称也可以为 Windows 98 和奔腾 II 编译现代 C++。
令人遗憾是,这条路行不通——可能是因为 CMOV(条件传送)指令不被奔腾 Pro 之前的处理器支持。因此,早期的奔腾 II 处理器(即奔腾 Pro 之前的版本)不支持这一指令。当编译器尝试在不支持 CMOV 的旧处理器上使用这一指令时,程序可能会出现错误或无法编译。
于是该团队继续采取了复古方案:使用 26 年前的 Borland C++ 5.02,这是一个可以直接在 Windows 98 上运行的 IDE 和编译器。
不过,这个 IDE 只支持非常老旧的 C/C++ 版本,无法支持现代 C++。好在 C 语言在近几十年间变化不大,要说最大的一次变更还是 1999 年的 C99 标准。这种旧版本的 C 主要限制是无法在函数中任意位置声明变量——所有变量都必须在函数开头声明。
尽管老旧,但 Borland C++ 5.02 依然“能干活”
感谢 Karpathy 的助力
为 Windows 98 编译现代代码,该团队最终选择了曾担任 Tesla 的 AI 总监、也是 OpenAI 的创始团队成员之一 Andrej Karpathy 开发的 llama2.c。此前,我们也曾报道过,llama2.c 是一个仅有 700 行的纯 C 代码的推理引擎,可以运行基于 Llama 2 架构的模型推理。
虽然这一项目非常合适作为此次实验运行的模型,但 EXO 团队成员认为,仍需要针对奔腾 II 和 Windows 98 进行一些调整:
将 long long 替换为 DLONGWORD(通过 typedef 实现)
将所有变量声明移动到函数开头
简化了磁盘到内存的加载(内存映射会导致段错误)
用 GetTickCount() 替换了 clock_gettime 解决时间戳问题
因此,他们将 llama2.c 进行优化调整之后得到了一个 llama98.c 项目,并将其完成的代码在 GitHub 上开源出来:https://github.com/exo-explore/llama98.c。
借助这些资源,该团队成功地将代码编译为可在 Windows 98 上运行的可执行文件。
260K 参数的 Llama 模型在 Windows 98 上运行,生成了一个关于 Sleepy Joe 的故事
运行结果
最终成功了!以下是在奔腾 II CPU(无需 GPU)上运行的测试结果如下:
对此,EXO 的成员之一 Alex Cheema 表示,在运行一个 260K 参数量的 Llama 架构模型时,这套系统在 Windows 98 上达到了每秒 39 token 的生成速度。当然,260K 的模型规模相对较小,但在一台 350 MHz 单核古董 PC 上,这样的运行速度已经相当可观了。
根据上述结果显示,当升级到 15M 参数量的 LLM 后,生成速度降到了略高于 每秒 1 token。然而,当尝试运行 Llama 3.2 的 1B 参数量模型时,速度则降到了极其缓慢的每秒 0.0093 token。
虽然速度远不及 ChatGPT,但能让现代 AI 模型在 25 年前的 CPU 上运行是一个重要里程碑。
未来更多的可能性
EXO Labs 之所以做这样的试验,也并非没有缘由。这家略显神秘的组织成立于今年 9 月成立,主要成员来自牛津大学的研究人员和工程师,他们希望“让每个人都能平等地获取 AI 技术。”
简单来说,EXO 认为,由少数几家巨头公司掌控 AI 技术对文化、事实真相以及社会的其他基本方面是极其不利的。因此,EXO 的愿景是“构建开放的基础设施,用于训练前沿模型,并使任何人能够在任何地方运行它们。”
通过这种方式,普通人也有希望在几乎任何设备上训练和运行 AI 模型。而这次看似疯狂的 Windows 98 AI 实验,正是有限资源下 AI 能力的标志性演示。
对此,在博文中,EXO 表示,希望通过 BitNet 实现 AI 的普惠化。
BitNet 是一种新的人工智能模型架构,旨在通过使用三元权重(ternary weights)来实现更高效的模型运行。与传统的深度学习模型使用浮点数(如 32 位或 64 位)表示权重不同,BitNet 的权重值只使用三个可能的值:0、-1 和 1,每个权重仅需 1.58 比特存储空间(log₂(3) ≈ 1.58)。这种简化的权重表示可以显著减少模型的存储需求和计算量,从而使得模型能够在硬件资源有限的设备上运行。
EXO 称,利用这种架构:
70 亿参数的 BitNet 模型仅需 1.38GB 存储空间。这对一台 26 年前的奔腾 II 来说可能仍然是巨大的负担,但对于现代硬件,甚至是十几年前的设备而言,已经相当轻量了。
它以 CPU 优先为设计理念,微软的 BitCPP 可以在 M2 Ultra CPU 上实现 52 tokens/秒的生成速度,在 Intel i7 上生成速度为 18 tokens/秒
更令人惊叹的是,100B 参数的 BitNet 可以在单个 CPU 上以 5-7 tokens/秒的人类阅读速度运行
它比全精度模型能效高 50%以上
“虽然目前还没有大型开源 BitNet 模型,但我们相信三值模型是实现普惠 AI 的未来”,EXO Labs 说道,其也希望看到更多的努力致力于在老旧硬件上运行 AI 模型,因为这方面还有大量的工程工作要做——从优化内存使用到探索可以高效运行于受限硬件的新架构。
对于这一尝试,面对有人质疑其实用性,EXO Labs 在社交平台 X 上再次强调,「这是硬件非常受限的一个例子。因此,结论是:如果我们能在此基础上实现,那么几乎可以在任何地方运行语言模型。」
参考:
https://blog.exolabs.net/day-4/
https://x.com/unwind_ai_/status/1873574158485111110