vllm-metal v0.28.0 发布说明 / 新功能介绍
vllm-metal 将 vLLM 的先进调度和内存管理集成到 Apple Silicon 生态系统中,使 Mac 用户能够运行一个兼容 OpenAI 的服务器,高效处理重叠请求。通过结合 vLLM V1 调度器和分页 KV 缓存,以及使用 MLX 和 Metal 执行,vllm-metal 将本地模型执行转变为可扩展的服务问题。
核心架构与集成
vllm-metal 作为上游 vLLM 的插件,利用以下组件:
- vLLM 前端: 提供 V1 调度器、分页 KV 块管理、分块预填充、采样功能,以及支持工具调用解析和流式传输的 OpenAI 兼容服务器。
- MLX 执行: 使用
mlx_lm实现模型,并利用 MLX 在 Apple Silicon 统一内存上执行硬件计算。 - 自定义 Metal 内核: 虽然 vllm-metal 重用了
mlx_lm的逐 token 层(RMSNorm、线性、MoE 和 MLP),但用一个分页变长 Metal 内核替换了标准注意力机制。该内核是 vLLM 统一 Triton 内核的移植版本,通过在cu_seqlens上执行二分查找来确定每个查询 token 的请求归属。
内存管理与分页 KV 缓存
vllm-metal 使用 --gpu-memory-utilization 标志实现内存保护,设定可预测的推理预算,确保 macOS 和其他应用程序有足够的预留空间。系统在启动时运行一次预热流程,以考虑权重和激活值,然后将剩余预算分配给固定的 KV 缓存。
为优化吞吐量,vllm-metal 使用 打包查询 和 分页 KV 存储:
- 打包查询: 与
mlx_lm的填充批处理不同,vllm-metal 将所有已调度的查询 token 打包成一个单一的[total_q, H, D]张量。这使得引擎能够在一次模型前向传播中处理混合步骤(预填充和解码),而无需填充到最长请求长度。 - 分页 KV: KV 缓存以固定大小的页面存储,由每个请求的块表寻址,允许请求动态增长,而无需重新调整连续缓冲区的大小。
性能基准测试
并发服务与延迟
在配备 64 GB 内存的 M5 Pro 上,使用 SiliconBench 代理拆分(100 个多轮提示,每个约 4.6K 输入 token),vllm-metal 在多个方面表现出色:
- Qwen3.8-27B: 在并发级别 2 和 4 时,vllm-metal 实现了最低的首次 token 延迟(TTFT)和端到端延迟。
- Gemma 4 E4B: vllm-metal 在并发级别高达 16 的范围内保持了较低的 TTFT。
- Qwen3.6-35B-A3B: 在并发级别 4 时,vllm-metal 的吞吐量和端到端延迟与使用 RAM 缓存的 oMLX 相当,但 vllm-metal 在 TTFT 方面具有显著优势。
多 token 预测(MTP)
对于 Gemma 4 E4B,vllm-metal 支持通过 MTP 辅助模型进行推测性解码。在并发级别 1 时,MTP 相比无 MTP 生成,将运行时间减少了 15%,输出吞吐量提高了 20%。
M5 硬件加速
在 M5 Mac 上,vllm-metal 会自动使用 NAX 注意力内核,该内核利用 GPU 的张量硬件处理兼容的预填充批处理,相比分块注意力实现更快的预填充速度。
v0.28.0 中的新功能
v0.28.0 版本引入了多项关键功能:
- 模型支持: 支持来自 Qwen3.5、Qwen3.6、Qwen3.8 和 Qwen3-Next 系列的 GGUF 检查点和混合注意力模型。
- 推测性解码: 支持三种方法:Gemma 4 MTP、独立草稿模型和提示查找 n-gram。
- 高级服务功能: 支持 LoRA 适配器、结构化输出,以及通过 MLX 环形后端在多台 Mac 之间实现流水线并行。
- 实验性功能: 支持视觉语言模型、文本嵌入、重排序和语音转文本。
- 前缀缓存: 对于 Qwen3.5 风格的混合模型,vllm-metal 支持
align模式,在块边界保存 GDN 循环状态,以便从缓存的前缀处恢复。
安装与使用
vllm-metal 需要 macOS 15 或更高版本,可通过 Homebrew 安装:
brew tap vllm-project/vllm-metal https://github.com/vllm-project/vllm-metal
brew install vllm-project/vllm-metal/vllm-metal
可以使用 vllm serve 命令启动一个兼容 OpenAI 的服务器,指定模型和内存利用率预算。