支持的模型#
vLLM 支持跨各种任务的生成模型和池化模型。 如果一个模型支持多个任务,您可以通过 --task
参数设置任务。
对于每个任务,我们列出了 vLLM 中已实现的模型架构。 在每个架构旁边,我们列出了一些使用它的流行模型。
模型实现#
vLLM#
如果 vLLM 本地支持某个模型,则可以在 vllm/model_executor/models 中找到其实现。
Transformers#
vLLM 也支持 Transformers 中可用的模型实现。 这目前并非适用于所有模型,但大多数解码器语言模型都受到支持,并且正在计划视觉语言模型支持!
要检查建模后端是否为 Transformers,您可以简单地执行以下操作
from vllm import LLM
llm = LLM(model=..., task="generate") # Name or path of your model
llm.apply_model(lambda model: print(type(model)))
如果它是 TransformersForCausalLM
,则表示它基于 Transformers!
提示
您可以通过为 离线推理 设置 model_impl="transformers"
或为 OpenAI 兼容服务器 设置 --model-impl transformers
来强制使用 TransformersForCausalLM
。
注意
vLLM 可能没有完全优化 Transformers 实现,因此如果将 vLLM 中的原生模型与 Transformers 模型进行比较,您可能会看到性能下降。
支持的特性#
Transformers 建模后端显式支持以下特性
远程代码#
如果您的模型既不受 vLLM 本地支持也不受 Transformers 支持,您仍然可以在 vLLM 中运行它!
只需设置 trust_remote_code=True
,vLLM 即可在 Model Hub 上运行任何与 Transformers 兼容的模型。 如果模型编写者以兼容的方式实现了他们的模型,这意味着您可以在新模型在 Transformers 或 vLLM 中获得官方支持之前运行它们!
from vllm import LLM
llm = LLM(model=..., task="generate", trust_remote_code=True) # Name or path of your model
llm.apply_model(lambda model: print(model.__class__))
为了使您的模型与 Transformers 后端兼容,它需要
from transformers import PreTrainedModel
from torch import nn
class MyAttention(nn.Module):
def forward(self, hidden_states, **kwargs): # <- kwargs are required
...
attention_interface = ALL_ATTENTION_FUNCTIONS[self.config._attn_implementation]
attn_output, attn_weights = attention_interface(
self,
query_states,
key_states,
value_states,
**kwargs,
)
...
class MyModel(PreTrainedModel):
_supports_attention_backend = True
以下是后台发生的事情
配置已加载
MyModel
Python 类从auto_map
加载,并且我们检查模型_supports_attention_backend
。使用
TransformersForCausalLM
后端。 请参阅 vllm/model_executor/models/transformers.py,它利用self.config._attn_implementation = "vllm"
,因此需要使用ALL_ATTENTION_FUNCTION
。
就是这样!
为了使您的模型与 vLLM 的张量并行和/或流水线并行特性兼容,您必须将 base_model_tp_plan
和/或 base_model_pp_plan
添加到模型的配置类中
from transformers import PretrainedConfig
class MyConfig(PretrainedConfig):
base_model_tp_plan = {
"layers.*.self_attn.k_proj": "colwise",
"layers.*.self_attn.v_proj": "colwise",
"layers.*.self_attn.o_proj": "rowwise",
"layers.*.mlp.gate_proj": "colwise",
"layers.*.mlp.up_proj": "colwise",
"layers.*.mlp.down_proj": "rowwise",
}
base_model_pp_plan = {
"embed_tokens": (["input_ids"], ["inputs_embeds"]),
"layers": (["hidden_states", "attention_mask"], ["hidden_states"]),
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_tp_plan
是一个dict
,它将完全限定的层名称模式映射到张量并行样式(目前仅支持"colwise"
和"rowwise"
)。base_model_pp_plan
是一个dict
,它将直接子层名称映射到tuple
类型的list
类型的str
类型的列表您只需要对并非存在于所有流水线阶段的层执行此操作
vLLM 假设只有一个
nn.ModuleList
,它分布在各个流水线阶段tuple
的第一个元素中的list
包含输入参数的名称tuple
的最后一个元素中的list
包含层在您的建模代码中输出到的变量的名称
加载模型#
Hugging Face Hub#
默认情况下,vLLM 从 Hugging Face (HF) Hub 加载模型。
要确定给定的模型是否受到本地支持,您可以检查 HF 仓库内的 config.json
文件。 如果 "architectures"
字段包含下面列出的模型架构,则应受到本地支持。
模型 *不一定需要* 受到本地支持才能在 vLLM 中使用。 Transformers 后端使您能够直接使用其 Transformers 实现(甚至 Hugging Face Model Hub 上的远程代码!)来运行模型。
提示
检查您的模型在运行时是否真的受到支持的最简单方法是运行以下程序
from vllm import LLM
# For generative models (task=generate) only
llm = LLM(model=..., task="generate") # Name or path of your model
output = llm.generate("Hello, my name is")
print(output)
# For pooling models (task={embed,classify,reward,score}) only
llm = LLM(model=..., task="embed") # Name or path of your model
output = llm.encode("Hello, my name is")
print(output)
如果 vLLM 成功返回文本(对于生成模型)或隐藏状态(对于池化模型),则表明您的模型受到支持。
否则,请参阅 添加新模型 以获取有关如何在 vLLM 中实现模型的说明。 或者,您可以 在 GitHub 上打开一个 issue 以请求 vLLM 支持。
使用代理#
以下是使用代理从 Hugging Face 加载/下载模型的一些技巧
为您的会话全局设置代理(或在配置文件中设置)
export http_proxy=http://your.proxy.server:port
export https_proxy=http://your.proxy.server:port
仅为当前命令设置代理
https_proxy=http://your.proxy.server:port huggingface-cli download <model_name>
# or use vllm cmd directly
https_proxy=http://your.proxy.server:port vllm serve <model_name> --disable-log-requests
在 Python 解释器中设置代理
import os
os.environ['http_proxy'] = 'http://your.proxy.server:port'
os.environ['https_proxy'] = 'http://your.proxy.server:port'
ModelScope#
要使用来自 ModelScope 而不是 Hugging Face Hub 的模型,请设置一个环境变量
export VLLM_USE_MODELSCOPE=True
并与 trust_remote_code=True
一起使用。
from vllm import LLM
llm = LLM(model=..., revision=..., task=..., trust_remote_code=True)
# For generative models (task=generate) only
output = llm.generate("Hello, my name is")
print(output)
# For pooling models (task={embed,classify,reward,score}) only
output = llm.encode("Hello, my name is")
print(output)
文本语言模型列表#
生成模型#
有关如何使用生成模型的更多信息,请参阅 此页面。
文本生成 (--task generate
)#
架构 |
模型 |
示例 HF 模型 |
||
---|---|---|---|---|
|
Aquila, Aquila2 |
|
✅︎ |
✅︎ |
|
Arctic |
|
✅︎ |
|
|
Baichuan2, Baichuan |
|
✅︎ |
✅︎ |
|
Bamba |
|
||
|
BLOOM, BLOOMZ, BLOOMChat |
|
✅︎ |
|
|
BART |
|
||
|
ChatGLM |
|
✅︎ |
✅︎ |
|
Command-R |
|
✅︎ |
✅︎ |
|
DBRX |
|
✅︎ |
|
|
DeciLM |
|
✅︎ |
|
|
DeepSeek |
|
✅︎ |
|
|
DeepSeek-V2 |
|
✅︎ |
|
|
DeepSeek-V3 |
|
✅︎ |
|
|
EXAONE-3 |
|
✅︎ |
✅︎ |
|
Falcon |
|
✅︎ |
|
|
FalconMamba |
|
✅︎ |
✅︎ |
|
Gemma |
|
✅︎ |
✅︎ |
|
Gemma 2 |
|
✅︎ |
✅︎ |
|
Gemma 3 |
|
✅︎ |
✅︎ |
|
GLM-4 |
|
✅︎ |
✅︎ |
|
GLM-4-0414 |
|
✅︎ |
✅︎ |
|
GPT-2 |
|
✅︎ |
|
|
StarCoder, SantaCoder, WizardCoder |
|
✅︎ |
✅︎ |
|
GPT-J |
|
✅︎ |
|
|
GPT-NeoX, Pythia, OpenAssistant, Dolly V2, StableLM |
|
✅︎ |
|
|
Granite 3.0, Granite 3.1, PowerLM |
|
✅︎ |
✅︎ |
|
Granite 3.0 MoE, PowerMoE |
|
✅︎ |
✅︎ |
|
Granite MoE Shared |
|
✅︎ |
✅︎ |
|
GritLM |
|
✅︎ |
✅︎ |
|
Grok1 |
|
✅︎ |
✅︎ |
|
InternLM |
|
✅︎ |
✅︎ |
|
InternLM2 |
|
✅︎ |
✅︎ |
|
InternLM3 |
|
✅︎ |
✅︎ |
|
Jais |
|
✅︎ |
|
|
Jamba |
|
✅︎ |
✅︎ |
|
Llama 3.1, Llama 3, Llama 2, LLaMA, Yi |
|
✅︎ |
✅︎ |
|
Mamba |
|
✅︎ |
|
|
MiniCPM |
|
✅︎ |
✅︎ |
|
MiniCPM3 |
|
✅︎ |
✅︎ |
|
Mistral, Mistral-Instruct |
|
✅︎ |
✅︎ |
|
Mixtral-8x7B, Mixtral-8x7B-Instruct |
|
✅︎ |
✅︎ |
|
MPT, MPT-Instruct, MPT-Chat, MPT-StoryWriter |
|
✅︎ |
|
|
Nemotron-3, Nemotron-4, Minitron |
|
✅︎ |
✅︎ |
|
OLMo |
|
✅︎ |
|
|
OLMo2 |
|
✅︎ |
|
|
OLMoE |
|
✅︎ |
✅︎ |
|
OPT, OPT-IML |
|
✅︎ |
|
|
Orion |
|
✅︎ |
|
|
Phi |
|
✅︎ |
✅︎ |
|
Phi-4, Phi-3 |
|
✅︎ |
✅︎ |
|
Phi-3-Small |
|
✅︎ |
|
|
Phi-3.5-MoE |
|
✅︎ |
✅︎ |
|
Persimmon |
|
✅︎ |
|
|
Qwen |
|
✅︎ |
✅︎ |
|
QwQ, Qwen2 |
|
✅︎ |
✅︎ |
|
Qwen2MoE |
|
✅︎ |
|
|
Qwen3 |
|
✅︎ |
✅︎ |
|
Qwen3MoE |
|
✅︎ |
✅︎ |
|
StableLM |
|
✅︎ |
|
|
Starcoder2 |
|
✅︎ |
|
|
Solar Pro |
|
✅︎ |
✅︎ |
|
TeleChat2 |
|
✅︎ |
✅︎ |
|
TeleFLM |
|
✅︎ |
✅︎ |
|
XVERSE |
|
✅︎ |
✅︎ |
|
MiniMax-Text |
|
✅︎ |
|
|
Zamba2 |
|
注意
目前,ROCm 版本的 vLLM 仅支持 Mistral 和 Mixtral,上下文长度最长为 4096。
池化模型#
有关如何使用池化模型的更多信息,请参阅 此页面。
重要提示
由于某些模型架构同时支持生成任务和池化任务,因此您应显式指定任务类型,以确保模型在池化模式下使用而不是生成模式。
文本嵌入 (--task embed
)#
架构 |
模型 |
示例 HF 模型 |
||
---|---|---|---|---|
|
基于 BERT |
|
||
|
基于 Gemma 2 |
|
✅︎ |
|
|
GritLM |
|
✅︎ |
✅︎ |
|
基于 Llama |
|
✅︎ |
✅︎ |
|
基于 Qwen2 |
|
✅︎ |
✅︎ |
|
基于 RoBERTa |
|
||
|
基于 XLM-RoBERTa |
|
注意
ssmits/Qwen2-7B-Instruct-embed-base
具有未正确定义的 Sentence Transformers 配置。 您应该通过传递 --override-pooler-config '{"pooling_type": "MEAN"}'
手动设置平均池化。
注意
Alibaba-NLP/gte-Qwen2-1.5B-instruct
的 HF 实现被硬编码为使用因果注意力,尽管 config.json
中显示的内容并非如此。 为了比较 vLLM 与 HF 的结果,您应该在 vLLM 中设置 --hf-overrides '{"is_causal": true}'
,以便两个实现彼此一致。
对于 1.5B 和 7B 变体,您还需要启用 --trust-remote-code
才能加载正确的 tokenizer。 请参阅 HF Transformers 上的相关 issue。
如果您的模型不在上面的列表中,我们将尝试使用 as_embedding_model()
自动转换模型。 默认情况下,整个提示的嵌入是从与最后一个 token 对应的归一化隐藏状态中提取的。
奖励建模 (--task reward
)#
架构 |
模型 |
示例 HF 模型 |
||
---|---|---|---|---|
|
基于 InternLM2 |
|
✅︎ |
✅︎ |
|
基于 Llama |
|
✅︎ |
✅︎ |
|
基于 Qwen2 |
|
✅︎ |
✅︎ |
|
基于 Qwen2 |
|
✅︎ |
✅︎ |
如果您的模型不在上面的列表中,我们将尝试使用 as_reward_model()
自动转换模型。 默认情况下,我们直接返回每个 token 的隐藏状态。
重要提示
对于过程监督奖励模型,例如 peiyi9979/math-shepherd-mistral-7b-prm
,应显式设置池化配置,例如:--override-pooler-config '{"pooling_type": "STEP", "step_tag_id": 123, "returned_token_ids": [456, 789]}'
。
分类 (--task classify
)#
架构 |
模型 |
示例 HF 模型 |
||
---|---|---|---|---|
|
Jamba |
|
✅︎ |
✅︎ |
|
基于 Qwen2 |
|
✅︎ |
✅︎ |
如果您的模型不在上述列表中,我们将尝试使用 as_classification_model()
自动转换模型。默认情况下,类别概率从对应于最后一个 token 的 softmax 隐藏状态中提取。
句子对评分 (--task score
)#
多模态语言模型列表#
以下模态取决于模型而支持
文本 (Text)
图像 (Image)
视频 (Video)
音频 (Audio)
支持由 +
连接的任何模态组合。
例如:
T + I
表示该模型支持仅文本、仅图像以及文本与图像结合的输入。
另一方面,由 /
分隔的模态是互斥的。
例如:
T / I
表示该模型支持仅文本和仅图像输入,但不支持文本与图像结合的输入。
请参阅此页面,了解如何将多模态输入传递给模型。
重要提示
要为每个文本提示启用多个多模态项目,您必须设置 limit_mm_per_prompt
(离线推理)或 --limit-mm-per-prompt
(在线服务)。例如,要启用每个文本提示最多传递 4 张图像
离线推理
llm = LLM(
model="Qwen/Qwen2-VL-7B-Instruct",
limit_mm_per_prompt={"image": 4},
)
在线服务
vllm serve Qwen/Qwen2-VL-7B-Instruct --limit-mm-per-prompt image=4
注意
vLLM 目前仅支持将 LoRA 添加到多模态语言模型的主干网络。
生成模型#
有关如何使用生成模型的更多信息,请参阅 此页面。
文本生成 (--task generate
)#
架构 |
模型 |
输入 |
示例 HF 模型 |
|||
---|---|---|---|---|---|---|
|
Aria |
T + I+ |
|
✅︎ |
✅︎ |
|
|
Aya Vision |
T + I+ |
|
✅︎ |
✅︎ |
|
|
BLIP-2 |
T + IE |
|
✅︎ |
✅︎ |
|
|
Chameleon |
T + I |
|
✅︎ |
✅︎ |
|
|
DeepSeek-VL2 |
T + I+ |
|
✅︎ |
✅︎ |
|
|
Florence-2 |
T + I |
|
|||
|
Fuyu |
T + I |
|
✅︎ |
✅︎ |
|
|
Gemma 3 |
T + I+ |
|
✅︎ |
✅︎ |
⚠️ |
|
GLM-4V |
T + I |
|
✅︎ |
✅︎ |
✅︎ |
|
H2OVL |
T + IE+ |
|
✅︎ |
✅︎* |
|
|
Idefics3 |
T + I |
|
✅︎ |
✅︎ |
|
|
InternVideo 2.5, InternVL 2.5, Mono-InternVL, InternVL 2.0 |
T + IE+ |
|
✅︎ |
✅︎ |
|
|
Llama-4-17B-Omni-Instruct |
T + I+ |
|
✅︎ |
✅︎ |
|
|
LLaVA-1.5 |
T + IE+ |
|
✅︎ |
✅︎ |
|
|
LLaVA-NeXT |
T + IE+ |
|
✅︎ |
✅︎ |
|
|
LLaVA-NeXT-Video |
T + V |
|
✅︎ |
✅︎ |
|
|
LLaVA-Onevision |
T + I+ + V+ |
|
✅︎ |
✅︎ |
|
|
MiniCPM-O |
T + IE+ + VE+ + AE+ |
|
✅︎ |
✅︎ |
✅︎ |
|
MiniCPM-V |
T + IE+ + VE+ |
|
✅︎ |
✅︎ |
✅︎ |
|
Mistral3 |
T + I+ |
|
✅︎ |
✅︎ |
|
|
Llama 3.2 |
T + I+ |
|
|||
|
Molmo |
T + I+ |
|
✅︎ |
✅︎ |
✅︎ |
|
NVLM-D 1.0 |
T + I+ |
|
✅︎ |
✅︎ |
|
|
PaliGemma, PaliGemma 2 |
T + IE |
|
✅︎ |
⚠️ |
|
|
Phi-3-Vision, Phi-3.5-Vision |
T + IE+ |
|
✅︎ |
✅︎ |
|
|
Phi-4-multimodal |
T + I+ / T + A+ / I+ + A+ |
|
✅︎ |
||
|
Pixtral |
T + I+ |
|
✅︎ |
✅︎ |
|
|
Qwen-VL |
T + IE+ |
|
✅︎ |
✅︎ |
✅︎ |
|
Qwen2-Audio |
T + A+ |
|
✅︎ |
✅︎ |
|
|
QVQ, Qwen2-VL |
T + IE+ + VE+ |
|
✅︎ |
✅︎ |
✅︎ |
|
Qwen2.5-VL |
T + IE+ + VE+ |
|
✅︎ |
✅︎ |
✅︎ |
|
Skywork-R1V-38B |
T + I |
|
✅︎ |
✅︎ |
|
|
SmolVLM2 |
T + I |
|
✅︎ |
✅︎ |
|
|
Ultravox |
T + AE+ |
|
✅︎ |
✅︎ |
✅︎ |
^ 您需要通过 --hf-overrides
设置架构名称,以匹配 vLLM 中的架构名称。
• 例如,要使用 DeepSeek-VL2 系列模型
--hf-overrides '{"architectures": ["DeepseekVLV2ForCausalLM"]}'
E 预计算的嵌入可以作为此模态的输入。
+ 每个文本提示可以为此模态输入多个项目。
重要提示
V0(而非 V1)目前支持平移和扫描图像预处理。您可以通过传递 --mm-processor-kwargs '{"do_pan_and_scan": True}'
来启用它。
警告
V0 和 V1 都支持 Gemma3ForConditionalGeneration
用于仅文本输入。但是,它们处理文本 + 图像输入的方式存在差异
V0 正确实现了模型的注意力模式
在对应于同一图像的图像 token 之间使用双向注意力
对其他 token 使用因果注意力
通过(朴素的)带有掩码张量的 PyTorch SDPA 实现
注意:对于带有图像的长提示,可能会占用大量内存
V1 目前使用简化的注意力模式
对所有 token 使用因果注意力,包括图像 token
生成合理的输出,但不匹配原始模型对于文本 + 图像输入的注意力,尤其是在
{"do_pan_and_scan": True}
的情况下未来将更新以支持正确的行为
存在此限制是因为 vLLM 的注意力后端尚不支持该模型的混合注意力模式(图像双向,否则因果)。
注意
一旦我们支持 FlashAttention 以外的后端,h2oai/h2ovl-mississippi-2b
将在 V1 中可用。
注意
要使用 TIGER-Lab/Mantis-8B-siglip-llama3
,您在运行 vLLM 时必须传递 --hf_overrides '{"architectures": ["MantisForConditionalGeneration"]}'
。
注意
官方的 openbmb/MiniCPM-V-2
尚不可用,因此我们目前需要使用一个分支 (HwwwH/MiniCPM-V-2
)。有关更多详细信息,请参阅:Pull Request #4087
警告
对于 V0 和 V1,我们的 PaliGemma 实现都存在与 Gemma 3 相同的问题(见上文)。
池化模型#
有关如何使用池化模型的更多信息,请参阅 此页面。
重要提示
由于某些模型架构同时支持生成任务和池化任务,因此您应显式指定任务类型,以确保模型在池化模式下使用而不是生成模式。
文本嵌入 (--task embed
)#
任何文本生成模型都可以通过传递 --task embed
转换为嵌入模型。
注意
为了获得最佳结果,您应该使用专门为此训练的池化模型。
下表列出了 vLLM 中测试过的模型。
转录 (--task transcription
)#
专门为自动语音识别训练的 Speech2Text 模型。
模型支持策略#
在 vLLM,我们致力于促进第三方模型在我们生态系统中的集成和支持。我们的方法旨在平衡稳健性的需求和支持各种模型的实际限制。以下是我们如何管理第三方模型支持:
社区驱动的支持:我们鼓励社区为添加新模型做出贡献。当用户请求对新模型提供支持时,我们欢迎来自社区的拉取请求 (PR)。这些贡献的评估主要基于它们生成的输出的合理性,而不是与 transformers 等现有实现的严格一致性。贡献征集:非常感谢模型供应商直接提交 PR!
尽力保持一致性:虽然我们的目标是在 vLLM 中实现的模型与 transformers 等其他框架之间保持一定程度的一致性,但完全对齐并不总是可行的。加速技术和低精度计算的使用等因素可能会引入差异。我们的承诺是确保已实现的模型功能正常并产生合理的结果。
提示
当比较 Hugging Face Transformers 中
model.generate
的输出与 vLLM 中llm.generate
的输出时,请注意前者读取模型的生成配置文件(即 generation_config.json)并应用默认的生成参数,而后者仅使用传递给函数的参数。比较输出时,请确保所有采样参数都相同。问题解决和模型更新:鼓励用户报告他们在使用第三方模型时遇到的任何错误或问题。建议的修复应通过 PR 提交,并清楚地解释问题和建议解决方案背后的原理。如果一个模型的修复影响到另一个模型,我们依靠社区来强调和解决这些跨模型依赖关系。注意:对于 bugfix PR,告知原始作者以征求他们的反馈是一种良好的礼仪。
监控和更新:对特定模型感兴趣的用户应监控这些模型的提交历史记录(例如,通过跟踪 main/vllm/model_executor/models 目录中的更改)。这种积极主动的方法有助于用户及时了解可能影响他们使用的模型的更新和更改。
选择性关注:我们的资源主要 направлены 在用户兴趣和影响显著的模型上。使用频率较低的模型可能会受到较少的关注,我们依靠社区在其维护和改进中发挥更积极的作用。
通过这种方法,vLLM 营造了一个协作环境,核心开发团队和更广泛的社区共同为我们生态系统中支持的第三方模型的稳健性和多样性做出贡献。
请注意,作为推理引擎,vLLM 不会引入新模型。因此,vLLM 支持的所有模型在这方面都是第三方模型。
我们对模型进行以下级别的测试