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 14, 05:30 UTC
[Benchmark] Add support for local hf dataset path in benchmark (#23999)
Signed-off-by: zjy0516 <riverclouds.zhu@qq.com>
Jiangyun Zhu committed
Sep 3, 2025 at 01:49 UTC
c83c4ff815f57f57194b99828368f5785ca4e1cc
2 files changed
+56
-15
benchmarks/README.md
+6
-1
@@ -110,7 +110,12 @@ become available.
110
111
🚧: to be supported
112
113
-**Note**: HuggingFace dataset's `dataset-name` should be set to `hf`
113
+**Note**: HuggingFace dataset's `dataset-name` should be set to `hf`.
114
+For local `dataset-path`, please set `hf-name` to its Hugging Face ID like
115
+
116
+```bash
117
+--dataset-path /datasets/VisionArena-Chat/ --hf-name lmarena-ai/VisionArena-Chat
118
+```
119
120
## 🚀 Example - Online Benchmark
121
vllm/benchmarks/datasets.py
+50
-14
@@ -1227,6 +1227,16 @@ def add_dataset_parser(parser: FlexibleArgumentParser):
1227
type=str,
1228
default=None,
1229
help="Split of the HF dataset.")
1230
+ hf_group.add_argument(
1231
+ "--hf-name",
1232
+ type=str,
1233
+ default=None,
1234
+ help=(
1235
+ "Name of the dataset on HuggingFace "
1236
+ "(e.g., 'lmarena-ai/VisionArena-Chat'). "
1237
+ "Specify this if your dataset-path is a local path."
1238
+ ),
1239
+ )
1240
hf_group.add_argument(
1241
"--hf-output-len",
1242
type=int,
@@ -1307,28 +1317,53 @@ def get_samples(args, tokenizer) -> list[SampleRequest]:
1317
elif args.dataset_name == "hf":
1318
# all following datasets are implemented from the
1319
# HuggingFaceDataset base class
1310
- if args.dataset_path in VisionArenaDataset.SUPPORTED_DATASET_PATHS:
1320
+ if (
1321
+ args.dataset_path in VisionArenaDataset.SUPPORTED_DATASET_PATHS
1322
+ or args.hf_name in VisionArenaDataset.SUPPORTED_DATASET_PATHS
1323
+ ):
1324
dataset_class = VisionArenaDataset
1325
args.hf_split = "train"
1326
args.hf_subset = None
1314
- elif args.dataset_path in InstructCoderDataset.SUPPORTED_DATASET_PATHS:
1327
+ elif (
1328
+ args.dataset_path in InstructCoderDataset.SUPPORTED_DATASET_PATHS
1329
+ or args.hf_name in InstructCoderDataset.SUPPORTED_DATASET_PATHS
1330
+ ):
1331
dataset_class = InstructCoderDataset
1332
args.hf_split = "train"
1317
- elif args.dataset_path in MTBenchDataset.SUPPORTED_DATASET_PATHS:
1333
+ elif (
1334
+ args.dataset_path in MTBenchDataset.SUPPORTED_DATASET_PATHS
1335
+ or args.hf_name in MTBenchDataset.SUPPORTED_DATASET_PATHS
1336
+ ):
1337
dataset_class = MTBenchDataset
1338
args.hf_split = "train"
1320
- elif args.dataset_path in ConversationDataset.SUPPORTED_DATASET_PATHS:
1339
+ elif (
1340
+ args.dataset_path in ConversationDataset.SUPPORTED_DATASET_PATHS
1341
+ or args.hf_name in ConversationDataset.SUPPORTED_DATASET_PATHS
1342
+ ):
1343
dataset_class = ConversationDataset
1322
- elif args.dataset_path in AIMODataset.SUPPORTED_DATASET_PATHS:
1344
+ elif (
1345
+ args.dataset_path in AIMODataset.SUPPORTED_DATASET_PATHS
1346
+ or args.hf_name in AIMODataset.SUPPORTED_DATASET_PATHS
1347
+ ):
1348
dataset_class = AIMODataset
1349
args.hf_split = "train"
1325
- elif args.dataset_path in NextEditPredictionDataset.SUPPORTED_DATASET_PATHS: # noqa: E501
1350
+ elif (
1351
+ args.dataset_path
1352
+ in NextEditPredictionDataset.SUPPORTED_DATASET_PATHS # noqa: E501
1353
+ or args.hf_name in NextEditPredictionDataset.SUPPORTED_DATASET_PATHS
1354
+ ):
1355
dataset_class = NextEditPredictionDataset
1356
args.hf_split = "train"
1328
- elif args.dataset_path in ASRDataset.SUPPORTED_DATASET_PATHS:
1357
+ elif (
1358
+ args.dataset_path in ASRDataset.SUPPORTED_DATASET_PATHS
1359
+ or args.hf_name in ASRDataset.SUPPORTED_DATASET_PATHS
1360
+ ):
1361
dataset_class = ASRDataset
1362
args.hf_split = "train"
1331
- elif args.dataset_path in MLPerfDataset.SUPPORTED_DATASET_PATHS:
1363
+ elif (
1364
+ args.dataset_path in MLPerfDataset.SUPPORTED_DATASET_PATHS
1365
+ or args.hf_name in MLPerfDataset.SUPPORTED_DATASET_PATHS
1366
+ ):
1367
dataset_class = MLPerfDataset
1368
args.hf_split = "train"
1369
else:
@@ -1358,6 +1393,7 @@ def get_samples(args, tokenizer) -> list[SampleRequest]:
1393
dataset_split=args.hf_split,
1394
random_seed=args.seed,
1395
no_stream=args.no_stream,
1396
+ hf_name=args.hf_name,
1397
).sample(
1398
num_requests=args.num_prompts,
1399
tokenizer=tokenizer,
@@ -1710,6 +1746,7 @@ class HuggingFaceDataset(BenchmarkDataset):
1746
dataset_split: str,
1747
no_stream: bool = False,
1748
dataset_subset: Optional[str] = None,
1749
+ hf_name: Optional[str] = None,
1750
**kwargs,
1751
) -> None:
1752
super().__init__(dataset_path=dataset_path, **kwargs)
@@ -1717,6 +1754,7 @@ class HuggingFaceDataset(BenchmarkDataset):
1754
self.dataset_split = dataset_split
1755
self.dataset_subset = dataset_subset
1756
self.load_stream = not no_stream
1757
+ self.hf_name = hf_name or dataset_path
1758
self.load_data()
1759
1760
def load_data(self) -> None:
@@ -1827,10 +1865,9 @@ class VisionArenaDataset(HuggingFaceDataset):
1865
for i, item in enumerate(self.data):
1866
if len(sampled_requests) >= num_requests:
1867
break
1830
- parser_fn = self.SUPPORTED_DATASET_PATHS.get(self.dataset_path)
1868
+ parser_fn = self.SUPPORTED_DATASET_PATHS.get(self.hf_name)
1869
if parser_fn is None:
1832
- raise ValueError(
1833
- f"Unsupported dataset path: {self.dataset_path}")
1870
+ raise ValueError(f"Unsupported dataset path: {self.hf_name}")
1871
prompt = parser_fn(item)
1872
mm_content = process_image(item["images"][0])
1873
prompt_len = len(tokenizer(prompt).input_ids)
@@ -2099,10 +2136,9 @@ class NextEditPredictionDataset(HuggingFaceDataset):
2136
def sample(self, tokenizer: PreTrainedTokenizerBase, num_requests: int,
2137
request_id_prefix: str = "",
2138
**kwargs):
2102
- formatting_prompt_func = self.MAPPING_PROMPT_FUNCS.get(
2103
- self.dataset_path)
2139
+ formatting_prompt_func = self.MAPPING_PROMPT_FUNCS.get(self.hf_name)
2140
if formatting_prompt_func is None:
2105
- raise ValueError(f"Unsupported dataset path: {self.dataset_path}")
2141
+ raise ValueError(f"Unsupported dataset path: {self.hf_name}")
2142
samples = []
2143
for i, sample in enumerate(self.data):
2144
sample = formatting_prompt_func(sample)