数据处理
模块内容
vllm.multimodal.processing.**PromptSeq**
一个 token 序列(token ID 列表)或文本。
别名为 Union
[str
, list
[int
]]
*class***vllm.multimodal.processing.**PromptIndex**(*getmatch_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***,*features: _S***)**
关于更新中包含的 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.**fullgroupby_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.**itertoken_matches**(***token_ids:**list[int]*,*match_ids:list[int_]*)**→Generator[_TokenMatch]**
生成 token_ids
中 match_ids
的每次出现。
注意,空匹配会被忽略。
vllm.multimodal.processing.**replacetoken_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,*itemidx:*int,*start_idx:*int,*tokens:**list[int_]***)**
vllm.multimodal.processing.**findtoken_matches**(***prompt:**list[int]*,*prompt_updates:Sequence[BoundPromptUpdate_]*)**→Sequence[PromptTargetMatch]**
返回在 prompt
中找到的 prompt_updates
的每个目标。
vllm.multimodal.processing.**findtext_matches**(***prompt:*str,*prompt_updates:**Sequence[BoundPromptUpdate_]*)**→Sequence[PromptTargetMatch]**
返回在 prompt
中找到的 prompt_updates
的每个目标。
vllm.multimodal.processing.**applytoken_matches**(***prompt:**list[int]*,*mm_matches:Mapping[str,Sequence[PromptTargetMatch]]*,*mm_item_counts:Mapping[str,int_]*)**→list[int]**
将 mm_matches
中的更新应用到 prompt
。
vllm.multimodal.processing.**applytext_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*****)**
提供数据处理所需信息的基类。
get_hf_processor**(*****kwargs:*object)**→ transformers.ProcessorMixin
子类可以重写此方法以处理来自模型配置或用户输入的特定 kwargs。
*abstract***get_supported_mm_limits**()**→Mapping[str,int|None]**
返回每个模态支持的最大项数。
值为 None
表示项数无限制。
如果返回的字典中省略了某个模态,则表示完全不支持该模态。
*abstract***getmm_max_tokens_per_item**(***seq_len:*int,*mm_counts:**Mapping[str,int_]*)**→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]*,*mmdata:**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***createencoder_prompt**(***prompt:**str|list[int]*,*mm_data:Mapping[str,Any|list[Any_]]*)**→str|list[int]**
为编码器创建输入提示。在分析和生成期间,HF 处理器将应用于此提示。
create_decoder_prompt**(*prompt:str|list[int]*,*mmdata:**Mapping[str,Any|list[Any_]]*)**→str|list[int]**
为解码器创建输入提示。
apply**(*prompt:str|list[int]*,*mmdata:**Mapping[str,Any|list[Any]]*,*hf_processor_mm_kwargs:Mapping[str,object]*,*return_mm_hashes:bool _=* *False*)**→ MultiModalEncDecInputs**
处理多模态输入以用于 vLLM。主要处理步骤修改为适应编码器-解码器模型:1. 从输入提示文本创建编码器提示。2. 将 HF 处理器应用于编码器提示。3. 将输入提示文本复制为解码器提示输入。