支持的模型列表#
vLLM 支持跨各种任务的生成模型和池化模型。如果一个模型支持多个任务,您可以通过 --task
参数设置任务。
对于每个任务,我们列出了 vLLM 中已实现的模型架构。在每个架构旁边,我们包含了一些使用它的流行模型。
加载模型#
HuggingFace Hub#
默认情况下,vLLM 从 HuggingFace (HF) Hub 加载模型。
要确定是否支持给定的模型,您可以检查 HF 仓库内的 config.json
文件。如果 "architectures"
字段包含下面列出的模型架构,那么理论上应该支持它。
提示
检查您的模型是否真正在运行时得到支持的最简单方法是运行以下程序
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 支持。
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(model.__class__))
如果是 TransformersModel
,则表示它基于 transformers
!
支持的特性#
量化#
Transformers 后备支持 vLLM 中可用的大多数量化(GGUF 除外)。有关 vllm 中支持的量化的更多信息,请参阅 量化页面。
LoRA#
LoRA 尚未在 transformers 后备上支持!请务必打开一个 issue,我们将与 transformers
团队一起努力解决这个问题!
通常,transformers
模型通过 load_adapters
API 加载权重,这取决于 PEFT。我们需要做一些工作,要么使用此 API(目前这会导致某些权重未被标记为已加载),要么相应地替换模块。
关于这可能是什么样子的提示
class TransformersModel(nn.Module, SupportsLoRA):
def __init__(*):
...
self.model.load_adapter(vllm_config.load_config.model_loader_extra_config["qlora_adapter_name_or_path"])
阻碍因素是您需要指定支持的 lora 层,而我们理想情况下希望加载检查点内的任何内容!
远程代码#
此后备也意味着 hub 上任何可以在 transformers
中与 trust_remote_code=True
一起使用且正确实现注意力的模型都可以在生产中使用!
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__))
模型只需要以下两件事
from transformers import PreTrainedModel
from torch import nn
class MyAttention(nn.Module):
def forward(self, hidden_states, **kwargs): # <- kwargs are required
...
attention_interface = 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
。使用
TransformersModel
后端。请参阅/model_executors/models/transformers
,它利用self.config._attn_implementation = "vllm"
,因此需要使用ALL_ATTENTION_FUNCTION
。
就是这样!
ModelScope#
要使用来自 ModelScope 而不是 HuggingFace 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 |
|
✅︎ |
✅︎ |
|
BLOOM, BLOOMZ, BLOOMChat |
|
✅︎ |
|
|
BART |
|
||
|
ChatGLM |
|
✅︎ |
✅︎ |
|
Command-R |
|
✅︎ |
✅︎ |
|
DBRX |
|
✅︎ |
|
|
DeciLM |
|
✅︎ |
|
|
DeepSeek |
|
✅︎ |
|
|
DeepSeek-V2 |
|
✅︎ |
|
|
DeepSeek-V3 |
|
✅︎ |
|
|
EXAONE-3 |
|
✅︎ |
✅︎ |
|
Falcon |
|
✅︎ |
|
|
FalconMamba |
|
✅︎ |
✅︎ |
|
Gemma |
|
✅︎ |
✅︎ |
|
Gemma2 |
|
✅︎ |
✅︎ |
|
GLM-4 |
|
✅︎ |
✅︎ |
|
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 |
|
✅︎ |
✅︎ |
|
GritLM |
|
✅︎ |
✅︎ |
|
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 |
|
✅︎ |
|
|
StableLM |
|
✅︎ |
|
|
Starcoder2 |
|
✅︎ |
|
|
Solar Pro |
|
✅︎ |
✅︎ |
|
TeleChat2 |
|
✅︎ |
✅︎ |
|
XVERSE |
|
✅︎ |
✅︎ |
注意
目前,ROCm 版本的 vLLM 仅支持上下文长度高达 4096 的 Mistral 和 Mixtral。
池化模型#
有关如何使用池化模型的更多信息,请参阅 此页面。
重要提示
由于某些模型架构同时支持生成和池化任务,因此您应显式指定任务类型,以确保模型以池化模式而不是生成模式使用。
文本嵌入 (--task embed
)#
架构 |
模型 |
示例 HF 模型 |
||
---|---|---|---|---|
|
基于 BERT |
|
||
|
基于 Gemma2 |
|
✅︎ |
|
|
GritLM |
|
✅︎ |
✅︎ |
|
基于 Llama |
|
✅︎ |
✅︎ |
|
基于 Qwen2 |
|
✅︎ |
✅︎ |
|
基于 RoBERTa |
|
||
|
基于 XLM-RoBERTa |
|
注意
ssmits/Qwen2-7B-Instruct-embed-base
具有不正确定义的 Sentence Transformers 配置。您应该通过传递 --override-pooler-config '{"pooling_type": "MEAN"}'
手动设置平均池化。
注意
与基础 Qwen2 不同,Alibaba-NLP/gte-Qwen2-7B-instruct
使用双向注意力。您可以设置 --hf-overrides '{"is_causal": false}'
以相应地更改注意力掩码。
另一方面,其 1.5B 变体 (Alibaba-NLP/gte-Qwen2-1.5B-instruct
) 使用因果注意力,尽管在其模型卡上另有描述。
无论变体如何,您都需要启用 --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+ |
|
✅︎ |
✅︎ |
|
|
BLIP-2 |
T + IE |
|
✅︎ |
✅︎ |
|
|
Chameleon |
T + I |
|
✅︎ |
✅︎ |
|
|
DeepSeek-VL2 |
T + I+ |
|
✅︎ |
✅︎ |
|
|
Fuyu |
T + I |
|
✅︎ |
✅︎ |
|
|
GLM-4V |
T + I |
|
✅︎ |
✅︎ |
✅︎ |
|
H2OVL |
T + IE+ |
|
✅︎ |
✅︎* |
|
|
Idefics3 |
T + I |
|
✅︎ |
✅︎ |
|
|
InternVL 2.5、Mono-InternVL、InternVL 2.0 |
T + IE+ |
|
✅︎ |
✅︎ |
|
|
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+ |
|
✅︎ |
✅︎ |
|
|
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+ |
|
✅︎ |
✅︎ |
|
|
Pixtral |
T + I+ |
|
✅︎ |
✅︎ |
|
|
Qwen-VL |
T + IE+ |
|
✅︎ |
✅︎ |
✅︎ |
|
Qwen2-Audio |
T + A+ |
|
✅︎ |
✅︎ |
|
|
QVQ, Qwen2-VL |
T + IE+ + VE+ |
|
✅︎ |
✅︎ |
✅︎ |
|
Qwen2.5-VL |
T + IE+ + VE+ |
|
✅︎ |
✅︎ |
✅︎ |
|
Ultravox |
T + AE+ |
|
✅︎ |
✅︎ |
✅︎ |
^ 您需要通过 --hf-overrides
设置架构名称,以匹配 vLLM 中的名称。
• 例如,要使用 DeepSeek-VL2 系列模型
--hf-overrides '{"architectures": ["DeepseekVLV2ForCausalLM"]}'
E 预计算的嵌入可以为此模态输入。
+ 每个文本提示可以为此模态输入多个项目。
注意
h2oai/h2ovl-mississippi-2b
一旦我们支持 FlashAttention 以外的后端,将在 V1 中可用。
注意
要使用 TIGER-Lab/Mantis-8B-siglip-llama3
,您必须在运行 vLLM 时传递 --hf_overrides '{"architectures": ["MantisForConditionalGeneration"]}'
。
注意
官方的 openbmb/MiniCPM-V-2
尚不可用,因此我们目前需要使用一个分支 (HwwwH/MiniCPM-V-2
)。 更多详情,请参阅: Pull Request #4087
注意
目前,PaliGemma 模型系列在实现时没有 PrefixLM 注意力掩码。 此模型系列在未来版本中可能会被弃用。
注意
mistral-community/pixtral-12b
尚不支持 V1。
注意
要使用 Qwen2.5-VL 系列模型,您必须通过 pip install git+https://github.com/huggingface/transformers
从源代码安装 Huggingface transformers
库。
池化模型#
有关如何使用池化模型的更多信息,请参阅 此页面。
重要提示
由于某些模型架构同时支持生成和池化任务,因此您应显式指定任务类型,以确保模型以池化模式而不是生成模式使用。
文本嵌入 (--task embed
)#
任何文本生成模型都可以通过传递 --task embed
转换为嵌入模型。
注意
为了获得最佳结果,您应该使用专门为此训练的池化模型。
下表列出了 vLLM 中测试过的模型。
转录 (--task transcription
)#
专门为自动语音识别训练的 Speech2Text 模型。
模型支持策略#
在 vLLM,我们致力于促进第三方模型在我们生态系统中的集成和支持。 我们的方法旨在平衡稳健性的需求和支持各种模型的实际限制。 以下是我们如何管理第三方模型支持
社区驱动的支持: 我们鼓励社区贡献来添加新模型。 当用户请求对新模型的支持时,我们欢迎来自社区的拉取请求(PR)。 这些贡献主要根据它们生成的输出的合理性进行评估,而不是与 transformers 等现有实现严格一致。 贡献征集: 非常感谢直接来自模型供应商的 PR!
尽力保持一致性: 虽然我们的目标是在 vLLM 中实现的模型与 transformers 等其他框架之间保持一定程度的一致性,但完全对齐并非总是可行。 诸如加速技术和低精度计算的使用等因素可能会引入差异。 我们的承诺是确保实现的模型是功能性的并且产生合理的结果。
提示
当比较 HuggingFace Transformers 中
model.generate
的输出与 vLLM 中llm.generate
的输出时,请注意前者读取模型的生成配置 文件(即,generation_config.json)并应用生成 的默认参数,而后者仅使用传递给函数的参数。 在比较输出时,请确保所有采样参数都相同。问题解决和模型更新: 鼓励用户报告他们在使用第三方模型时遇到的任何错误或问题。 建议的修复应通过 PR 提交,并清楚地解释问题和建议解决方案的理由。 如果一个模型的修复影响到另一个模型,我们依靠社区来突出显示和解决这些跨模型依赖关系。 注意:对于错误修复 PR,告知原始作者以征求他们的反馈是一种良好的礼仪。
监控和更新: 对特定模型感兴趣的用户应监控这些模型的提交历史记录(例如,通过跟踪 main/vllm/model_executor/models 目录中的更改)。 这种积极主动的方法有助于用户随时了解可能影响他们使用的模型的更新和更改。
选择性关注: 我们的资源主要 направлены 用于具有重要用户兴趣和影响的模型。 使用频率较低的模型可能会受到较少的关注,我们依靠社区在它们的维护和改进中发挥更积极的作用。
通过这种方法,vLLM 营造了一个协作环境,核心开发团队和更广泛的社区都为我们生态系统中支持的第三方模型的稳健性和多样性做出贡献。
请注意,作为推理引擎,vLLM 不会引入新模型。 因此,vLLM 支持的所有模型在这方面都是第三方模型。
我们对模型进行以下级别的测试