Skip to content

Commit 5fe028c

Browse files
committed
Update testing for trtllm-bench dataset.
Signed-off-by: Frank Di Natale <3429989+FrankD412@users.noreply.github.com>
1 parent dcbb3d4 commit 5fe028c

File tree

6 files changed

+75
-82
lines changed

6 files changed

+75
-82
lines changed

tests/integration/defs/perf/README_release_test.md

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,27 +24,25 @@ For trtllm-bench, the test extracts the following key performance metrics from l
2424

2525
#### Without LoRA
2626
```python
27-
prepare_data_script = os.path.join(self._llm_root, "benchmarks", "cpp", "prepare_dataset.py")
2827
data_cmd += [
29-
"python3", prepare_data_script, "--stdout",
30-
f"--tokenizer={tokenizer_dir}", f"token-norm-dist",
31-
f"--num-requests={self._config.num_reqs}",
32-
f"--input-mean={input_len}", f"--output-mean={output_len}",
33-
f"--input-stdev={istdev}", f"--output-stdev={ostdev}",
34-
f" > {dataset_path}"
28+
"trtllm-bench", f"--model={tokenizer_dir}",
29+
"dataset", "--output", dataset_path, "token-norm-dist",
30+
f"--num-requests={self._config.num_reqs}",
31+
f"--input-mean={input_len}", f"--output-mean={output_len}",
32+
f"--input-stdev={istdev}", f"--output-stdev={ostdev}"
3533
]
3634
```
3735

3836
#### With LoRA
3937
```python
40-
"python3", prepare_data_script, f"--stdout",
38+
"trtllm-bench", f"--model={tokenizer_dir}",
39+
"dataset", "--output", dataset_path,
4140
f"--rand-task-id 0 {nloras-1}",
42-
f"--tokenizer={tokenizer_dir}", f"--lora-dir={lora_dir}",
41+
f"--lora-dir={lora_dir}",
4342
f"token-norm-dist",
4443
f"--num-requests={self._config.num_reqs}",
4544
f"--input-mean={input_len}", f"--output-mean={output_len}",
46-
f"--input-stdev={istdev}", f"--output-stdev={ostdev}",
47-
f" > {dataset_path}"
45+
f"--input-stdev={istdev}", f"--output-stdev={ostdev}"
4846
```
4947

5048
### 2.2 PyTorch Configuration Generation

tests/integration/defs/perf/test_perf.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1628,6 +1628,12 @@ def get_prepare_data_command(self, engine_dir, input_len,
16281628
"llama-7b-hf")
16291629
if not os.path.exists(engine_dir):
16301630
os.makedirs(engine_dir, exist_ok=True)
1631+
if self._config.num_loras > 0:
1632+
istdev = 16
1633+
ostdev = 24
1634+
nloras = self._config.num_loras
1635+
dataset_path = os.path.join(engine_dir, "synthetic_data.json")
1636+
16311637
if self._config.num_loras > 0:
16321638
istdev = 16
16331639
ostdev = 24
@@ -1653,14 +1659,13 @@ def get_prepare_data_command(self, engine_dir, input_len,
16531659
self.lora_dirs.append(f"{lora_dir}/{i}")
16541660
data_cmd += [f"ln -sf {lora_path} {lora_dir}/{i}", ";"]
16551661
data_cmd += [
1656-
"python3", prepare_data_script, f"--stdout",
1657-
f"--rand-task-id 0 {nloras-1}",
1658-
f"--tokenizer={tokenizer_dir}", f"--lora-dir={lora_dir}",
1662+
"trtllm-bench", f"--model={tokenizer_dir}", "dataset",
1663+
"--output", f"{dataset_path}",
1664+
f"--rand-task-id 0 {nloras-1}", f"--lora-dir={lora_dir}",
16591665
f"token-norm-dist",
16601666
f"--num-requests={self._config.num_reqs}",
16611667
f"--input-mean={input_len}", f"--output-mean={output_len}",
1662-
f"--input-stdev={istdev}", f"--output-stdev={ostdev}",
1663-
f" > {dataset_path}"
1668+
f"--input-stdev={istdev}", f"--output-stdev={ostdev}"
16641669
]
16651670

16661671
else:
@@ -1673,12 +1678,11 @@ def get_prepare_data_command(self, engine_dir, input_len,
16731678
dataset_path = os.path.join(engine_dir, "synthetic_data.json")
16741679
if self._build_script == 'trtllm-bench':
16751680
data_cmd += [
1676-
"python3", prepare_data_script, "--stdout",
1677-
f"--tokenizer={tokenizer_dir}", f"token-norm-dist",
1681+
"trtllm-bench", f"--model={tokenizer_dir}", "dataset",
1682+
"--output", f"{dataset_path}", "token-norm-dist",
16781683
f"--num-requests={self._config.num_reqs}",
16791684
f"--input-mean={input_len}", f"--output-mean={output_len}",
1680-
f"--input-stdev={istdev}", f"--output-stdev={ostdev}",
1681-
f" > {dataset_path}"
1685+
f"--input-stdev={istdev}", f"--output-stdev={ostdev}"
16821686
]
16831687
else:
16841688
data_cmd += [

tests/integration/defs/perf/utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -450,8 +450,8 @@ def run_ex(self,
450450
self._gpu_clock_lock = gpu_clock_lock
451451
tmpDir = temp_wd(self.get_working_dir())
452452

453-
is_prepare_dataset_cmd = 'prepare_dataset' in commands.get_cmd_str(
454-
cmd_idx)
453+
cmd_str = commands.get_cmd_str(cmd_idx)
454+
is_prepare_dataset_cmd = 'prepare_dataset' in cmd_str or "dataset --output" in cmd_str
455455

456456
# Start the timer.
457457
self._start_timestamp = datetime.utcnow()

tests/integration/defs/test_e2e.py

Lines changed: 24 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -489,16 +489,15 @@ def __call__(self):
489489
return self.run_bench()
490490

491491
def prepare_dataset(self):
492-
dataset_tool = Path(self.llm_root, "benchmarks", "cpp",
493-
"prepare_dataset.py")
494-
495492
# Generate a small dataset to run a test.
496493
self.work_dir.mkdir(parents=True)
497494
command = [
498-
f"{dataset_tool.resolve()}",
499-
"--stdout",
500-
"--tokenizer",
495+
"trtllm-bench",
496+
"--model",
501497
f"{self.model_path}",
498+
"dataset",
499+
"--output",
500+
f"{self.dataset_path}",
502501
"token-norm-dist",
503502
"--input-mean",
504503
"128",
@@ -512,13 +511,6 @@ def prepare_dataset(self):
512511
str(self.num_requests),
513512
]
514513
print(f"Running command: {' '.join(command)}")
515-
dataset_output = self.llm_venv.run_cmd(
516-
command,
517-
caller=check_output,
518-
)
519-
# Grab the stdout and write it to a dataset file for passing to suite.
520-
with open(self.dataset_path, "w") as dataset:
521-
dataset.write(dataset_output)
522514

523515
def build_engine(self):
524516
if self.skip_engine_build:
@@ -769,7 +761,6 @@ def trtllm_bench_prolog(
769761
stream_mode = "streaming" if streaming else "non-streaming"
770762
benchmark_name = f"trtllm-bench-sanity-{quant_name}-{stream_mode}"
771763
benchmark_name += "-pytorch-backend" if skip_engine_build else benchmark_name
772-
dataset_tool = Path(llm_root, "benchmarks", "cpp", "prepare_dataset.py")
773764

774765
work_dir = Path(tempfile.TemporaryDirectory().name
775766
) if skip_engine_build else Path(engine_dir)
@@ -778,29 +769,25 @@ def trtllm_bench_prolog(
778769
shutil.rmtree(work_dir, ignore_errors=True)
779770
# Generate a small dataset to run a test.
780771
work_dir.mkdir(parents=True)
781-
dataset_output = llm_venv.run_cmd(
782-
[
783-
f"{dataset_tool.resolve()}",
784-
"--stdout",
785-
"--tokenizer",
786-
f"{model_path}",
787-
"token-norm-dist",
788-
"--input-mean",
789-
"128",
790-
"--output-mean",
791-
"128",
792-
"--input-stdev",
793-
"0",
794-
"--output-stdev",
795-
"0",
796-
"--num-requests",
797-
"10",
798-
],
799-
caller=check_output,
800-
)
801-
# Grab the stdout and write it to a dataset file for passing to suite.
802-
with open(dataset_path, "w") as dataset:
803-
dataset.write(dataset_output)
772+
llm_venv.run_cmd([
773+
"trtllm-bench",
774+
"--model",
775+
f"{model_path}",
776+
"dataset",
777+
"--output",
778+
f"{dataset_path}",
779+
"token-norm-dist",
780+
"--input-mean",
781+
"128",
782+
"--output-mean",
783+
"128",
784+
"--input-stdev",
785+
"0",
786+
"--output-stdev",
787+
"0",
788+
"--num-requests",
789+
"10",
790+
])
804791

805792
if not skip_engine_build:
806793
build_cmd = \

tests/unittest/_torch/auto_deploy/unit/singlegpu/test_ad_trtllm_bench.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,16 @@ def run_benchmark(
4242
def prepare_dataset(root_dir: str, temp_dir: str, model_path_or_name: str):
4343
_DATASET_NAME = "synthetic_128_128.txt"
4444
dataset_path = Path(temp_dir, _DATASET_NAME)
45-
dataset_tool = Path(root_dir, "benchmarks", "cpp", "prepare_dataset.py")
4645
script_dir = Path(root_dir, "benchmarks", "cpp")
4746

4847
# Generate a small dataset to run a test - matching workload configuration
4948
command = [
50-
"python3",
51-
f"{dataset_tool}",
52-
"--stdout",
53-
"--tokenizer",
49+
"trtllm-bench",
50+
"--model",
5451
model_path_or_name,
52+
"dataset",
53+
"--output",
54+
f"{dataset_path}",
5555
"token-norm-dist",
5656
"--input-mean",
5757
"128",
@@ -70,9 +70,7 @@ def prepare_dataset(root_dir: str, temp_dir: str, model_path_or_name: str):
7070
)
7171
if result.returncode != 0:
7272
raise RuntimeError(f"Failed to prepare dataset: {result.stderr}")
73-
# Grab the stdout and write it to a dataset file for passing to suite.
74-
with open(dataset_path, "w") as dataset:
75-
dataset.write(result.stdout)
73+
7674
return dataset_path
7775

7876

tests/unittest/tools/test_prepare_dataset.py

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -48,32 +48,31 @@ def temp_lora_dir(self) -> str:
4848
task_dir.mkdir(parents=True, exist_ok=True)
4949
yield str(lora_dir)
5050

51-
def _build_base_command(self, llm_root: Path) -> List[str]:
51+
def _build_base_command(self, output_path: Path) -> List[str]:
5252
"""
5353
Build the base command for running prepare_dataset.py.
5454
5555
Args:
56-
llm_root: Path to the TensorRT LLM root directory
56+
output_path: Path to the output dataset file
5757
5858
Returns:
5959
List[str]: Base command components
6060
6161
Raises:
6262
pytest.skip: If LLM_MODELS_ROOT is not available
6363
"""
64-
script_path = llm_root / _PREPARE_DATASET_SCRIPT_PATH
65-
cmd = ["python3", str(script_path)]
64+
cmd = ["trtllm-bench"]
6665

6766
# Add required tokenizer argument
6867
model_cache = llm_models_root()
6968
if model_cache is None:
7069
pytest.skip("LLM_MODELS_ROOT not available")
7170

7271
tokenizer_dir = model_cache / _TOKENIZER_SUBPATH
73-
cmd.extend(["--tokenizer", str(tokenizer_dir)])
72+
cmd.extend(["--model", str(tokenizer_dir)])
7473

7574
# Always add --stdout flag since we parse stdout output
76-
cmd.extend(["--stdout"])
75+
cmd.extend(["dataset", "--output", f"{output_path}"])
7776

7877
return cmd
7978

@@ -109,7 +108,7 @@ def _add_synthetic_data_arguments(self, cmd: List[str]) -> None:
109108
str(_DEFAULT_OUTPUT_STDEV)
110109
])
111110

112-
def _run_prepare_dataset(self, llm_root: Path, **kwargs) -> str:
111+
def _run_prepare_dataset(self, **kwargs) -> str:
113112
"""
114113
Execute prepare_dataset.py with specified parameters and capture
115114
output.
@@ -124,13 +123,20 @@ def _run_prepare_dataset(self, llm_root: Path, **kwargs) -> str:
124123
Raises:
125124
subprocess.CalledProcessError: If the command execution fails
126125
"""
127-
cmd = self._build_base_command(llm_root)
128-
self._add_lora_arguments(cmd, **kwargs)
129-
self._add_synthetic_data_arguments(cmd)
126+
with tempfile.TemporaryDirectory() as temp_dir:
127+
output_path = Path(temp_dir) / "dataset.jsonl"
128+
cmd = self._build_base_command(output_path)
129+
self._add_lora_arguments(cmd, **kwargs)
130+
self._add_synthetic_data_arguments(cmd)
131+
132+
# Execute command and capture output
133+
subprocess.run(cmd, check=True, cwd=temp_dir)
134+
135+
data = ""
136+
with open(output_path, "r") as f:
137+
data = f.read()
130138

131-
# Execute command and capture output
132-
result = subprocess.run(cmd, capture_output=True, text=True, check=True)
133-
return result.stdout
139+
return data
134140

135141
def _parse_json_output(self, output: str) -> List[Dict[str, Any]]:
136142
"""
@@ -198,7 +204,7 @@ def _validate_lora_request(self,
198204
},
199205
id="random_task_id")
200206
])
201-
def test_lora_metadata_generation(self, llm_root: Path, temp_lora_dir: str,
207+
def test_lora_metadata_generation(self, temp_lora_dir: str,
202208
test_params: Dict) -> None:
203209
"""Test LoRA metadata generation with various configurations."""
204210
# Extract test parameters
@@ -213,7 +219,7 @@ def test_lora_metadata_generation(self, llm_root: Path, temp_lora_dir: str,
213219
if rand_task_id is not None:
214220
kwargs["rand_task_id"] = rand_task_id
215221

216-
output = self._run_prepare_dataset(llm_root, **kwargs)
222+
output = self._run_prepare_dataset(**kwargs)
217223
json_data = self._parse_json_output(output)
218224

219225
assert len(json_data) > 0, f"No JSON data generated for {description}"

0 commit comments

Comments
 (0)