跳到正文
北京时间
原文
Hacker News 热门(buzzing.cc 中文翻译)· leonickson·· 2026-08-04精选AI 评分81

Swiftlet:在 Mac 上运行 80B 版 Qwen(内存 4.3 GB),在 iPhone 上运行 35B 版

Show HN: 在 Mac 上运行 80B 版 Qwen(内存 4.3 GB),在 iPhone 上运行 35B 版

AI 导读

Swiftlet 是一个 Swift + Metal 运行时,可在普通 Apple 设备上运行 Qwen3-Next 和 Qwen3.5/3.6 MoE 混合模型,仅将小型稠密核心驻留内存,按需从存储流式加载路由专家权重。

推荐理由

用流式专家加载把 80B 模型塞进手机,具体 RAM 和速度数字让开发者能直接判断自己设备的上限,而不是停留在商详口号。

正文 · AI 翻译

Swiftlet

Platforms Swift Metal License App Store 35B 80B Built with Claude Code

在普通 Apple 设备(包括 iPhone)上运行 35B 和 80B 的 Qwen 模型。

Swiftlet 是一个面向 Qwen3-Next 和 Qwen3.5/3.6 MoE 混合模型家族的 Swift + Metal 运行时。它只在内存中常驻模型的小型稠密核心,并按需从存储中流式加载路由后的 Mixture-of-Experts 权重。结果如下:

模型 磁盘 峰值内存 解码速度(M5 Mac)
Qwen3.6-35B-A3B,4-bit 18 GB 2.6 GB 7 到 11 tok/s
Qwen3-Next-80B-A3B,4-bit 42 GB 4.3 GB 4.5 到 5 tok/s

35B 模型还能在 iPhone 17 上运行,占用约 2.5 GB 内存,目前速度约为 1 tok/s。据我们所知,这是此类模型首次在手机上原生运行。

状态:端到端可运行。两个模型都能生成正确且经过验证的输出。当前重点是内核速度(解码循环受调度限制,而非 IO 限制,因此还有明显的提升空间)。有一点需要坦诚说明:每个 token 只有约 3B 参数处于激活状态,所以这些模型聊天和写作时像大模型,但回忆事实时像小模型。

快速开始:在 Mac 上试试

git clone https://github.com/leonickson1/Swiftlet.git && cd Swiftlet
swift build -c release

# Download the 35B container from Hugging Face (resumable):
.build/release/swiftlet-repack \
  --from-hf Leonickson/Qwen3.6-35B-A3B-qpack \
  --output ~/models/qwen3.6-35b.qpack

# Or the 80B (42 GB on disk, still only ~4.3 GB of RAM):
.build/release/swiftlet-repack \
  --from-hf Leonickson/Qwen3-Next-80B-A3B-qpack \
  --output ~/models/qwen3-next-80b.qpack

# Chat (applies the model chat template, disables the reasoning block,
# keeps conversation state so follow-ups prefill only the new turn):
.build/release/swiftlet chat ~/models/qwen3.6-35b.qpack \
  "Who wrote One Hundred Years of Solitude?" "What language did he write it in?"

# One-shot generation with stats:
.build/release/swiftlet generate ~/models/qwen3.6-35b.qpack \
  --gpu --chat --prompt "Explain expert streaming in one paragraph."

# OpenAI-compatible server (loopback only):
.build/release/swiftlet-server --model ~/models/qwen3.6-35b.qpack --port 8080

同一条命令也可以重新打包原始 MLX checkpoint(--from-hf mlx-community/... 或 --source /path/to/checkpoint)。

要求:Apple Silicon、macOS 14+ 或 iOS 17+、容器所需的可用 SSD 空间(35B 为 18 GB,80B 为 42 GB)。

在你的手机上试试

35B 可在 iPhone 上通过 App Store 上的 Priv AI 运行:打开 Settings,然后进入 Experimental Models,下载模型。它从存储中流式加载,在设备端聊天,无需服务器参与。

实验性模型(Experimental Models)功能随最新版应用一同发布,目前仍在 App Store 审核中,因此可能还要过几天才会出现。如果你想今天就体验手机端,可以从源码构建应用:该应用已在 leonickson1/localLLM 开源。把这个仓库克隆到它旁边作为 swiftlet,打开 Xcode 项目,然后在你的 iPhone 上运行。

工作原理

这些模型每个 token 仅激活约 3B 参数。每一层将每个 token 路由到 512 个专家中的 10 个(80B)或 256 个中的 8 个(35B)。Swiftlet:

  • 将稠密权重常驻内存:注意力、DeltaNet 投影、路由器、共享专家、嵌入向量。4-bit 下约 1.3 GB(35B)或 2.5 GB(80B);
  • 将数万个被路由的专家重新打包成 .qpack 容器中的固定步长数据块,因此获取一个专家恰好就是从 SSD 读取一次 pread,无需 mmap,也没有 page-cache 抖动;
  • 将热点专家缓存在一个有界池中,采用 LFU 加最近使用淘汰策略。缓存大小几乎不影响速度(在相同吞吐量下测得 43% 到 70% 的命中率),因为 Apple SSD 能吸收未命中;
  • 在 Metal 上以运行时编译的 shader 运行整个前向传播,因此构建时无需 Metal 工具链,同一份代码即可在 iOS 上发布。

75% 的层使用 Gated DeltaNet 线性注意力,具有固定大小的循环状态,因此这些层在任何上下文长度下都没有不断增长的 KV cache。

四种使用方式

Swiftlet 首先是一个库:

  1. Swift 包。将 SwiftletCore 添加到任何 macOS 或 iOS 应用中,并使用 SwiftletSession 进行聊天,内置流式增量、对话缓存、带重复控制的采样以及内存压力处理。
  2. CLI。swiftlet chat 和 swiftlet generate 用于本地使用和基准测试,swiftlet-repack 用于从 MLX 检查点构建容器(包括直接从 Hugging Face 流式下载并支持断点续传)。
  3. 服务器。swiftlet-server 在回环地址上提供 OpenAI chat-completions API,因此任何与 OpenAI 兼容端点通信的聊天 UI 都可以使用流式本地模型。
  4. 一个应用。iOS 上的 Priv AI 将 SwiftletCore 作为其流式模型引擎嵌入。终端用户只需点击下载即可聊天。这里的一切都不只是终端专属的。如果你想要自己构建,该应用本身已在 leonickson1/localLLM 开源(将此仓库克隆到它旁边作为 swiftlet)。

正确性

前向传播的每一层(Gated DeltaNet 循环、门控 GQA 注意力、稀疏 MoE 路由)都通过逐层测试夹具与 mlx-lm 参考实现进行验证,涵盖 f32 和 int4 量化形式。增量解码已针对全序列处理进行验证。Metal kernel 已针对精确的 CPU 参考进行测试,快速和标量 GPU kernel 经验证可产生完全相同的输出。容器可针对其源检查点进行字节级验证。流式放置从不改变模型语义:专家从缓存或磁盘给出的回答完全一致。

swift test

与 TurboFieldfare 的关系

TurboFieldfare 在 Mac 上验证了 Gemma 的专家流式方案,Swiftlet 心怀感激地采纳了其公开发表的若干设计经验:通过 pread 将专家流式传入有界槽池而非使用 mmap,采用 LFU 加最近使用进行淘汰,以固定步长打包专家使一次获取即为一次读取,将下载的字节直接路由到其最终容器位置进行安装,以及在运行时编译 shader。

其余一切都在此从零构建,约 1 万行 Swift 和 Metal 代码,参照 mlx-lm 而非 TurboFieldfare 代码编写:

  • 支持一个架构根本不同的模型家族:Qwen 混合栈,包含 Gated DeltaNet 线性注意力、门控 GQA,以及带共享专家的高稀疏度 MoE(TurboFieldfare 运行的是 Gemma,一个经典的稠密 Transformer);
  • MLX affine int4/int8 分组量化在 Metal 中计算,采用字节寻址内核,以 64 位偏移处理数 GB 的分片,一条协作式 simdgroup GEMV 快速路径,以及显式的冒险管理;
  • 一个经过验证的 CPU 参考实现,以及为每一次内核变更把关的测试夹具基础设施;
  • .qpack 容器与重新打包器、可断点续传的 Hugging Face 流式安装器(带卡顿恢复),以及下载取消;
  • 聊天会话层:针对思考型与非思考型 Qwen 变体的模板处理,带存在惩罚与频率惩罚、最小长度与句子补全停止条件的采样,带增量预填充的对话缓存,以及 iOS 内存压力协调;
  • 端到端的 iPhone 支持,包括应用引擎集成。

colibrì 为缓存与放置策略的思路提供了启发。mlx-lm 全程作为正确性参考。

Swiftlet 是与 Claude Code 协作构建的。

许可证

Apache 2.0。模型权重单独下载,并仍受其自身条款约束(Qwen 模型:Apache 2.0)。参见 THIRD_PARTY_NOTICES.md。

来源:Hacker News 热门(buzzing.cc 中文翻译) · github.com