展示 HN: 在 Mac 上用 4.3 GB 内存运行 80B Qwen,在 iPhone 上运行 35B
在普通的苹果设备上运行 35B 和 80B Qwen 模型,包括 iPhone。Swiftlet 是 Qwen3-Next 和 Qwen3.5/3.6 MoE 混合模型系列的 Swift + Metal 运行时。它仅保留模型的小密集核心驻留在内存中,并按需从存储中流式传输路由的专家混合权重。结果: 模型 磁盘峰值内存 解码速度 (M5 Mac) Qwen3.6-35B-A3B, 4位 18 GB 2.6 GB 7 至 11 tok/s Qwen3-Next-80B-A3B, 4位 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 # 从 Hugging Face 下载 35B 容器(可恢复): .build/release/swiftlet-repack \ --from-hf Leonickson/Qwen3.6-35B-A3B-qpack \ --output ~/models/qwen3.6-35b.qpack # 或者 80B(磁盘占用 42 GB,仍然只需约 4.3 GB 内存): .build/release/swiftlet-repack \ --from-hf Leonickson/Qwen3-Next-80B-A3B-qpack \ --output ~/models/qwen3-next-80b.qpack # 聊天(应用模型聊天模板,禁用推理块, # 保持对话状态,以便后续自动填充仅新回合的内容): .build/release/swiftlet chat ~/models/qwen3.6-35b.qpack \ " 谁写了《百年孤独》? " " 他用什么语言写的? " # 单次生成和统计: .build/release/swiftlet generate ~/models/qwen3.6-35b.qpack \ --gpu --chat --prompt " 用一段话解释专家流式传输。 " # OpenAI 兼容服务器(仅环回): .build/release/swiftlet-server --model ~/models/qwen3.6-35b.qpack --port 8080 相同的命令还可以重新打包原始 MLX 检查点( --from-hf mlx-community/... 或 --source /path/to/checkpoint )。要求:苹果硅,macOS 14+ 或 iOS 17+,容器的免费 SSD 空间(35B 需要 18 GB,80B 需要 42 GB)。在你的手机上尝试 35B 在 iPhone 上的 Priv AI 中运行,可在 App Store 中找到:打开设置,然后选择实验模型,下载模型。它从存储中流式传输,并在设备上进行对话,无需涉及服务器。实验模型功能随最新版本的应用一起发布,该版本仍在 App Store 审核中,因此可能在几天内才会出现。如果你今天想体验手机应用,可以从源代码构建应用:应用是开源的,托管在 leonickson1/localLLM。将此仓库克隆到其旁边作为 swiftlet,打开 Xcode 项目,并在你的 iPhone 上运行。它是如何工作的 这些模型在每个 token 上仅激活约 3B 的参数。每一层将每个 token 路由到 10 个(512 个专家中的 80B)或 8 个(256 个专家中的 35B)。Swiftlet:保持密集权重驻留:注意力,DeltaNet 投影,路由器,共享专家,嵌入。大约 1.3 GB(35B)或 2.5 GB(80B)为 4 位;将成千上万的路由专家重新打包到 .qpack 容器中的定长 blob 中,因此获取一个专家正好是从 SSD 的一次预读取,没有 mmap 和无页面缓存冲突;在一个有限的池中缓存热专家,使用 LFU 以及近期驱逐。缓存大小几乎不影响速度(在相同的吞吐量下测量时命中率为 43% 至 70%),因为苹果 SSD 吸收了遗漏;在 Metal 上运行整个前向传递,使用运行时编译的着色器,因此构建时无需 Metal 工具链,同样的代码可在 iOS 上发布。75% 的层使用有固定大小的递归状态的门控 DeltaNet 线性注意力,因此对于这些层在任何上下文长度下没有增长的 KV 缓存。四种使用方式 Swiftlet 首先是一个库: Swift 包。将 SwiftletCore 添加到任何 macOS 或 iOS 应用程序中,使用 SwiftletSession 进行对话,带有流式增量、对话缓存、控制重复的采样和内存压力处理嵌入。 命令行界面。用于本地使用和基准测试的 swiftlet chat 和 swiftlet generate,swiftlet-repack 用于从 MLX 检查点构建容器(包括从 Hugging Face 直接流式传输及恢复)。 服务器。 swiftlet-server 通过环回通信 OpenAI 聊天完成 API,因此任何可以与 OpenAI 兼容端点通信的聊天 UI 都可以使用流式本地模型。 应用。 iOS 上的 Priv AI 嵌入 SwiftletCore 作为其流式模型引擎。最终用户点击下载并聊天。这里没有任何终端专用内容。如果你想自己构建应用,应用本身的开源代码在 leonickson1/localLLM 下(将此仓库克隆到其旁边作为 swiftlet)。正确性 前向传递的每一层(门控 DeltaNet 递归,门控 GQA 注意力,稀疏 MoE 路由)都与 mlx-lm 参考实现进行了验证,使用每层夹具,以 f32 和 int4 量化形式。增量解码是经过验证的。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡