我将vLLM的服务栈移植到C++20:66 MiB二进制,推理时无Python,输出与vLLM逐token核对

Reddit r/LocalLLaMA 工具

摘要

作者将vLLM的服务栈移植到C++20,生成一个66 MiB的二进制文件,推理时无Python,可逐token与vLLM核对,且在测试硬件上吞吐量具竞争力。

我是作者本人,所以请适当打折这份热情。这是一个与官方无关的社区移植项目,并未获得vLLM项目背书,但项目本身用vLLM来验证正确性。起因:我喜欢vLLM,但这里安装一套vLLM需要9.1 GiB的virtualenv,而我想把推理嵌入到其他软件中,尤其是在进程里带解释器会有问题的机器上。而且说实话,Python依赖在部署上有另一套故事,涉及安全性(供应链攻击)以及Python本身的臃肿。所以vllm.cpp就是用C++20从零重写的vLLM服务栈。名字还没最终定,在想到更好的名字之前先叫vllm.cpp。支持连续批处理(continuous batching)、分块分页KV(block-paged KV)、自动前缀缓存、投机解码(speculative decoding),以及一个兼容OpenAI的服务器。它可以构建成一个66 MiB的二进制文件,运行时不需要Python和PyTorch。比起体积,我更在意的是验证门槛。每种架构都会在相同负载下与固定版本的vLLM oracle逐token核对,上游自己的测试模块也会和代码在同一提交中移植过来。token id必须一致。目前已有约25种架构。是的,这个项目大量使用了AI辅助。我正在准备后续文章介绍其架构(这是移植项目,部分地方有所偏离,比如支持MLX、Radix Attention等)。速度是大家最关心的问题。从图中可以看到,在高并发下我们几乎与vLLM打平。我只在DGX Spark、Thor和AGX Orin上测试过。在DGX Spark (GB10)上运行Qwen3.6-27B NVFP4,与生产级graph配置的vLLM对比,取3次交错重复的中位数,1024输入/128输出: 并发 vllm.cpp vLLM 比值 1 86.05 82.32 1.045x 2 159.68 158.03 1.011x 4 292.34 290.31 1.007x 8 508.77 505.46 1.007x 16 801.76 789.16 1.016x 32 1095.01 1076.25 1.017x 名义上全面领先,但我们每次运行间的噪声约为0.5%,而六项中有五项差距在1.7%以内。也就是说,在c1上赢了一场,其余五场是平局。我宁愿自己说清楚,免得有人在评论里算出来。每个点的输出都完全一致。内存方面的对比更明确:GPU峰值显存为40,996 MiB对70,531 MiB。不过vLLM会预先预留固定比例,而我们是按工作负载需求分配,所以这是占用足迹的差异,而不是KV更便宜。其他大家常问的数字:在CPU aarch64上,同一GGUF文件的prefill速度是llama.cpp的1.18倍,decode持平;在M4上达到MLX-LM暖启动总时长的97.6%;DeepSeek-V4-Flash 2-bit GGUF在单台Spark上跑到18.69 tok/s,是我能找到的最快GGUF引擎的1.14倍。投机解码已实现:MTP将c1从9.97提升到15.10 tok/s,DFlash从10.16提升到29.32,两者都超过了运行相同投机器的vLLM。它能加载safetensors和GGUF,支持NVFP4、k-quants、i-quants、fp8和bf16。CUDA支持sm_80到sm_121a,CPU支持AVX-512和Arm i8mm,Metal,部分支持Vulkan。模型列表在仓库里,这里不粘贴了。里面也包含一些sglang的片段,以及我一直想在C++引擎中看到的想法,比如radix attention和LPM感知的缓存调度。尚不完善的地方:还有很多东西待构建,比如模型架构、硬件支持;真实硬件上不支持多GPU(tensor parallel在CPU上已验证与tp=1持平,我只有一台机器);LoRA尚未接入服务器;多模态在CLI和库中可用,但HTTP API不支持;没有embedding或reranking模型;不支持ROCm。项目也在快速开发中,所以flag和内部实现会在提交间变动。不过有一个稳定接口,即带版本号的C ABI。欢迎社区帮助移植到新的架构!开始使用时,只需要cmake构建,没有其他依赖: cmake -S . -B build && cmake --build build -j # CPU cmake -S . -B build-cuda -DVLLM_CPP_CUDA=ON -DVLLM_CPP_TRITON=ON # CUDA cmake --build build-cuda -j Apache 2.0许可。https://github.com/mudler/vllm.cpp 基准测试、方法论以及我们落败的项目:https://github.com/mudler/vllm.cpp/blob/main/docs/BENCHMARKS.md 欢迎提问,知无不答!
查看原文

相似文章

vllm-project/vllm v0.20.0rc1

GitHub Releases Watchlist

vLLM 0.20.0rc1 发布,带来吞吐量、量化、投机解码及多硬件支持的重大改进,助力可扩展的大模型推理服务。

vllm-project/vllm v0.20.1

GitHub Releases Watchlist

vLLM v0.20.1 是一个小版本更新,针对这款流行的开源大语言模型推理和服务库,继续保持其高吞吐量和高效内存管理的核心优势。

vllm-project/vllm v0.19.1

GitHub Releases Watchlist

vLLM v0.19.1 发布 - 一个快速易用的开源 LLM 推理和服务库,拥有业界领先的吞吐量,支持 200+ 个模型架构以及包括 NVIDIA/AMD GPU 和 CPU 在内的多样化硬件。

vllm-project/vllm v0.20.0

GitHub Releases Watchlist

vLLM v0.20.0 已发布,这是一个用于高吞吐量 LLM 推理和服务的开源库,特色功能包括 PagedAttention 以及对多种硬件架构的支持。