Swiftlet 让 80B Qwen 在 Mac 上仅占 4.3GB 内存
- Swiftlet 实现 MoE 流式加载—基于 Swift+Metal 的运行时专为 Qwen3-Next 等 MoE 模型设计,仅将稠密核心常驻内存,路由专家权重存放在 SSD,用时按需流式读取,大幅降低内存占用。
- 80B 模型峰值内存仅 4.3GB—在 M5 Mac 上,Qwen3-Next-80B-A3B 的 4-bit 版磁盘占用 42GB,峰值内存仅 4.3GB,速度 4.5–5 tok/s;35B 版内存 2.6GB,速度 7–11 tok/s。
- iPhone 17 原生运行 35B 模型—35B 版本可在 iPhone 17 上原生运行,内存约 2.5GB,速度约 1 token/s,据开发者称是该量级模型首次在手机上不依赖服务器运行。
- 专家调度与缓存策略—每层将 token 路由到 8-10 个专家,稠密权重常驻;专家打包为 .qpack,用 pread 读取,缓存采用 LFU 加近期性淘汰,命中率 43%-70%。
- 开源且已验证正确性—每层前向与 mlx-lm 对拍,增量解码整序列比对,容器字节级校验;项目约一万行 Swift/Metal 代码,以 Apache 2.0 发布,模型权重单独下载。
核心思路
Swiftlet 是一个基于 Swift + Metal 的运行时,专门为 Qwen3-Next 和 Qwen3.5/3.6 这一族 MoE 混合模型设计。它的核心做法是:只让模型的小型稠密核心常驻内存,而真正占体积的路由专家权重平时存放在 SSD 里,使用时按需流式读取。
这种思路直接带来了令人惊讶的内存表现。
性能数字
在 M5 Mac 上,Qwen3.6-35B-A3B 的 4-bit 版本磁盘占用 18GB,但峰值内存只有 2.6GB,解码速度达到 7–11 tok/s。更夸张的是 Qwen3-Next-80B-A3B 的 4-bit 版本,磁盘需要 42GB,但峰值内存被压到 4.3GB,速度也有 4.5–5 tok/s。
此外,35B 版本如今还能在 iPhone 17 上运行,内存约 2.5GB,速度大约 1 tok/s。据开发者称,这是该量级模型第一次在手机上原生运行,全程不依赖服务器。
项目已经端到端可用,两个模型都能输出经过验证的正确结果。不过开发者坦言一个代价:每个 token 实际只激活约 3B 参数,因此这些模型在对话和写作时表现出大模型的语言能力,但事实记忆上仍受限于小模型的规模。
工作原理
调度的精细程度是关键。每一层会把每个 token 路由到 512 个专家中的 10 个(80B 版)或 256 个专家中的 8 个(35B 版)。Swiftlet 将稠密权重——注意力、DeltaNet 投影、路由器、共享专家、嵌入向量——常驻在内存中,4-bit 下约 1.3GB(35B)或 2.5GB(80B)。
成千上万个路由专家被重新打包成固定步长的数据块,装入 .qpack 容器。取一个专家只需对 SSD 做一次 pread,不需要 mmap,也不会扰动页缓存。热门专家缓存在一个有限大小的池子里,采用 LFU 加近期性策略淘汰。实测命中率在 43% 到 70% 之间,而缓存大小对速度影响很小,因为 Apple 的 SSD 足以吸收未命中带来的额外开销。
整个前向传播跑在 Metal 上,使用运行时编译的着色器,因此构建时不需要 Metal 工具链,同一套代码可以直接部署到 iOS。更有意思的是,75% 的层采用 Gated DeltaNet 线性注意力,带有固定大小的循环状态,这意味着无论上下文多长,都不会产生不断膨胀的 KV 缓存——长文本对话的隐藏负担被悄然化解。
四种身份
Swiftlet 不止是一个命令行玩具,它给自己设计了四种用法:
- 作为库:SwiftletCore 可以嵌入任意 macOS 或 iOS 应用,提供带流式增量输出和对话缓存的聊天能力。
- 作为命令行工具:
swiftlet chat和swiftlet generate用于本地推理和基准测试;swiftlet-repack能从 MLX 检查点直接构建容器,并支持从 Hugging Face 断点续传下载。 - 作为服务器:
swiftlet-server在回环地址上提供 OpenAI 兼容的 chat-completions 接口,任何兼容 OpenAI 的聊天界面都能接上本地模型。 - 作为应用:iOS 端的 Priv AI 把 SwiftletCore 嵌成流式模型引擎,普通用户点一下下载即可聊天。
正确性与验证
每一层前向传播都与 mlx-lm 参考实现逐层对拍,覆盖 f32 和 int4 量化形式;增量解码也进行整序列结果比对;Metal 内核则针对精确 CPU 参考反复验证。容器还能与源检查点做字节级校验——专家从缓存或磁盘读取,给出的回答完全一致。
灵感来源与开源
Swiftlet 的灵感脉络清晰:TurboFieldfare 先在 Mac 上验证了 Gemma 的专家流式可行性,Swiftlet 借鉴了其中若干公开设计经验,例如用 pread 将专家流式读入有界槽位池、采用 LFU 加近期性淘汰、固定步长打包等。其余部分基本从零写起,约一万行 Swift 和 Metal 代码,攻克了架构完全不同的 Qwen 混合体系:Gated DeltaNet 线性注意力、门控 GQA,以及带共享专家的高稀疏 MoE。它甚至在 Metal 中实现了 MLX 风格的 int4/int8 分组量化计算,用字节寻址内核和 64 位偏移撑起数 GB 的分片。
要在手机上运行,要求并不苛刻:Apple Silicon、macOS 14+ 或 iOS 17+,再加足够的 SSD 空间(35B 需 18GB,80B 需 42GB)。iPhone 端目前可在 App Store 的 Priv AI 应用中开启 Experimental Models 下载,该功能随新版本发布,正在审核通道中;想立刻体验也可以从源码自行构建。整个项目以 Apache 2.0 许可证发布,模型权重单独下载并遵循各自条款。