原生速度的 vLLM transformers 建模后端
Native-speed vLLM transformers modeling backend
Hugging Face 宣布 transformers vLLM 后端现与手写原生 vLLM 实现速度相当甚至更快。模型作者无需移植代码,即可自动利用 transformers 获得超快推理。测试使用 Qwen3-4B(单 GPU)、Qwen3-32B(张量并行)和 Qwen3-235B-A22B-FP8 MoE(数据+专家并行)三种配置,吞吐量均达到或超过原生。该后端通过 torch.fx 静态分析图、AST 重写代码实现动态层融合,支持张量/管道/专家并行及 torch.compile。用户仅需添加 `--model-impl transformers` 标志。目前不支持线性注意力模型但即将支持。
用 transformers 写的模型,现在不用改一行代码就能在 vLLM 里跑到手写实现的水平,模型作者最大的集成痛被抹平了。虽然主要是工程黑魔法,但生态意义不小。
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 提供极其优化的推理技术,例如连续批处理和自定义注意力 kernel。
这一集成现在变得更好了 🚀!
展示
我们将 vLLM 的 transformers 建模后端与 vLLM 手写的原生实现,在三个差异很大的 Qwen3 模型上进行了正面比较:
- 单 GPU 上的 4B 稠密模型
- 张量并行下的 32B 稠密模型
- 235B 参数 FP8 混合专家模型,在同一 8×H100 节点上采用数据并行 + 专家并行
![]() |
|---|
| 结果是: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 并行化、编译、融合 kernel 等等,都有助于充分利用你的硬件来实现超快推理。
![]() |
|---|
| 过去,一个新模型需要分别针对 transformers 集成一次,再针对 vLLM 以自定义优化集成一次 |
当模型作者想要绝对最佳性能时,他们仍然会编写自定义的 vLLM 实现。
![]() |
|---|
| 一个新模型一旦集成到 transformers,现在就能立即在 vLLM 中使用,并达到原生 vLLM 实现的速度 |
最新一版的 vLLM transformers 建模后端会在运行时动态应用推理专用的层融合,从而在兼容的架构上达到自定义代码实现的速度。
它是如何工作的?
vLLM 的 transformers 建模后端现在使用 torch.fx 对模型的计算图进行静态分析。该过程会搜索可被优化的已知模式。在识别出任何模式之后,它会使用 ast(抽象语法树)来操作源代码,并就地重写其中的一些运算。
我们能借此实现什么?
- 融合运算,它们以多对一的方式映射到(超)优化的 vLLM kernel,例如用于 Mixture-of-Experts(MoE)模型中专家并行(EP)的那些 kernel。
- 其他主要的融合运算包括 vLLM 的
MergedColumnParallelLinear和QKVParallelLinear。这些模块让我们能够推断出 TP(张量并行)的并行方案。如果解码器模块列表易于识别,也可以推断出 PP(流水线并行)方案。 - 经过处理的模型仍然完全可(torch)编译,会像专用的 vLLM 模型实现一样,通过
torch.compile和 CUDA Graphs。 - 与 vLLM 模型实现不同,Transformers 模型实现可用于训练。因此,你可以将同一份模型代码用于训练/评测/RL rollout。
如上所示,对于兼容的模型,这带来了原生的 vLLM 推理速度,而无需编写一行代码来为推理优化模型。
我们正在撰写一篇详细的博客文章,深入探讨这些优化推理方法,并详细解释我们如何调整模型以适配它们。
资源
来源:Hugging Face:Blog(RSS) · huggingface.co


