Skip to main content

多模态

vLLM 通过 vllm.multimodal 包为多模态模型提供实验性支持。

多模态输入可以通过 vllm.inputs.PromptInputs 中的 multi_modal_data 字段将文本和 token 提示一起传到支持的模型中。

目前,vLLM 仅内置对图像数据的支持。您可以按照该指南扩展 vLLM 处理其他模态。

想要添加您自己的多模态模型吗?请按照此处列出的说明进行操作。

指南

添加多模态插件

模块内容

注册

vllm.multimodal.MULTIMODAL_REGISTRY = <vllm.multimodal.registry.MultiModalRegistry object>

模型运行器 (model runners) 使用全局 MultiModalRegistry 根据数据的模态和目标模型来调度数据处理。

另见 Input Processing Pipeline

class vllm.multimodal.MultiModalRegistry(*, plugins: Sequence[MultiModalPlugin] = DEFAULT_PLUGINS) [源代码]

一个将数据处理分派给每种模态的 MultiModalPlugin 的注册表。

create_input_mapper(model_config: ModelConfig)
[源代码]

为特定模型创建 1 个输入映射器(请参阅 map_input())。

get_max_multimodal_tokens(model_config: ModelConfig) → int [源代码]

获取用于分析模型内存使用情况的最大多模态 tokens 数量。

请参阅 MultiModalPlugin.get_max_multimodal_tokens() 了解更多详细信息。

注意:

这应该在调用了 init_mm_limits_per_prompt() 之后进行。

get_mm_limits_per_prompt(model_config: ModelConfig) → Mapping[str, int] [源代码]

获取一个模型类针对每个模态,在每个提示中所允许的最大多模态输入实例数量。

注意:

这应该在调用了 init_mm_limits_per_prompt() 之后进行。

init_mm_limits_per_prompt(model_config: ModelConfig) → None [源代码]

为每种模态设置每个提示所允许的多模态输入实例的最大数量,针对特定模型类别进行初始化。

map_input(model_config: ModelConfig, data: MultiModalDataBuiltins | Mapping[str, object | List[object]], mm_processor_kwargs: Dict[strAny] | None = None) → MultiModalInputs [源代码]

将输入映射器应用于传递给模型的数据。

相应插件接收来自每种模态的数据,并通过为该模型注册的输入映射器,将这些数据转换成关键字参数。

有关更多详细信息,请参阅 MultiModalPlugin.map_input()

注意:

这应该在调用了 init_mm_limits_per_prompt() 之后进行。

register_image_input_mapper(mapper: Callable[[InputContext, object | List[object]], MultiModalInputs] | None = None) [源代码]

为图像数据注册一个输入映射器到模型类别。

请参阅 MultiModalPlugin.register_input_mapper() 了解更多详细信息。

register_input_mapper(data_type_key: str, mapper: Callable[[InputContext, object | List[object]], MultiModalInputs] | None = None) [源代码]

为特定模态注册一个输入映射器到模型类别。

请参阅 MultiModalPlugin.register_input_mapper() 了解更多详细信息。

register_max_image_tokens(max_mm_tokens: int | Callable[[InputContext], int] | None = None) [源代码]

为特定模型类别注册最高数量的图像 token,这些标记对应于单个图像,并被传递给语言模型。

register_max_multimodal_tokens(data_type_key: str, max_mm_tokens: int | Callable[[InputContext], int] | None = None) [源代码]

注册一个模型类别中,传递给语言模型的、对应于特定模态下单一多模态数据实例的最大 token 数量。

register_plugin(plugin: MultiModalPlugin) → None [源代码]

注册一个多模态插件,使得 vLLM 可以识别它。

另见 Adding a Multimodal Plugin

基础类 (Base Classes)

vllm.multimodal.NestedTensors 内部 API 的核心部分。

这表示类型参数「origin」的一个通用版本,它包含了类型参数「params」。这些别名分为 2 种类型:用户定义的和特殊的。特殊别名是用于内置集合和 collections.abc 中的 ABCs 的包装器。这些特殊别名必须始终设置「name」。如果「inst」设置为 False,则无法实例化该别名,例如 Typing.List 和 Typing.Dict 就是这种情况。

别名是:Union[List[NestedTensors], List[Tensor], Tensor]

vllm.multimodal.BatchedTensorInputs 内部 API 的核心部分。

这表示类型参数「origin」的一个通用版本,它包含了类型参数「params」。这些别名分为 2 种:用户定义的和特殊的。特殊别名是用于内置集合和 collections.abc 中的 ABCs 的包装器。这些特殊别名必须始终设置「name」。如果「inst」设置为 False,则无法实例化该别名,例如 Typing.List 和 Typing.Dict 就是这种情况。

别名为:Dict[str, Union[List[NestedTensors], List[Tensor], Tensor]]

final class vllm.multimodal.MultiModalDataBuiltins(*args, **kwargs) [源代码]

基类 (Bases):dict

由 vLLM 预定义的模态类型。

audio: Tuple[ndarray, int | float] | List[Tuple[ndarray, int | float]] 输入音频项和相应的采样率。

image: Image | List[Image] 输入图像。

vllm.multimodal.MultiModalDataDict 内部API的核心部分。

这表示类型参数「origin」的一个通用版本,它包含了类型参数「params」。这些别名分为 2 种:用户定义的和特殊的。特殊别名是用于内置集合和 collections.abc 中的 ABCs 的包装器。这些特殊别名必须始终设置「name」。如果「inst」设置为 False,则无法实例化该别名,例如 Typing.List 和 Typing.Dict 就是这种情况。

别名为:Union[MultiModalDataBuiltins, Mapping[str, Union[object, List[object]]]]

class vllm.multimodal.MultiModalInputs(dict=None, /, **kwargs) [源代码]

基类 (Bases):_MultiModalInputsBase

一个表示传递给 forward() 方法的关键字参数的字典。

static batch(inputs_list: List[MultiModalInputs]) → Dict[str, List[List[NestedTensors] | List[torch.Tensor] | torch.Tensor] | List[torch.Tensor] | torch.Tensor] [源代码]

将多个输入一起批处理到 1 个字典中。

生成的字典具有与输入相同的键。如果每个输入的对应值是一个张量并且它们都具有相同的形状,那么输出值就是一个单一的批处理张量;否则,输出值是 1 个包含每个输入的原始值的列表。

class vllm.multimodal.MultiModalPlugin [源代码]

基类 (Bases):ABC

定义特定模态的数据处理逻辑的基类。

具体来说,我们采用注册模式来根据所使用的模型分派数据处理(考虑到不同模型可能会以不同方式处理相同数据)。这个注册机制反过来被 MultiModalRegistry 使用,它在更高层次上发挥作用(即数据的模态)。

另见 Adding a Multimodal Plugin

abstract get_data_key() → str [源代码]

获取与模态对应的数据键。

get_max_multimodal_tokens(model_config: ModelConfig) → int [源代码]

获取用于分析模型内存使用情况的最大多模态 token 数量。

如果此注册不适用于该模型,则返回 0。

该模型通过 model_config 标识。

另见 Enabling Multimodal Inputs

map_input(model_config: ModelConfig, data: object | List[object]) → MultiModalInputs

[源代码]

使用为该模型注册的输入映射器将数据转换为模型输入的字典。

该模型通过 model_config 标识。

报错:

TypeError – 如果不支持数据类型。

另见

register_input_mapper(mapper: Callable[[InputContext, object | List[object]], MultiModalInputs] | None = None) [源代码]

将 1 个输入映射器注册到模型类。

当模型接收到与此插件提供的模态相匹配的输入数据时(请参阅 get_data_key()),会调用提供的函数来将数据转换为模型输入的字典。

如果没有提供,则使用默认的输入映射器。

另见

register_max_multimodal_tokens(max_mm_tokens: int | Callable[[InputContext], int] | None = None) [源代码]

为特定模型类别注册一个单一多模态数据实例所对应的最大 token 数量,这些 token 将被传递给语言模型。

如果没有提供,则使用默认的计算方式。

另见 Enabling Multimodal Inputs

图像类

class vllm.multimodal.image.ImagePlugin [源代码]

基类 (Bases):MultiModalPlugin

图像数据插件。

get_data_key() → str [源代码]

获取与模态对应的数据键。