Skip to main content
Version: Next

数据处理

*在线运行 vLLM 入门教程:零基础分步指南

模块内容

vllm.multimodal.processing.PromptSeq

[source]

一个 token 序列(token ID 列表)或文本。

别名为 Union[strlist[int]]

class vllm.multimodal.processing.PromptIndex(get_match_index: Callable[[transformers.PreTrainedTokenizer | transformers.PreTrainedTokenizerFast | TokenizerBase, str | list[int]], int | None])

[source]

解析为提示中的索引。

vllm.multimodal.processing.PromptTarget

[source]

要更新的 token 序列或文本。

别名为 Union[strlist[int], PromptIndex]

class vllm.multimodal.processing.PromptUpdateDetails(full: _S, is_embed: Callable[[_BoundPromptSequence], torch.Tensor] | None = None)

[source]

关于更新中包含的 token 序列或文本的详细信息。

full: _S

[source]

完整内容。

features: _S

[source]

与特征占位符对应的部分内容;在模型推理期间,这部分内容将被视觉编码器的输出替换。

vllm.multimodal.processing.PromptUpdateInfo

[source]

更新中包含的 token 序列或文本。

如果只有部分内容对应于特征占位符,则可以使用 PromptUpdateDetails 来指定哪一部分。

别名为 Union[strlist[int], PromptUpdateDetails]

vllm.multimodal.processing.PromptUpdateContent

[source]

给定 modality 中处理项的索引,输出相应的 token 序列(或文本)。

为了方便起见,如果 token 序列(或文本)不依赖于 Importing,则可以直接传入 token 序列(或文本)而不是函数。

别名为 Union[Callable[intUnion[strlist[int], PromptUpdateDetails]], strlist[int], PromptUpdateDetails]

class vllm.multimodal.processing.UpdateMode(value, names=_not_given, *values, module=None, qualname=None, type=None, start=1, boundary=None)

[source]

class vllm.multimodal.processing.PromptUpdate(modality: str, target: str | list[int] | PromptIndex)

[source]

定义如何使用占位符 token 更新提示。

modality: str

[source]

为其进行更新的模态。

target: str | list[int] | PromptIndex

[source]

要更新的 token 序列(或文本)。

abstract property content_: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails

[source]

更新中包含的占位符 token。

abstract property mode_: UpdateMode

[source]

定义如何更新提示。

class vllm.multimodal.processing.PromptInsertion(modality: str, target: str | list[int] | PromptIndex, insertion: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails)

[source]

定义如何将占位符 token 插入提示中。

示例

对于每个图像,在 <s> token 后插入与视觉编码器特征大小相等的 <image> 特征占位符:

PromptInsertion(
modality="image",
target="<s>",
insertion="<image>" * image_feature_size,
)

在提示的开头插入这些 token:

PromptInsertion(
modality="image",
target=PromptIndexTargets.start(),
insertion="<image>" * image_feature_size,
)

在前缀 Images: 后插入这些 token:

PromptInsertion(
modality="image",
target=PromptIndexTargets.prefix("Images:"),
insertion="<image>" * image_feature_size,
)

在提示的末尾插入这些 token:

PromptInsertion(
modality="image",
target=PromptIndexTargets.end(),
insertion="<image>" * image_feature_size,
)

insertion_: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails

[source]

给定 modality 中处理项的索引,输出要在 target 后插入的 token 序列(或文本)。

为了方便起见,如果 token 序列(或文本)不依赖于 Importing,则可以直接传入 token 序列(或文本)而不是函数。

property content_: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails

[source]

更新中包含的占位符 token。

property mode_: UpdateMode

[source]

定义如何更新提示。

class vllm.multimodal.processing.PromptReplacement(modality: str, target: str | list[int] | PromptIndex, replacement: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails)

[source]

定义如何用占位符 token 替换输入提示的部分内容。

示例

对于每个图像,将提示中的一个 <image> 输入占位符替换为与视觉编码器特征大小相等的 <image> 特征占位符:

PromptReplacement(
modality="image",
target="<image>",
replacement="<image>" * image_feature_size,
)

如上所述,但进一步用 <image_bos> 和 <image_eos> 填充特征占位符,这些 token 不应传递给视觉编码器:

PromptReplacement(
modality="image",
target="<image>",
replacement=PromptUpdateDetails(
full="".join([
"<image_bos>",
"<image>" * image_feature_size,
"<image_eos>",
]),
features="<image>" * image_feature_size,
),
)

为了避免在提示替换期间不必要的 token 化,建议传递 token 序列而不是文本:

PromptReplacement(
modality="image",
target=[image_token_id],
replacement=PromptUpdateDetails(
full=([image_bos_id] + [image_token_id] * image_feature_size
+ [image_eos_id]),
features=[image_token_id] * image_feature_size,
),
)

replacement_: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails

[source]

给定 modality 中处理项的索引,输出要替换 target 的 token 序列(或文本)。

为了方便起见,如果 token 序列(或文本)不依赖于 Importing,则可以直接传入 token 序列(或文本)而不是函数。

property content_: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails

[source]

更新中包含的占位符 token。

property mode_: UpdateMode

[source]

定义如何更新提示。

vllm.multimodal.processing.full_groupby_modality(values: Iterable[_M]) → ItemsView[str, list[_M]]

[source]

便利函数,基于模态应用 full_groupby()

class vllm.multimodal.processing.BoundPromptUpdate(_origin: PromptUpdate, tokenizer: transformers.PreTrainedTokenizer | transformers.PreTrainedTokenizerFast | TokenizerBase)

[source]

一个绑定到 tokenizer 的 PromptUpdate,用于自动在 token 序列和文本表示之间转换 target 和 get_content() 的结果。

property target_: _BoundPromptSequence | PromptIndex

[source]

要更新的 token 序列(或文本)。

property content_: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails

[source]

更新中包含的占位符 token。

property mode_: UpdateMode

[source]

定义如何更新提示。

get_content(item_idx: int) → _BoundPromptContent

[source]

给定 modality 中处理项的索引,输出要更新的 token 序列(或文本)。

vllm.multimodal.processing.iter_token_matches(token_ids: list[int], match_ids: list[int]) → Generator[_TokenMatch]

[source]

生成 token_ids 中 match_ids 的每次出现。

注意,空匹配会被忽略。

vllm.multimodal.processing.replace_token_matches(token_ids: list[int], match_ids: list[int], new_ids: list[int]) → list[int]

[source]

将 token_ids 中 match_ids 的每次出现替换为 new_ids

注意,空匹配会被忽略。

class vllm.multimodal.processing.PromptTargetMatch(_origin: vllm.multimodal.processing.BoundPromptUpdate)

[source]

class vllm.multimodal.processing.PlaceholderFeaturesInfo(modality: str, item_idx: int, start_idx: int, tokens: list[int], is_embed: torch.Tensor | None)

[source]

vllm.multimodal.processing.find_token_matches(prompt: list[int], prompt_updates: Sequence[BoundPromptUpdate]) → Sequence[PromptTargetMatch]

[source]

返回在 prompt 中找到的 prompt_updates 的每个目标。

vllm.multimodal.processing.find_text_matches(prompt: str, prompt_updates: Sequence[BoundPromptUpdate]) → Sequence[PromptTargetMatch]

[source]

返回在 prompt 中找到的 prompt_updates 的每个目标。

vllm.multimodal.processing.apply_token_matches(prompt: list[int], mm_matches: Mapping[str, Sequence[PromptTargetMatch]], mm_item_counts: Mapping[str, int]) → list[int]

[source]

将 mm_matches 中的更新应用到 prompt

vllm.multimodal.processing.apply_text_matches(prompt: str, mm_matches: Mapping[str, Sequence[PromptTargetMatch]], mm_item_counts: Mapping[str, int]) → str

[source]

将 mm_matches 中的更新应用到 prompt

class vllm.multimodal.processing.BaseProcessingInfo(ctx: InputProcessingContext)[source]#

[source]

提供数据处理所需信息的基类。

get_hf_processor(**kwargs: object) → transformers.ProcessorMixin

[source]

子类可以重写此方法以处理来自模型配置或用户输入的特定 kwargs。

abstract get_supported_mm_limits() → Mapping[str, int | None]

[source]

返回每个模态支持的最大项数。

值为 None 表示项数无限制。

如果返回的字典中省略了某个模态,则表示完全不支持该模态。

get_allowed_mm_limits() → Mapping[str, int]

[source]

获取每个模态的每个数据项的最大可能 token 数。

此方法返回的字典应与 get_supported_mm_limits() 返回的字典具有相同的键。

class vllm.multimodal.processing.BaseMultiModalProcessor(info: _I, dummy_inputs: BaseDummyInputsBuilder[_I], *, cache: ProcessingCache | None = None, enable_sanity_checks: bool = True)

[source]

处理多模态输入以用于 vLLM 的抽象基类。

不要与 transformers.ProcessorMixin 混淆。

apply(prompt: str | list[int], mm_data: Mapping[str, Any | list[Any]], hf_processor_mm_kwargs: Mapping[str, object], return_mm_hashes: bool = False) → MultiModalInputs

[source]

处理多模态输入以用于 vLLM。

主要步骤包括:

  1. 将 HF 处理器应用于提示文本和多模态数据,输出 token ID 和处理后的张量。

  2. 在 token ID 中找到并用占位符 token 更新序列。占位符 token 的数量等于多模态编码器输出的多模态数据的特征大小。

  3. 从处理后的 token ID 中提取占位符 token 的信息。

class vllm.multimodal.processing.EncDecMultiModalProcessor(info: _I, dummy_inputs: BaseDummyInputsBuilder[_I], *, cache: ProcessingCache | None = None, enable_sanity_checks: bool = True)

[source]

abstract create_encoder_prompt(prompt: str | list[int], mm_data: Mapping[str, Any | list[Any]]) → str | list[int]

[source]

为编码器创建输入提示。在分析和生成期间,HF 处理器将应用于此提示。

create_decoder_prompt(prompt: str | list[int], mm_data: Mapping[str, Any | list[Any]]) → str | list[int]

[source]

为解码器创建输入提示。

apply(prompt: str | list[int], mm_data: Mapping[str, Any | list[Any]], hf_processor_mm_kwargs: Mapping[str, object], return_mm_hashes: bool = False) → MultiModalEncDecInputs

[source]

处理多模态输入以用于 vLLM。主要处理步骤修改为适应编码器-解码器模型:1. 从输入提示文本创建编码器提示。2. 将 HF 处理器应用于编码器提示。3. 将输入提示文本复制为解码器提示输入。