数据处理
模块内容
vllm.multimodal.processing.PromptSeq
一个 token 序列(token ID 列表)或文本。
别名为 Union
[str
, list
[int
]]
class vllm.multimodal.processing.PromptIndex(get_match_index: Callable[[transformers.PreTrainedTokenizer | transformers.PreTrainedTokenizerFast | TokenizerBase, str | list[int]], int | None])
解析为提示中的索引。
vllm.multimodal.processing.PromptTarget
要更新的 token 序列或文本。
别名为 Union
[str
, list
[int
], PromptIndex
]
class vllm.multimodal.processing.PromptUpdateDetails(full: _S, is_embed: Callable[[_BoundPromptSequence], torch.Tensor] | None = None)
关于更新中包含的 token 序列或文本的详细信息。
full: _S
完整内容。
features: _S
与特征占位符对应的部分内容;在模型推理期间,这部分内容将被视觉编码器的输出替换。
vllm.multimodal.processing.PromptUpdateInfo
更新中包含的 token 序列或文本。
如果只有部分内容对应于特征占位符,则可以使用 PromptUpdateDetails
来指定哪一部分。
别名为 Union
[str
, list
[int
], PromptUpdateDetails
]
vllm.multimodal.processing.PromptUpdateContent
给定 modality
中处理项的索引,输出相应的 token 序列(或文本)。
为了方便起见,如果 token 序列(或文本)不依赖于 Importing,则可以直接传入 token 序列(或文本)而不是函数。
别名为 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)
class vllm.multimodal.processing.PromptUpdate(modality: str, target: str | list[int] | PromptIndex)
定义如何使用占位符 token 更新提示。
modality: str
为其进行更新的模态。
target: str | list[int] | PromptIndex
要更新的 token 序列(或文本)。
abstract property content_: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails
更新中包含的占位符 token。
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)
定义如何将占位符 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
给定 modality
中处理项的索引,输出要在 target
后插入的 token 序列(或文本)。
为了方便起见,如果 token 序列(或文本)不依赖于 Importing,则可以直接传入 token 序列(或文本)而不是函数。
property content_: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails
更新中包含的占位符 token。
property mode_: UpdateMode
定义如何更新提示。
class vllm.multimodal.processing.PromptReplacement(modality: str, target: str | list[int] | PromptIndex, replacement: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails)
定义如何用占位符 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
给定 modality
中处理项的索引,输出要替换 target
的 token 序列(或文本)。
为了方便起见,如果 token 序列(或文本)不依赖于 Importing,则可以直接传入 token 序列(或文本)而不是函数。
property content_: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails
更新中包含的占位符 token。
property mode_: UpdateMode
定义如何更新提示。
vllm.multimodal.processing.full_groupby_modality(values: Iterable[_M]) → ItemsView[str, list[_M]]
便利函数,基于模态应用 full_groupby()
。
class vllm.multimodal.processing.BoundPromptUpdate(_origin: PromptUpdate, tokenizer: transformers.PreTrainedTokenizer | transformers.PreTrainedTokenizerFast | TokenizerBase)
一个绑定到 tokenizer 的 PromptUpdate
,用于自动在 token 序列和文本表示之间转换 target
和 get_content()
的结果。
property target_: _BoundPromptSequence | PromptIndex
要更新的 token 序列(或文本)。
property content_: Callable[[int], str | list[int] | PromptUpdateDetails] | str | list[int] | PromptUpdateDetails
更新中包含的占位符 token。
property mode_: UpdateMode
定义如何更新提示。
get_content(item_idx: int) → _BoundPromptContent
给定 modality
中处理项的索引,输出要更新的 token 序列(或文本)。
vllm.multimodal.processing.iter_token_matches(token_ids: list[int], match_ids: list[int]) → Generator[_TokenMatch]
生成 token_ids
中 match_ids
的每次出现。
注意,空匹配会被忽略。
vllm.multimodal.processing.replace_token_matches(token_ids: list[int], match_ids: list[int], new_ids: list[int]) → list[int]
将 token_ids
中 match_ids
的每次出现替换为 new_ids
。
注意,空匹配会被忽略。
class vllm.multimodal.processing.PromptTargetMatch(_origin: vllm.multimodal.processing.BoundPromptUpdate)
class vllm.multimodal.processing.PlaceholderFeaturesInfo(modality: str, item_idx: int, start_idx: int, tokens: list[int], is_embed: torch.Tensor | None)
vllm.multimodal.processing.find_token_matches(prompt: list[int], prompt_updates: Sequence[BoundPromptUpdate]) → Sequence[PromptTargetMatch]
返回在 prompt
中找到的 prompt_updates
的每个目标。
vllm.multimodal.processing.find_text_matches(prompt: str, prompt_updates: Sequence[BoundPromptUpdate]) → Sequence[PromptTargetMatch]
返回在 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]
将 mm_matches
中的更新应用到 prompt
。
vllm.multimodal.processing.apply_text_matches(prompt: str, mm_matches: Mapping[str, Sequence[PromptTargetMatch]], mm_item_counts: Mapping[str, int]) → str
将 mm_matches
中的更新应用到 prompt
。
class vllm.multimodal.processing.BaseProcessingInfo(ctx: InputProcessingContext)[source]#
提供数据处理所需信息的基类。
get_hf_processor(**kwargs: object) → transformers.ProcessorMixin
子类可以重写此方法以处理来自模型配置或用户输入的特定 kwargs。
abstract get_supported_mm_limits() → Mapping[str, int | None]
返回每个模态支持的最大项数。
值为 None
表示项数无限制。
如果返回的字典中省略了某个模态,则表示完全不支持该模态。
get_allowed_mm_limits() → Mapping[str, int]
获取每个模态的每个数据项的最大可能 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)
处理多模态输入以用于 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
处理多模态输入以用于 vLLM。
主要步骤包括:
-
将 HF 处理器应用于提示文本和多模态数据,输出 token ID 和处理后的张量。
-
在 token ID 中找到并用占位符 token 更新序列。占位符 token 的数量等于多模态编码器输出的多模态数据的特征大小。
-
从处理后的 token ID 中提取占位符 token 的信息。
class vllm.multimodal.processing.EncDecMultiModalProcessor(info: _I, dummy_inputs: BaseDummyInputsBuilder[_I], *, cache: ProcessingCache | None = None, enable_sanity_checks: bool = True)
abstract create_encoder_prompt(prompt: str | list[int], mm_data: Mapping[str, Any | list[Any]]) → str | list[int]
为编码器创建输入提示。在分析和生成期间,HF 处理器将应用于此提示。
create_decoder_prompt(prompt: str | list[int], mm_data: Mapping[str, Any | list[Any]]) → str | list[int]
为解码器创建输入提示。
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
处理多模态输入以用于 vLLM。主要处理步骤修改为适应编码器-解码器模型:1. 从输入提示文本创建编码器提示。2. 将 HF 处理器应用于编码器提示。3. 将输入提示文本复制为解码器提示输入。