跳转到主要内容

Swiftlet 仅用 4.3GB 内存将 80B Qwen 压缩至 Mac

想象一下,在笔记本电脑或手机上运行一个通常需要数据中心支持的大规模 AI 模型。这就是 Swiftlet 的承诺,一个在 AI 社区引起关注的新 Swift 和 Metal 运行时。它专为 Qwen3-Next 和 Qwen3.5/3.6 系列的混合专家(MoE)模型设计,并且它做了一件非常巧妙的事情:它只将模型的小型密集核心保留在内存中,而大部分专家权重则存储在 SSD 上,按需流式加载。

关键数据

在 M5 Mac 上,Qwen3.6-35B-A3B 的 4 位版本在磁盘上占用 18GB,但峰值内存仅为 2.6GB,解码速度为每秒 7 到 11 个 token。更令人印象深刻的是,Qwen3-Next-80B-A3B 的 4 位版本在磁盘上需要 42GB,但峰值内存仅为 4.3GB,运行速度为每秒 4.5 到 5 个 token。而且,35B 版本现在可以在 iPhone 17 上运行,使用约 2.5GB 内存,速度约为每秒 1 个 token。据开发者称,这是此类模型首次在手机上原生运行,无需连接服务器。

工作原理

那么,诀窍是什么?关键在于细粒度的调度。每一层将每个 token 路由到一小部分专家——80B 版本为 512 个中的 10 个,35B 版本为 256 个中的 8 个。Swiftlet 将密集权重——注意力、DeltaNet 投影、路由器、共享专家和嵌入向量——牢固地保留在内存中,在 4 位下占用约 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 chatswiftlet generate 处理本地执行和基准测试,而 swiftlet-repack 直接从 MLX 检查点构建容器,并支持从 Hugging Face 断点续传下载。作为服务器,swiftlet-server 在回环地址上提供 OpenAI 兼容的聊天补全接口,允许任何 OpenAI 兼容的聊天界面连接到本地模型。作为应用,iOS 版 Priv AI 将 SwiftletCore 嵌入为流式模型引擎,普通用户只需下载即可开始聊天。

准确性与验证

关于正确性,每一层的前向传播都与 mlx-lm 参考实现逐层比较,涵盖 f32 和 int4 量化形式。增量解码也与完整序列结果进行比较,Metal 内核已反复与精确的 CPU 参考进行验证。容器还可以对源检查点进行字节级验证——无论专家是从缓存还是磁盘读取,答案完全相同。

背后的灵感

其灵感路径清晰说明:TurboFieldfare 首先验证了在 Mac 上流式专家用于 Gemma 的可行性,Swiftlet 借鉴了其中一些公开的设计经验,例如使用 pread 将专家流式传输到有界槽池,使用 LFU 加近期策略进行驱逐,以及使用固定步长打包,使一次读取等于一次获取。然而,其余部分是从零开始编写的,约 10,000 行 Swift 和 Metal 代码,处理完全不同的 Qwen 混合架构:Gated DeltaNet 线性注意力、门控 GQA 和具有共享专家的高稀疏 MoE。它甚至在 Metal 中实现了 MLX 风格的 int4/int8 组量化计算,使用字节可寻址内核和 64 位偏移来支持千兆字节的分片。

Image

关键要点

  • 内存效率:Swiftlet 在 Mac 上以仅 4.3GB 的峰值内存运行 80B 参数的 Qwen 模型,在 iPhone 17 上以 2.5GB 运行 35B 版本。
  • 巧妙的架构:它只将密集权重保留在内存中,从 SSD 按需流式加载专家权重。
  • 实际可用性:该项目完全端到端可用,输出经过验证正确。
  • 权衡:每个 token 激活约 3B 参数,因此模型在对话中表现得像大模型,但在事实记忆上像小模型。
  • 多种部署选项:可作为库、命令行工具、服务器和 iOS 应用使用。