vLLM 在 Arm CPU 上提速:从“能跑”走向高效推理
导语
CPU 推理一直是大模型部署中的务实选项:它不一定追求极限吞吐,但胜在基础设施普遍、部署成本较低、运维复杂度相对可控。随着 Arm Neoverse 服务器在云和企业数据中心中增加,vLLM 在 Arm CPU 上的表现也变得更重要。vLLM 博客披露,过去数月其与 PyTorch、oneDNN、KleidiAI 等社区协作,对 Arm CPU 推理栈做了一轮从可用性到性能的系统性优化。
核心要点
- 可用性先补齐:Arm CPU 路径新增或完善了预构建 wheels、Docker 镜像,修复崩溃、精度、线程和 CPU 利用率问题,并支持 chunked prefill、prefix caching、INT8 W8A8 / W4A8,以及 GPT-OSS、Whisper、Qwen 3.5 / 3.6 等模型。
- 瓶颈不只在 GEMM:早期分析显示,约 80% 的运行时间花在 dense layer,并调用已高度优化的 BF16 GEMM。但单独看 GEMM 并不是最大问题,真正拖慢端到端推理的是分配器、运行时同步、框架开销、注意力核和量化路径等组合因素。
- 内存分配带来大幅收益:PyTorch 在 Arm Linux 上使用 glibc malloc 时,大块内存复用不理想,反复分配释放会造成页错误和线程竞争。改用 mimalloc 作为默认分配器后,Llama 3.1 8B 离线吞吐提升 2.3 倍,低并发服务场景约有 7 倍收益。
- 高核数同步需要硬件原子指令:在高线程数下,OpenMP 动态调度中的原子 fetch-add 成为热点,paged attention 中甚至有 74% 时间耗在相关路径。Neoverse V2 支持 LSE 原子指令,但原运行时未充分利用。改造 libgomp 后,Llama 3.1 8B 离线吞吐提升 9%,低并发 TPOT 降低 15%。
- 权重预打包降低 dense layer 开销:oneDNN 与 Arm Compute Library 路径允许在模型 warmup 阶段将 BF16 权重转换为更适合内核访问的布局,并在推理时复用。该优化让离线吞吐提升 16%,低并发 TPOT 降低 60%。
- paged attention 终于更贴近 Arm:原 CPU paged attention 在 QK、PV 和 softmax 指数计算上使用参考实现。新实现使用 BFMMLA Advanced SIMD 指令编写自定义 GEMM,并用向量化三阶多项式近似优化 softmax exponential,使 paged attention 最高加速 4 倍,Llama 3.1 8B 离线吞吐提升 12%。
意义与影响
这组优化的价值在于,它把“Arm CPU 能运行 vLLM”推进到“可以更认真地评估 Arm CPU 作为推理服务平台”。对企业而言,CPU 节点通常更容易获得,也更适合低并发、成本敏感或已有基础设施复用的场景。对开源生态而言,改进发生在 PyTorch、oneDNN、OpenMP 运行时和 vLLM 多层栈中,意味着收益不局限于单一补丁。
更重要的是,这篇文章提醒我们:大模型推理性能不是只靠矩阵乘法内核决定。内存分配策略、线程调度、权重布局、attention 细节和量化执行路径,都会在真实服务中放大。Arm CPU 若要在推理市场中占据更多位置,类似的端到端优化会比单点 benchmark 更关键。
来源:vLLM Blog
评论
正在确认登录状态……
正在加载评论……