@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 315068eb4a
Fork 0

A high-throughput and memory-efficient inference and serving engine for LLMs

Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git

Synced Nov 13, 15:45 UTC

[FixBug]Aeala/ShareGPT_Vicuna_unfiltered marked as multimodal benchmark (#28265)

Signed-off-by: princepride <wangzhipeng628@gmail.com>

汪志鹏 committed Nov 7, 2025 at 17:35 UTC 315068eb4a4b87a54ea201898b2fb6267f147eb3
2 files changed +73 -2
vllm/benchmarks/datasets.py
+66 -2
@@ -1711,6 +1711,11 @@ def get_samples(args, tokenizer) -> list[SampleRequest]:
1711 ):
1712 dataset_class = MTBenchDataset
1713 args.hf_split = "train"
1714 + elif (
1715 + args.dataset_path in MultiModalConversationDataset.SUPPORTED_DATASET_PATHS
1716 + or args.hf_name in MultiModalConversationDataset.SUPPORTED_DATASET_PATHS
1717 + ):
1718 + dataset_class = MultiModalConversationDataset
1719 elif (
1720 args.dataset_path in ConversationDataset.SUPPORTED_DATASET_PATHS
1721 or args.hf_name in ConversationDataset.SUPPORTED_DATASET_PATHS
@@ -2272,12 +2277,71 @@ class HuggingFaceDataset(BenchmarkDataset):
2277
2278
2279 class ConversationDataset(HuggingFaceDataset):
2275 - """Dataset for conversation data with multimodal support."""
2280 + """Dataset for text-only conversation data."""
2281
2282 SUPPORTED_DATASET_PATHS = {
2278 - "lmms-lab/LLaVA-OneVision-Data",
2283 "Aeala/ShareGPT_Vicuna_unfiltered",
2284 }
2285 + IS_MULTIMODAL = False
2286 +
2287 + def sample(
2288 + self,
2289 + tokenizer: PreTrainedTokenizerBase,
2290 + num_requests: int,
2291 + output_len: int | None = None,
2292 + enable_multimodal_chat: bool = False,
2293 + request_id_prefix: str = "",
2294 + no_oversample: bool = False,
2295 + **kwargs,
2296 + ) -> list:
2297 + # Filter examples with at least 2 conversations
2298 + filtered_data = self.data.filter(lambda x: len(x["conversations"]) >= 2)
2299 + sampled_requests = []
2300 + ind = 0
2301 + dynamic_output = output_len is None
2302 +
2303 + for item in filtered_data:
2304 + if len(sampled_requests) >= num_requests:
2305 + break
2306 + conv = item["conversations"]
2307 + prompt, completion = conv[0]["value"], conv[1]["value"]
2308 +
2309 + prompt_ids = tokenizer(prompt).input_ids
2310 + completion_ids = tokenizer(completion).input_ids
2311 + prompt_len = len(prompt_ids)
2312 + completion_len = len(completion_ids)
2313 + output_len = completion_len if dynamic_output else output_len
2314 + assert isinstance(output_len, int) and output_len > 0
2315 + if dynamic_output and not is_valid_sequence(prompt_len, completion_len):
2316 + continue
2317 + mm_content = process_image(item["image"]) if "image" in item else None
2318 + if enable_multimodal_chat:
2319 + # Note: when chat is enabled the request prompt_len is no longer
2320 + # accurate and we will be using request output to count the
2321 + # actual prompt len and output len
2322 + prompt = self.apply_multimodal_chat_transformation(prompt, mm_content)
2323 + sampled_requests.append(
2324 + SampleRequest(
2325 + prompt=prompt,
2326 + prompt_len=prompt_len,
2327 + expected_output_len=output_len,
2328 + multi_modal_data=mm_content,
2329 + request_id=request_id_prefix + str(ind),
2330 + )
2331 + )
2332 + ind += 1
2333 + self.maybe_oversample_requests(
2334 + sampled_requests, num_requests, request_id_prefix, no_oversample
2335 + )
2336 + return sampled_requests
2337 +
2338 +
2339 +class MultiModalConversationDataset(HuggingFaceDataset):
2340 + """Dataset for multimodal conversation data."""
2341 +
2342 + SUPPORTED_DATASET_PATHS = {
2343 + "lmms-lab/LLaVA-OneVision-Data",
2344 + }
2345 IS_MULTIMODAL = True
2346
2347 def sample(
vllm/benchmarks/throughput.py
+7
@@ -21,6 +21,7 @@ from vllm.benchmarks.datasets import (
21 BurstGPTDataset,
22 ConversationDataset,
23 InstructCoderDataset,
24 + MultiModalConversationDataset,
25 PrefixRepetitionRandomDataset,
26 RandomDataset,
27 SampleRequest,
@@ -367,6 +368,11 @@ def get_requests(args, tokenizer):
368 elif args.dataset_path in InstructCoderDataset.SUPPORTED_DATASET_PATHS:
369 dataset_cls = InstructCoderDataset
370 common_kwargs["dataset_split"] = "train"
371 + elif args.dataset_path in MultiModalConversationDataset.SUPPORTED_DATASET_PATHS:
372 + dataset_cls = MultiModalConversationDataset
373 + common_kwargs["dataset_subset"] = args.hf_subset
374 + common_kwargs["dataset_split"] = args.hf_split
375 + sample_kwargs["enable_multimodal_chat"] = True
376 elif args.dataset_path in ConversationDataset.SUPPORTED_DATASET_PATHS:
377 dataset_cls = ConversationDataset
378 common_kwargs["dataset_subset"] = args.hf_subset
@@ -456,6 +462,7 @@ def validate_args(args):
462 elif args.dataset_name == "hf":
463 if args.dataset_path in (
464 VisionArenaDataset.SUPPORTED_DATASET_PATHS.keys()
465 + | MultiModalConversationDataset.SUPPORTED_DATASET_PATHS
466 | ConversationDataset.SUPPORTED_DATASET_PATHS
467 ):
468 assert args.backend == "vllm-chat", (