
TL;DR
iOS/Metal 工程师 Andrey Mikhaylov 发布了一个名为 TurboFieldfare 的独立 Swift + Metal 推理运行时,能在 8GB M2 MacBook Air 上以 5-6 tok/s 的速度运行 Gemma 4 26B 模型,内存占用仅约 2GB。核心技巧是利用 MoE 架构每次只激活 3.88B 参数,通过 SSD 流式读取需要的专家权重,加上 LFU 专家缓存和 CPU/GPU 并行重叠。在 M5 Pro 上解码速度可达 31-35 tok/s。这是目前唯一能在 8GB Mac 上跑 26B 模型的方案。
1. 背景:谁不想在本地跑大模型?
本地部署 LLM 是个人开发者最关心的话题之一。ollama + llama.cpp 的方案已经很成熟,但有一个硬限制:模型必须完整加载到内存中。如果你的 Mac 只有 8GB 内存,最多只能跑 7B-8B 级别的量化模型。26B 参数?想都别想------直到 TurboFieldfare 出现。
TurboFieldfare 是由 iOS/Metal 工程师 Andrey Mikhaylov(GitHub: drumih)开发的一个独立 Swift + Metal 推理运行时。它不是一个对 MLX 或 llama.cpp 的封装,而是一个专门为 Gemma 4 26B 模型量身定制的推理引擎,开源于 Apache 2.0 协议。项目名称 Fieldfare(田鸫)是作者最喜欢的鸟。
2. 核心原理:26B 模型如何在 2GB 内存中运行?
2.1 Gemma 4 的 MoE 架构是关键
Gemma 4 26B-A4B 采用 MoE(Mixture of Experts)架构:
- 总参数量:260 亿(26B total)
- 每 token 激活参数:约 38.8 亿(~3.88B active per token)
- 30 层 Transformer:25 层滑动窗口注意力 + 5 层全注意力
- 每层:128 个路由专家(routed experts),路由器选 Top-8 + 1 个密集共享专家
- 量化方式:MLX affine 4-bit(group 64),路由器 8-bit
MoE 的核心特性是:每次生成一个 token,只需要激活约 15% 的参数。TurboFieldfare 正是利用了这个特性------不需要把所有 26B 参数都加载到内存中。
2.2 内存分配策略
模型总共约 14.3 GB(纯文本),但 8GB 内存的机器不可能全部加载。TurboFieldfare 的解决方案是:
常驻内存(约 1.9-2.1 GB):
- 共享模型权重(嵌入层、注意力投影、路由器、共享专家等):约 1.35 GB,通过 mmap 映射
- FP16 KV 缓存(4K 上下文):约 305 MB
- 运行时临时缓冲区:约 17.6 MB
- 专家缓存槽位:每层 16 个槽位,共约 1.5 GB 容量
存储在 SSD 上(按需读取):
- 路由专家权重:约 12.9 GB(30 个 per-layer 文件)
2.3 核心技巧:SSD 流式专家读取
这是 TurboFieldfare 最关键的创新:
-
每次 token 生成时,只读取需要的专家。 路由器选出 Top-8 专家,CPU 检查缓存命中情况,仅对缓存未命中的专家发起
pread系统调用从 SSD 读取。 -
使用
pread而非mmap。 这是经过实验验证的关键决策。作者实测对比:- 冷专家 mmap 缺页:9.88 ms
- 冷专家 pread 显式读取:2.79 ms
- 完整流式模拟中,mmap 仅约 0.50 tok/s,而 pread 达到 3.97 tok/s
- 原因:mmap 将读取时机和并发控制交给了虚拟内存系统,而 pread 允许精确控制
-
16 槽位 LFU 缓存。 每层维护 16 个专家缓存槽位,使用最不频繁使用(LFU)算法(以最近使用时间为平局决胜)。加入缓存后,I/O 从 166 ms/token 降至 88 ms/token;从 LRU 切换到 LFU 后,进一步降至 64.8 ms/token。
-
CPU/GPU 并行重叠。 在 CPU 读取缺失专家时,GPU 同时执行共享专家分支的计算,不浪费时间等待。
-
分块预填充(Chunked Prefill)。 每次处理最多 128 个 token,使得一个获取的专家可以服务多行,大幅减少 I/O。
3. 硬件要求与性能实测
| 要求 | 规格 |
|---|---|
| 芯片 | Apple Silicon(M 系列),仅 arm64 |
| 内存 | 最低 8 GB(已验证 8GB M2 MacBook Air) |
| 操作系统 | macOS 26+(需 Metal 4) |
| 存储空间 | 约 14.3 GB |
| 开发工具 | Xcode 26 + Swift 6.2 |
M2(8GB MacBook Air)实测:
| 提示/生成 | 首 token 延迟 | 解码速度 | 峰值内存 |
|---|---|---|---|
| 6 / 32 tokens | 7,979 ms | 6.30 tok/s | ~1,791 MB |
| 527 / 64 tokens | 22,649 ms | 5.90 tok/s | ~1,886 MB |
| 1,017 / 128 tokens | 37,656 ms | 5.38 tok/s | ~1,971 MB |
M5 Pro(24GB)实测:
| 提示/生成 | 首 token 延迟 | 解码速度 | 峰值内存 |
|---|---|---|---|
| 61 / 256 tokens | 5,668 ms | 35.17 tok/s | ~2,126 MB |
| 3,015 / 256 tokens | 23,610 ms | 31.01 tok/s | ~2,126 MB |
与 MLX 的对比(同机 M5 Pro):
| 引擎 | 解码速度 | 内存占用 |
|---|---|---|
| TurboFieldfare | 31-35 tok/s | ~2.1 GB |
| MLX (mlx-lm) | 76-82 tok/s | 14.7-15.3 GB GPU 分配 |
MLX 速度快 2-2.5 倍,但需要 15GB 级别的 GPU 内存,无法在 8GB 机器上运行。TurboFieldfare 用速度换取了内存效率------这是唯一能在 8GB Mac 上跑 26B 模型的方案。
4. 快速上手
bash
# 克隆仓库
git clone https://github.com/drumih/turbo-fieldfare.git
cd turbo-fieldfare
# 编译
swift build -c release
# 运行 Mac 应用(首次运行会自动从 HuggingFace 下载约 15GB 模型)
.build/release/TurboFieldfareMac
# 或命令行模式
swift run -c release TurboFieldfareCLI \
--model scratch/gemma4.gturbo \
--prompt "法国的首都是" \
--max-new 64 \
--temperature 0
本地 OpenAI 兼容 API 服务器(支持 OpenCode 和 Python OpenAI SDK):
bash
swift build -c release --product TurboFieldfareServer
.build/release/TurboFieldfareServer --model scratch/gemma4.gturbo
# 监听 http://127.0.0.1:8080/v1
支持断点续传安装:
bash
swift run -c release TurboFieldfareRepack \
--output scratch/gemma4.gturbo \
--overwrite --resume
5. 局限性与注意事项
- 仅支持 Gemma 4 26B:无法切换其他模型,这是模型专用优化而非通用引擎
- 纯文本:视觉塔被移除,不支持图像输入
- 仅 Apple Silicon Mac:需要 macOS 26+ 和 Metal 4
- 速度:M2 上约 5-6 tok/s(阅读速度级别),M5 Pro 上 31-35 tok/s(实用级别)
- 上下文长度:仅 4K 经过验证,4K-64K 理论上支持但未充分测试
- 不支持:训练、微调、批量推理、多模态、结构化输出
- 研究项目:非生产级软件,可能存在 bug
6. 总结:工程奇迹的启示
TurboFieldfare 是一个工程奇迹。它证明了只要对模型架构有足够深入的理解,并愿意在 I/O 调度、GPU 内核、缓存策略等方面进行极致优化,即使是 260 亿参数的模型也能在普通 8GB MacBook Air 上运行。项目的 103 次实验记录展示了完整的探索过程------哪些想法成功了、哪些失败了。
对于本地 LLM 部署的启示是:通用引擎(ollama/llama.cpp)是大多数场景的最佳选择,但如果你需要跑特定的 MoE 大模型,模型专用优化可以打开通用方案无法触及的可能性。
7. 参考资料
- Andrey Mikhaylov, TurboFieldfare, GitHub: drumih/turbo-fieldfare, Apache 2.0
- Google, Gemma 4 Model Card, ai.google.dev
- Maarten Grootendorst, "A Visual Guide to Gemma 4", 2026
- HuggingFace, mlx-community/gemma-4-26b-a4b-it-4bit