在 Apple Silicon 上使用 MTPLX 将本地神经网络速度提升两倍
如果你在 MacBook 上运行过最新的 Qwen 系列模型,你可能已经注意到生成较长的回复时,会明显触及内存带宽瓶颈。通常会使用投机解码来加速,但传统方法有一个令人不快的缺点:你必须在 Mac 宝贵的统一内存中保留第二个小型 draft model。
最近我发现了开发者 Youssof Altoukhi 的 MTPLX 项目。作者决定充分利用 Apple Silicon 架构的性能,以及已经内置于 Qwen 3.5、3.6 和 3.8 等现代模型权重中的多 token 预测 heads (MTP)。
无需第二个模型的 MTP 技巧
大多数现有运行时只是忽略权重中的 MTP heads。MTPLX 的工作方式不同。
模型本身会提前起草多个 token,然后通过 MLX 在单次前向传播中验证整个批次。验证使用 Leviathan 和 Chen 的精确拒绝采样算法,并进行残差校正。
在实践中这意味着什么?没有简化或启发式方法。概率分布与常规逐步生成完全相同。如果你设置 temperature=0.6 和 top_p=0.95,模型会以与不使用 MTP 时完全相同的方式响应,只是速度快得多。
在配备 16 GB 内存的 M4 Mac mini 上,加速比达到 1.6 倍,在 M5 Max 芯片上提升高达 2.24 倍。
内部结构:应用和 CLI
该项目提供两种形式:适用于 macOS 14+ 的原生 GUI 应用程序和经典 CLI 工具。
图形客户端处理所有繁重工作。首次启动时,它会分析可用内存,选择合适的模型,下载模型,设置隔离的 Python 环境,甚至提供风扇管理功能,让你的 MacBook 在长时间任务中不会降频。
如果你更喜欢终端,可以通过 Homebrew 或 pip 安装:
或者通过 pip:
主要功能
- 自动 draft depth 调优。MTP 效率取决于具体芯片和内存总线宽度。
mtplx tune --retune命令在你的硬件上以不同深度(Depth 1、2、3)运行模型,并锁定最快的选项。如果你的配置中 MTP 突然输给常规自回归模式,程序会诚实地禁用 draft。 - 本地兼容服务器。
mtplx serve命令在端口 8000 上启动服务器。它兼容 OpenAI (/v1/chat/completions) 和 Anthropic (/v1/messages) 格式。Claude Code、Cline、Continue 和 Open WebUI 开箱即用。 - 内置 embeddings 和 reranking。你不需要单独的 RAG 服务器。守护进程可以并行持有 MLX embedding 和 reranker 模型,根据请求按需加载到内存中。
- 用于构建自己模型的 Forge 工具。该包包含
mtplx forge工具,可将 Hugging Face 仓库转换为 MLX 格式,微调 MTP adapter,并测量前后的速度。
如何使用服务器
启动服务器后,你可以使用标准请求进行查询:
如果你正在构建 agent 系统或 RAG pipeline,请立即指定搜索模型:
会话保存到 SSD,因此当服务器重启时,之前长对话的上下文几乎可以立即恢复。
项目局限性
没有妥协就没有奇迹,所以请记住以下几点:
- 该工具严格为 Apple Silicon(M1 芯片及更新版本)编写,依赖 MLX 框架。Linux 用户和 NVIDIA GPU 用户应该使用 vLLM 或 SGLang。
- MTPLX 无法将任意 MTP heads 附加到随机模型上,因为权重不匹配会破坏生成的数学准确性。你需要使用作者在 Hugging Face 官方目录中的经过验证的构建(Qwen 3.5、3.6、3.8、Gemma 4),或使用内置的 Forge 从头训练 adapter。
值得一试吗
如果你在 Mac 上编写代码,并通过 Continue 或 Cline 使用本地 LLM,MTPLX 可以提供出色的速度提升,无需购买额外软件。在 Qwen 3.8 27B 等模型上,自动完成响应和代码生成的差异是立即可以感受到的。
该项目采用宽松的 Apache-2.0 许可证分发,源代码干净,可以通过 mtplx bench 命令直接从终端复现基准测试。本地开发的一个绝佳发现。
相关项目