← 文章 / AI技术
Hacker News 6小时前 · 2026-07-30 04:18:51 · 17 阅读

Show HN:开源引擎让 Gemma 4 26B 模型在任意 M 系列 Mac 上仅用 2GB 内存运行

约 2 GB 内存即可运行 Gemma 4 26B-A4B 推理
专为 Apple Silicon Mac(包括 8 GB 内存版本)打造的定制 Swift + Metal 运行时。

Swift 6.2 Metal 4 macOS 26 或更高版本 Apache 2.0 许可证

快速上手 · 本地服务器 · 基准测试 · 贡献结果 · 工作原理 · 实验记录 · 参考资料

TurboFieldfare Mac 应用使用 Gemma 4 26B-A4B 生成文本

内存越来越贵了。所以我给一个 260 亿参数的模型只配了大约 2 GB 的预算。

TurboFieldfare 运行经过指令微调的 Gemma 4 26B-A4B 时,无需将整个 14.3 GB 模型加载到内存。它只将共享的 1.35 GB 核心和 FP16 KV 缓存保留在内存中,然后按需从 SSD 流式加载每个 token 所需的专家模块。这使得该模型可以在 8 GB 内存的 Mac 上运行。

运行时、流式安装器、命令行界面和原生 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 包。完整的 release 构建包含前台 Mac 应用及其配套的 decode-service 可执行文件。

打开应用后,选择 Download,让 TurboFieldfare 获取并重新打包指定的模型(约 15 GB)。准备就绪后,选择 Load Model,输入提示词,然后点击 Generate

概览

指标 数值
模型 Gemma 4 26B-A4B IT,总参数量 26B,每 token 约 3.88B 活跃参数
权重 MLX 仿射 4-bit,分组 64;8-bit 路由器;4-bit 共享和路由专家
内存 权重约 2 GB,4K KV 缓存
存储 纯文本模型安装后约 14.3 GB
硬件 Apple Silicon Mac;8 GB 内存
平台 macOS 26,Metal 4,Swift 6.2
M2 实测解码 5.1-6.3 tok/s(8 GB M2 MacBook Air)
M5 实测解码 31-35 tok/s(24 GB M5 Pro)

实测结果仅供参考,并非性能上限。提示长度、生成长度、页面缓存状态和硬件都会影响吞吐量。如需在其他 Apple Silicon Mac 上测试,请参考社区基准测试指南

使用 TurboFieldfare

TurboFieldfare 提供原生 Mac 应用、命令行界面和实验性的回环 OpenAI 兼容服务器。它们共用同一个 .gturbo 模型目录,但同一时间只能运行一个拥有模型的产品。

Swift 包暴露了六个产品:

产品 用途
TurboFieldfare 包含运行时和 Metal 内核的 Swift 库
TurboFieldfareMac 用于安装和生成的原生 Mac 应用
TurboFieldfareDecodeService Mac 应用使用的单次本地模型和 Metal 所有者
TurboFieldfareCLI 命令行指令聊天和原始补全
TurboFieldfareServer 回环 OpenAI 兼容的 Chat Completions 服务器
TurboFieldfareRepack 流式模型安装器和安装验证器

系统要求

  • 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 仅支持文本。应用和命令行界面支持用户和模型消息,以及可选的系统指导;它们不暴露或执行工具。回环服务器接受函数工具声明,并返回模型生成的工具调用,供客户端授权和执行。不支持图像、音频和视频。

Mac 应用

克隆仓库,然后从根目录运行应用:

swift build -c release
.build/release/TurboFieldfareMac

构建完整软件包,以便应用及其配套的解码服务都可使用。从此检出目录启动时,应用会将模型存储在 scratch/gemma4.gturbo 中。

安装模型

首次启动时,应用会检查可用存储空间,并显示下载和安装后的大小。选择 下载 开始。

安装程序不会在本地生成完整的源检查点。它会从固定的 Hugging Face 版本中流式传输所需的字节范围,并在数据到达时直接将其重新打包成 .gturbo 布局。这避免了在磁盘上保留第二个完整检查点,并限制了临时内存的使用。

首次安装会通过 Hugging Face 的范围请求传输约 15 GB 数据。网络速度和 Hugging Face 的响应时间各不相同,因此可能需要一些时间。完成的 .gturbo 安装占用约 14.3 GB 空间,并且只有在其清单和文件哈希值验证通过后才会被接受。安装过程不会将模型加载到内存中。

加载并生成

安装完成后:

  1. 选择 加载模型
  2. 在编辑器中输入提示词。
  3. 选择 生成,或按 Command+Return。
  4. 点击停止按钮或按 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": "解释为什么分块预填充能在控制内存的同时减少首 token 延迟。"}
]
swift run -c release TurboFieldfareCLI \
  --model scratch/gemma4.gturbo \
  --messages-file messages.json

此方式与 Mac 应用的消息格式相同。CLI 的响应上限通过 --max-new 设置,默认为 1024 个 token。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 可隐藏该页脚信息。

本地 OpenAI 兼容服务器

构建服务器并指向已安装的模型:

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 利用常驻权重计算注意力(attention)和路由器(router)。CPU 根据路由器选出的前 8 个专家 ID,对照该层的 16 槽 LFU 缓存进行规划,然后通过 Metal 可见缓冲区中的有界并行 pread 调用来填充缓存缺失。在这些读取操作运行的同时,Metal 计算常驻共享专家分支,最后将共享输出和路由输出合并。

提示预填充(prompt prefill)使用最多 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 个全注意力层提供线性存储
  • 精确的 split-K/V 解码注意力,具有独立的归一化 K 和 V 路径
  • 一个 Swift 库、流式安装器、命令行界面、回环 OpenAI 兼容服务器,以及一个带有一次性本地解码服务的原生 SwiftUI/AppKit Mac 应用

当前范围是在至少 8 GB 内存的 Apple Silicon Mac 上,对固定的 Gemma 4 26B-A4B 指令检查点进行纯文本推理。

未来工作

  • 开发 iPhone 和 iPad 应用,并在移动硬件上测试推理速度和内存占用。
  • 对更多 Apple Silicon Mac 进行基准测试,特别是基础款 16 GB M4 Mac mini 及其他 8 GB 机型。

实验与技术文档

塑造 TurboFieldfare 的实验 详细介绍了最大收益、看似合理但失败的思路,以及在更严格验证下被推翻的早期结果。完整的 实验记录 保留了全部 103 条审核条目,作为可查阅的参考。

实用入口:

许可与模型条款

TurboFieldfare 的源代码和文档采用 Apache License 2.0 许可。

模型权重不包含在内。安装程序会从指定的 Hugging Face 检查点单独下载,权重受其原始条款约束。模型及 Swift 包许可审查详见 THIRD_PARTY_NOTICES.md

TurboFieldfare 是一个独立研究项目,与 Google 无关联、未获其赞助或认可。

后记与项目名称

感谢您关注这个项目!

我是 Andrey Mikhaylov。你可以在 LinkedIn 上找到我。我是 TurboFieldfare 的作者,也是一名 iOS 和 Metal 工程师。我的工作主要涉及图像、视频以及设备端 AI。

我把这个项目献给我的妻子 Sasha,她是我认识的最支持我的人。即使在我最艰难的时刻,她也始终陪伴在我身边。她热爱野生动物,喜欢观鸟,还在我们当地的观鸟社区做志愿者。因为她,我也对鸟类和自然有了更深的亲近感。

TurboFieldfare 这个名字来源于田鸫,它是鸫科的一员,也是我最喜欢的鸟。它不是最引人注目或颜色最鲜艳的鸟,但它绝对有自己的个性和独特之处。我认为这个项目也是如此:它可能不是最实用的,但我用我最喜欢的工具(尤其是 Metal)在我最喜欢的领域——设备端机器学习推理——构建了它。它绝对有自己的个性和独特之处。

下次你出门时,摸摸草地,听听鸟鸣。有时候,这就是你能做的最美好的事情。如果可以的话,也请支持你当地的野生动物社区。他们做着重要的工作。

谢谢!

原始来源: Hacker News

评论 (0)