数据处理#

模块内容#

vllm.multimodal.processing.PromptSeq[source]#

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

别名: Union[str, list[int]]

class vllm.multimodal.processing.PromptReplacementDetails(full: str | list[int], features: str | list[int])[source]#

关于替换令牌序列或文本的详细信息。

full: str | list[int][source]#

完整替换。

features: str | list[int][source]#

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

vllm.multimodal.processing.PromptRepl[source]#

替换令牌序列或文本。

如果只有部分替换对应于特征占位符,您可以使用 PromptReplacementDetails 来指定哪部分。

别名: Union[str, list[int], PromptReplacementDetails]

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

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

示例

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

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

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

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

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

PromptReplacement(
    modality="image",
    target=[image_token_id],
    replacement=PromptReplacementDetails(
        full=([image_bos_id] + [image_token_id] * image_feature_size
              + [image_eos_id]),
        features=[image_token_id] * image_feature_size,
    ),
)
modality: str[source]#

进行替换的模态。

target: str | list[int][source]#

要查找和替换的令牌序列(或文本)。

replacement: Callable[[int], str | list[int] | PromptReplacementDetails] | str | list[int] | PromptReplacementDetails[source]#

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

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

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

基于模态应用 full_groupby() 的便捷函数。

class vllm.multimodal.processing.BoundPromptReplacement(tokenizer: transformers.PreTrainedTokenizer | transformers.PreTrainedTokenizerFast | TokenizerBase, modality: str, _target: str | list[int], _replacement: Callable[[int], str | list[int] | PromptReplacementDetails] | str | list[int] | PromptReplacementDetails)[source]#

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

property target: _BoundPromptSequence[source]#

要查找和替换的令牌序列(或文本)。

get_replacement(item_idx: int) _BoundPromptReplacementGroup[source]#

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

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

token_ids 中,产生每次出现的 match_ids

请注意,空匹配将被忽略。

class vllm.multimodal.processing.PlaceholderFeaturesInfo(modality: str, item_idx: int, start_idx: int, tokens: list[int])[source]#
vllm.multimodal.processing.find_token_matches(prompt: list[int], prompt_repls: Sequence[BoundPromptReplacement]) list[vllm.multimodal.processing._PromptReplacementTokenMatch][source]#

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

vllm.multimodal.processing.find_text_matches(prompt: str, prompt_repls: Sequence[BoundPromptReplacement]) list[vllm.multimodal.processing._PromptReplacementTextMatch][source]#

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

vllm.multimodal.processing.replace_token_matches(prompt: list[int], mm_matches: Mapping[str, Sequence[_PromptReplacementTokenMatch]], mm_item_counts: Mapping[str, int]) list[int][source]#

mm_matches 中的替换项应用于 prompt

vllm.multimodal.processing.replace_text_matches(prompt: str, mm_matches: Mapping[str, Sequence[_PromptReplacementTextMatch]], 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 值表示项目数不受限制。

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

abstract get_mm_max_tokens_per_item(seq_len: int, mm_counts: Mapping[str, int]) 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]) MultiModalInputs[source]#

处理要在 vLLM 中使用的多模态输入。

主要步骤包括:

  1. 将 HF Processor 同时应用于提示文本和多模态数据,输出 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 processor 将在性能分析和生成期间应用于此提示。

apply(prompt: str | list[int], mm_data: Mapping[str, Any | list[Any]], hf_processor_mm_kwargs: Mapping[str, object]) MultiModalEncDecInputs[source]#

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