本地推理引擎:M 系列 Mac 仅需 2GB 内存运行 26B 模型
开源项目将 Gemma 4 26B 大幅优化,使普通 M 系列 Mac 也能本地部署运行,大幅降低开发者使用大模型的门槛。
开源项目将 Gemma 4 26B 大幅优化,使普通 M 系列 Mac 也能本地部署运行,大幅降低开发者使用大模型的门槛。
Gemma 4 26B-A4B 推理大约 2 GB 内存 · 专为任何 Apple Silicon Mac 的定制 Swift + Metal 运行时,包括 8 GB 机型。
快速开始 · 本地服务器 · 基准测试 · 贡献结果 · 工作原理 · 实验 · 参考资源
内存变得昂贵了。所以我给一个 260 亿参数的模型分配了约 2 GB 的预算。
TurboFieldfare 运行指令微调的 Gemma 4 26B-A4B,无需将完整的 14.3 GB 模型加载到内存中。它在内存中保留共享的 1.35 GB 核心和 FP16 KV 缓存,然后只从 SSD 流式传输每个 token 所需的专家。这就是让模型能在 8 GB RAM 的 Mac 上运行的方法。
运行时、流式安装程序、CLI 和原生 Mac 应用都用 Swift 和 Metal 编写。TurboFieldfare 是特定于模型的,而不是对 MLX 或 llama.cpp 的包装。策划的实验记录总结了 103 个跨内核、缓存、I/O、预填充和解码的测量结果。
git clone https://github.com/drumih/turbo-fieldfare.git
cd turbo-fieldfare
swift build -c release
.build/release/TurboFieldfareMac
首次运行时,Swift Package Manager 会下载并编译分词器所需的 Swift 包。完整的发布版本包括前台 Mac 应用及其同级解码服务可执行文件。
应用打开时,选择 Download,让 TurboFieldfare 获取并重新打包固定的模型(约 15 GB)。准备好后,选择 Load Model,输入你的提示词,然后按 Generate。
测量结果是一个参考点,而不是性能上限。提示长度、生成长度、页面缓存状态和硬件都会影响吞吐量。要帮助测量另一台 Apple Silicon Mac,请遵循社区基准测试指南。
TurboFieldfare 提供原生 Mac 应用、命令行接口和实验性环回 OpenAI 兼容服务器。它们使用相同的 .gturbo 模型目录,但一次只能运行一个拥有模型的产品。
Swift 包暴露六个产品:
Apple Silicon Mac;验证的目标是 8 GB M2 MacBook Air
macOS 26 和 Metal 4
Xcode 26 和 Swift 6.2 或更新版本
足够的可用存储用于约 14.3 GB 的模型安装
用于首次模型安装的互联网连接
该包仅支持 arm64。不支持较旧的 macOS 和 Metal 版本。
Mac 应用将你输入的内容视为指令,并自动处理 Gemma 的对话格式。只需描述任务并包括模型需要的任何上下文。
生成的默认值为温度 0.2、Top-K 64 和 Top-P 0.95。将温度设置为 0 以获得确定性贪心输出。该模型仍然可能重复自己或给出不正确的答案,因此请检查重要结果。
TurboFieldfare 仅限文本。应用和 CLI 支持用户和模型消息以及可选的系统指导;它们不暴露或执行工具。环回服务器接受函数工具声明,并为客户端返回模型生成的工具调用以进行授权和执行。不支持图像、音频和视频。
从其根目录克隆存储库,然后运行应用:
swift build -c release
.build/release/TurboFieldfareMac
构建完整包,以便应用及其同级解码服务都可用。从此检查点启动时,应用在 scratch/gemma4.gturbo 中存储模型。
首次启动时,应用检查可用存储并显示下载和安装的大小。选择 Download 开始。
安装程序永远不会实现完整的源检查点。它从固定的 Hugging Face 修订版本流式传输所需的字节范围,并在到达时直接将其重新打包到 .gturbo 布局中。这避免了磁盘上的第二个完整检查点,并保持了草稿内存的界限。
首次安装通过受限的 Hugging Face 范围请求传输约 15 GB。网络速度和 Hugging Face 响应时间各不相同,所以可能需要一段时间。完成的 .gturbo 安装占用约 14.3 GB,仅在其清单和文件哈希验证后才被接受。安装不会将模型加载到内存中。
在撰写器中输入提示。
选择 Generate,或按 Command+Return。
使用停止按钮或 Escape 提前结束生成。
状态栏显示生成进度、解码速度和内存使用情况。使用右窗格配置采样、上下文长度、专家缓存槽和运行时选项。有关详细信息和默认值,请参阅运行时控制。
CLI 使用现有的 .gturbo 安装。如果你通过 Mac 应用安装了模型,它已在 scratch/gemma4.gturbo 处可用。否则,从命令行安装:
swift run -c release TurboFieldfareRepack \
--output scratch/gemma4.gturbo \
--overwrite
继续已取消或中断的下载:
swift run -c release TurboFieldfareRepack \
--output scratch/gemma4.gturbo \
--overwrite \
--resume
删除保存的下载状态:
swift run -c release TurboFieldfareRepack \
--discard-partial \
--output scratch/gemma4.gturbo
运行时仅接受带有最终 manifest.json 的完整 .gturbo 目录。
验证现有安装而不加载模型:
swift run -c release TurboFieldfareRepack \
--verify-install \
--input-gturbo scratch/gemma4.gturbo
将聊天消息放在 JSON 数组中,并使用 --messages-file 传递它:
[
{"role": "user", "content": "Explain why chunked prefill reduces time to first token while keeping memory bounded."}
]
swift run -c release TurboFieldfareCLI \
--model scratch/gemma4.gturbo \
--messages-file messages.json
这种格式化消息的方式与 Mac 应用相同。CLI 响应限制使用 --max-new 设置,默认为 1,024 tokens。Mac 应用可以生成到选定上下文窗口的末尾。
--prompt 可用于原始完成和可重现的比较。它将文本直接传递给模型,无需聊天格式。对于指令响应对话,使用 --messages-file。
swift run -c release TurboFieldfareCLI \
--model scratch/gemma4.gturbo \
--prompt "The capital of France is" \
--max-new 64 \
--temperature 0
此示例故意请求短的贪心完成。
常见的生成选项包括 --max-context、--temperature、--top-k、--top-p、--repetition-penalty、--seed 和可重复的 --stop 字符串。公共 CLI 使用生产运行时默认值。运行以下命令以获得完整的选项列表:
swift run -c release TurboFieldfareCLI --help
生成的文本转到标准输出。时间统计数据转到标准错误;在脚本中添加 --quiet 以压制该页脚。
构建服务器并将其指向已安装的模型:
swift build -c release --product TurboFieldfareServer
.build/release/TurboFieldfareServer \
--model scratch/gemma4.gturbo
它侦听 http://127.0.0.1:8080/v1 并支持聊天完成、流式传输、函数工具和单前缀提示重用。客户端必须授权并运行每个工具调用。保持服务器在环回上;它没有远程身份验证或 TLS。
有关测试请求、Python 和 OpenCode 设置、提示重用、工具处理和支持的 API 子集的详细信息,请参阅本地服务器。
按顺序运行公共测试套件:
Scripts/test.sh
在启动模型运行之前,关闭内存密集型应用并检查 memory_pressure -Q。如果报告可用内存很少,延迟运行。一次只运行一个 TurboFieldfare 应用、解码服务、CLI、服务器、测试或其他本地模型进程。
要贡献可比较的性能结果,请遵循社区基准测试指南。
在每个 transformer 层,Metal 从驻留权重计算注意力和路由器。CPU 使用路由器的前 8 个专家 ID 针对层的 16 槽 LFU 缓存进行规划,然后用有限的并行 pread 调用将未命中填充到 Metal 可见缓冲区中。Metal 在这些读取运行时计算驻留的共享专家分支,然后合并共享和路由输出。
提示预填充使用最多 128 个 token 的块,以便一个获取的专家可以服务多行。生成一次重复一个 token 的路由层循环。安装程序应用相同的受限内存规则:它将远程范围直接重新打包到 .gturbo 中,而不暂存完整的分片或张量。
有关模型架构的可视介绍,请参阅 Maarten Grootendorst 的《Gemma 4 可视化指南》。
系统设计解释了 .gturbo 布局、内存所有权、预填充、路由器移交、cb1/io/cb2 阶段、Metal 内核和正确性不变量。
TurboFieldfare 目前包括:
远程流式重新打包到 .gturbo 模型格式
指令微调的 Gemma 4 26B-A4B,具有验证的纯文本聊天格式
4 位 MLX 仿射嵌入、注意力、共享专家和路由专家权重,带有 8 位路由器
用于量化 GEMV、注意力、MoE、规范化、RoPE、采样和生产融合的自定义 Metal 内核
带有受限专家缓存的 SSD 支持的路由专家流式传输
分块单提示预填充和逐 token 生成
FP16 KV 存储,具有 25 个滑动窗口层的受限循环存储和 5 个全注意力层的线性存储
具有独特规范化 K 和 V 路径的精确分割-K/V 解码注意力
Swift 库、流式安装程序、命令行接口、环回 OpenAI 兼容服务器,以及具有一次性本地解码服务的原生 SwiftUI/AppKit Mac 应用
当前作用域是来自 Apple Silicon Mac(至少 8 GB RAM)上固定的 Gemma 4 26B-A4B 指令检查点的纯文本推理。
构建 iPhone 和 iPad 应用,然后在移动硬件上测量推理速度和内存使用情况。
基准测试更多 Apple Silicon Mac,特别是基础 16 GB M4 Mac mini 和其他 8 GB 型号。
塑造 TurboFieldfare 的实验解释了最大的赢利、失败的合理思路以及在更强验证下逆转的早期结果。详细的实验记录保持了所有 103 个经审核的条目作为可选证据。
本地 OpenAI 兼容服务器
塑造 TurboFieldfare 的实验
实验清单和摘要
实现参考资源
TurboFieldfare 的源代码和文档采用 Apache License 2.0 许可。
模型权重不包括在内。安装程序从固定的 Hugging Face 检查点单独下载它们,权重仍由其源条款控制。有关模型和 Swift 包许可证审查,请参阅 THIRD_PARTY_NOTICES.md。
TurboFieldfare 是一个独立的研究项目。它不与 Google 关联、由 Google 赞助或由 Google 认可。
感谢你查看此项目!
我叫 Andrey Mikhaylov。你可以在 LinkedIn 上找到我。我是 TurboFieldfare 的作者,也是一名 iOS 和 Metal 工程师。我的大部分工作涉及图像、视频和设备上的 AI。
我将此项目献给我的妻子 Sasha,我认识的最支持我的人。即使在最艰难的时刻,她也坚守在我身边。她热爱野生动物,去观鸟,并与当地的观鸟社区合作。正因为她,我也对鸟类和自然更加亲近。
TurboFieldfare 以画眉(一种画眉科成员)命名,这是我最喜欢的鸟。它不是最显眼或最鲜艳的鸟,但它肯定有自己的特色和独特之处。我认为这个项目也是如此:它可能不是最实用的,但我用我最喜欢的工具构建它,特别是 Metal,在我最喜欢的领域——设备上的 ML 推理中。它肯定有自己的特色和独特之处。
下次你出门时,触摸草地并听鸟鸣。有时那是你能做的最美的事情。如果可以的话,支持你当地的野生动物社区。他们做重要的工作。