章节 01
导读 / 主楼:MacinAI-Local:在经典Macintosh上原生运行大语言模型的C89推理引擎
一个从零开始用C89编写的LLM推理引擎,让68030到PowerPC G4的经典Mac无需联网即可本地运行HuggingFace兼容的Transformer模型。
正文
一个从零开始用C89编写的LLM推理引擎,让68030到PowerPC G4的经典Mac无需联网即可本地运行HuggingFace兼容的Transformer模型。
章节 01
一个从零开始用C89编写的LLM推理引擎,让68030到PowerPC G4的经典Mac无需联网即可本地运行HuggingFace兼容的Transformer模型。
章节 02
在云计算和动辄千亿参数模型的时代,有人却选择了一条截然不同的道路——让大语言模型在三十年前的Macintosh电脑上本地运行。MacinAI-Local项目不仅是一个技术实验,更是一次对计算本质的回归:证明AI推理不必依赖昂贵的GPU集群,甚至可以在没有互联网连接的经典硬件上完成。
章节 03
MacinAI-Local是由Alex Hoopes开发的LLM推理引擎,完全使用C89语言编写,专门针对经典Mac OS(System 7.5.3至Mac OS 9.2.2)优化。它支持从68030、68040到PowerPC G3、G4的多种处理器架构,每个token的计算都在Mac的CPU上直接完成,无需中继服务器,无需云端连接。
值得注意的是,这并非现有推理框架的移植版本。无论是前向传播、BPE分词器、内存池分配器、磁盘分页系统,还是AltiVec SIMD内核,都是基于Mac Toolbox API从头编写的,使用CodeWarrior Pro 5进行开发。
章节 04
引擎支持两大模型家族:
LLaMA风格模型(RMSNorm、SwiGLU、RoPE): 涵盖LLaMA、Mistral、Qwen、Gemma、TinyLlama、SmolLM和StableLM等系列。
GPT-2风格模型(LayerNorm、GeLU、学习式位置嵌入): 支持GPT-2、OPT、Pythia、GPT-J、GPT-NeoX、Falcon和Phi等架构。
通过tools/convert_to_macinai.py转换脚本,用户可以将任何HuggingFace模型转换为MacinAI专用的.bin格式。该格式采用128字节头部,后接词汇表和权重张量,全部使用大端序存储,使68K处理器无需字节交换即可直接读取。
章节 05
在1GHz PowerBook G4 Titanium(1GB RAM,Mac OS 9.2.2)上的实测数据:
| 模型 | 参数量 | 量化 | 速度 | 内存占用 |
|---|---|---|---|---|
| MacinAI Tool | 94M | Q8 | 2.66 tok/s | 107 MB |
| GPT-2 | 124M | Q8 | 1.45 tok/s | 141 MB |
| SmolLM | 360M | Q8 | 0.85 tok/s | 394 MB |
| Qwen 2.5 | 0.5B | Q8 | 0.63 tok/s | 532 MB |
| TinyLlama | 1.1B | Q8 | 0.10 tok/s | 1.18 GB(磁盘分页) |
这些数据展示了在 vintage 硬件上运行现代模型的实际可行性。虽然速度远不及现代GPU,但考虑到硬件年代,这一成绩已相当可观。
章节 06
项目最具创新性的特性之一是磁盘分页系统。当模型大小超过可用RAM时,引擎可以在前向传播过程中从磁盘流式加载层权重。虽然这会显著降低速度(TinyLlama 1.1B在闪存IDE驱动器上约需10秒生成一个token),但它确实让在内存受限设备上运行大模型成为可能。
章节 07
转换工具在现代机器上运行,依赖Python、torch和transformers:
pip install torch transformers
python tools/convert_to_macinai.py --model gpt2 --output gpt2.bin
python tools/convert_to_macinai.py --model meta-llama/Llama-3.2-1B --quantize q8 --output llama3-1b.bin
转换脚本会自动检测模型架构家族,读取权重,按需应用Q8_0量化,并输出C引擎可加载的.bin文件。引擎会自动识别应用文件夹或Models子文件夹中的.bin文件。
章节 08
引擎支持Float32和Q8_0按组量化两种精度模式。对于PowerPC G4,项目充分利用了AltiVec SIMD指令集进行加速。68K代码路径虽已编译但尚未完全优化,在不支持AltiVec的68040上性能会显著下降。
项目还包含一个定制的94M参数MacinAI Tool模型,基于Inside Macintosh文档、MacWorld档案和复古Usenet数据训练,专门用于AppleScript工具调用场景。