数据处理#

模块内容#

vllm.multimodal.processing.PromptSeq[source]#

令牌序列(令牌 ID 列表)或文本。

别名为 Union[str, list[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]#

要更新的令牌序列或文本。

别名为 Union[str, list[int], PromptIndex]

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

关于作为更新一部分的令牌序列或文本的详细信息。

full: _S[source]#

完整内容。

is_embed: Callable[[_BoundPromptSequence], torch.Tensor] | None = None[source]#

给定 full,返回形状为 (len(full),) 的布尔掩码,指示将嵌入分配给 full 的哪些位置。

None(默认)表示将嵌入分配给 full 的所有位置。

通过调用 SupportsMultiModal.get_multimodal_embeddings 获取嵌入。

vllm.multimodal.processing.PromptUpdateInfo[source]#

作为更新一部分的令牌序列或文本。

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

别名为 Union[str, list[int], PromptUpdateDetails]

vllm.multimodal.processing.PromptUpdateContent[source]#

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

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

别名为 Union[Callable[int, Union[str, list[int], PromptUpdateDetails]], str, list[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]#

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

modality: str[source]#

进行更新的模态。

target: str | list[int] | PromptIndex

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

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

作为更新一部分的占位符令牌。

abstract property mode: UpdateMode

定义如何更新提示。

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

定义如何将占位符令牌插入到提示中。

示例

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

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

在提示的开头插入这些令牌

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

在前缀 Images: 之后插入这些令牌

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

在提示的末尾插入这些令牌

PromptInsertion(
    modality="image",
    target=PromptIndexTargets.end(),
    insertion="<image>" * image_feature_size,
)
insertion: Callable[[int], str | list[int], PromptUpdateDetails

给定 modality 中已处理项的索引,输出要紧跟在 target 之后插入的令牌序列(或文本)。

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

property content: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails[source]#

作为更新一部分的占位符令牌。

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]#

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

示例

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

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

与上述相同,但进一步使用 <image_bos><image_eos>` 填充特征占位符,这些占位符不应传递给视觉编码器

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

为了避免在提示替换期间进行不必要的令牌化,我们建议传递令牌序列而不是文本

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 的令牌序列(或文本)。

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

property content: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails[source]#

作为更新一部分的占位符令牌。

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]#

绑定到分词器的 PromptUpdate,用于自动在令牌序列和文本表示之间转换 targetget_content() 的结果。

property target: _BoundPromptSequence | PromptIndex[source]#

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

property content: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails[source]#

作为更新一部分的占位符令牌。

property mode: UpdateMode[source]#

定义如何更新提示。

get_content(item_idx: int) _BoundPromptContent[source]#

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

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]#

new_ids 替换 token_ids 中每次出现的 match_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]#

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

get_hf_processor(**kwargs: object) transformers.ProcessorMixin[source]#

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

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

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

None 值表示项目数不受限制。

从返回的字典中省略模态表示完全不支持该模态。

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 Processor 同时应用于提示文本和多模态数据,输出 token IDs 和处理后的张量。

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

  3. 从处理后的 token IDs 中提取有关占位符 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 processor 将在 profiling 和生成过程中应用于此提示。

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 processor 应用于编码器提示。3. 复制输入提示文本作为解码器提示输入。