vLLM 的 transformers 建模后端实现原生推理速度
Native-speed vLLM transformers modeling backend
Hugging Face 宣布 vLLM 的 transformers 建模后端现在在许多 LLM 架构上达到甚至超过 vLLM 手写原生实现的吞吐。在 Qwen3-4B 单卡、Qwen3-32B 张量并行、Qwen3-235B-A22B-FP8 MoE 数据加专家并行三种配置下,该后端均追平或超过原生吞吐。
TL;DR:对于许多 LLM 架构,transformers vLLM 后端现在与自定义 vLLM 实现一样快(或更快)。模型作者可以自动利用其 transformers 实现,免费获得超快的 vLLM 推理。
# Upgrade the vllm pip package
uv pip install --upgrade vllm --torch-backend auto
transformers 库已成为机器学习的参考建模库。它通过一致的 API 支持 450 多种架构,其设计的主要目标是模型实现自包含且易于理解。阅读 transformers 代码使贡献者能够轻松了解架构的工作原理,然后将其移植到其他框架,如 vLLM、SGLang、MLX、llama.cpp 等。
我们已完全接受在生态系统中的这一角色,并投入大量精力使其更便捷。朝着这个方向迈出的一大步是去年将 transformers 作为建模后端集成到 vLLM 中。这使得模型作者可以在 vLLM 中运行 transformers 模型(包括 LLM 和 VLM),而无需移植任何内容。Transformers 提供建模代码,vLLM 提供极其优化的推理技术,如连续批处理和自定义注意力内核。
这一集成现在变得更好了 🚀!
展示
我们将 vLLM 的 transformers 建模后端与 vLLM 手写的原生实现,在三个截然不同的 Qwen3 模型上进行了正面比较:
- 单 GPU 上的 4B 稠密模型
- 张量并行下的 32B 稠密模型
- 在同一 8×H100 节点上,数据并行 + 专家并行的 235B 参数 FP8 混合专家模型
![]() |
|---|
| 结果:transformers 建模后端现在在每一个模型上都达到或超越原生吞吐量。 |
通过 transformers 建模后端运行任何* Hugging Face 模型只需一个标志——--model-impl transformers。它与通常的并行选项组合使用,因此您的服务设置无需任何更改:
# Qwen3-4B dense, single GPU
vllm serve Qwen/Qwen3-4B --model-impl transformers
# Qwen3-32B dense, tensor-parallel across 2 GPUs
vllm serve Qwen/Qwen3-32B --model-impl transformers --tensor-parallel-size 2
# Qwen3-235B-A22B-FP8 MoE, data-parallel + expert-parallel across 8 GPUs
vllm serve Qwen/Qwen3-235B-A22B-FP8 --model-impl transformers --data-parallel-size 8 --enable-expert-parallel
# add --max-model-len 8192 if your node is memory constrained
*目前不支持使用线性注意力的模型,但很快就会支持!代码位于 Hub 仓库中的自定义模型不太可能工作,因为它们不是以合规方式编写的。
我们如何测量
每个模型在三种条件下进行比较,除代码路径外,其他方面完全相同:
- 原生——
--model-impl vllm,vLLM 手写模型(要达到的标准) - 之后——
--model-impl transformers带有 PR - 之前——
--model-impl transformers不带 PR
完整、可复现的运行器以 gist 形式提供:benchmark.sh
那么,有什么新变化?
vLLM 的 transformers 建模后端过去将注意力视为推理的瓶颈。通过在运行时插入 vLLM 的注意力实现,我们可以让 transformers 模型在 vLLM 引擎内高效运行。但部署有许多维度,只有自定义移植才能针对性地提取最大推理性能。跨 GPU 并行化、编译、融合内核等,都有助于利用您的硬件实现超快推理。
![]() |
|---|
| 过去,一个新模型需要为 transformers 集成一次,再为 vLLM 进行自定义优化集成一次 |
当模型作者想要绝对最佳性能时,他们仍然在编写自定义 vLLM 实现。
![]() |
|---|
| 现在,一个新模型一旦集成到 transformers,就可以立即在 vLLM 中使用,并达到原生 vLLM 实现的速度 |
vLLM 的 transformers 建模后端最新版本会在运行时动态应用推理专用的层融合,从而在兼容架构上达到自定义代码实现的速度。
它是如何工作的?
vLLM 的 transformers 建模后端现在使用 torch.fx 对模型的计算图进行静态分析。该过程会搜索可优化的已知模式。在识别出任何模式后,它会使用 ast(抽象语法树)来操作源代码,并就地重写部分运算。
我们能借此实现什么?
- 多对一映射到(超)优化 vLLM 内核的融合运算,例如用于混合专家(MoE)模型中专家并行化(EP)的那些内核。
- 其他主要的融合运算包括 vLLM 的
MergedColumnParallelLinear和QKVParallelLinear。这些模块让我们能够推断 TP(张量并行)的并行方案。如果解码器块列表易于识别,也可以推断 PP(流水线并行)方案。 - 经过处理的模型仍然完全可(torch)编译,会像专用的 vLLM 模型实现一样通过
torch.compile和 CUDA Graphs。 - 与 vLLM 模型实现不同,Transformers 模型实现可用于训练。因此你可以将同一份模型代码用于训练/评估/RL 采样。
如上所示,这能让兼容模型达到原生 vLLM 推理速度,而无需编写一行代码来为推理优化模型。
我们正在撰写一篇详细的博客文章,以深入探讨这些优化推理方法,并详细解释我们如何操作模型以适配它们。
资源
来源:Hugging Face Blog · huggingface.co


