From 268c3250787729198a0d86378a36e81d4606a2af Mon Sep 17 00:00:00 2001 From: WWW Date: Fri, 11 Apr 2025 06:31:17 +0800 Subject: [PATCH] Fix range_ratio Bug in RandomDataset (#16126) Signed-off-by: jadewang21 --- benchmarks/benchmark_dataset.py | 23 ++++++++++++++++++----- benchmarks/benchmark_serving.py | 19 ++++++++++++------- benchmarks/benchmark_throughput.py | 20 ++++++++++++-------- 3 files changed, 42 insertions(+), 20 deletions(-) diff --git a/benchmarks/benchmark_dataset.py b/benchmarks/benchmark_dataset.py index c6630800..8bb7cfe0 100644 --- a/benchmarks/benchmark_dataset.py +++ b/benchmarks/benchmark_dataset.py @@ -288,7 +288,7 @@ def process_image(image: Any) -> Mapping[str, Any]: class RandomDataset(BenchmarkDataset): # Default values copied from benchmark_serving.py for the random dataset. DEFAULT_PREFIX_LEN = 0 - DEFAULT_RANGE_RATIO = 1.0 + DEFAULT_RANGE_RATIO = 0.0 DEFAULT_INPUT_LEN = 1024 DEFAULT_OUTPUT_LEN = 128 @@ -308,19 +308,32 @@ class RandomDataset(BenchmarkDataset): output_len: int = DEFAULT_OUTPUT_LEN, **kwargs, ) -> list[SampleRequest]: + # Enforce range_ratio < 1 + assert range_ratio < 1.0, ( + "random_range_ratio must be < 1.0 to ensure a valid sampling range" + ) + vocab_size = tokenizer.vocab_size prefix_token_ids = (np.random.randint( 0, vocab_size, size=prefix_len).tolist() if prefix_len > 0 else []) - input_low = int(input_len * range_ratio) - output_low = int(output_len * range_ratio) + # New sampling logic: [X * (1 - b), X * (1 + b)] + input_low = int(input_len * (1 - range_ratio)) + input_high = int(input_len * (1 + range_ratio)) + output_low = int(output_len * (1 - range_ratio)) + output_high = int(output_len * (1 + range_ratio)) + + # Add logging for debugging + logger.info("Sampling input_len from [%s, %s]", input_low, input_high) + logger.info("Sampling output_len from [%s, %s]", output_low, + output_high) input_lens = np.random.randint(input_low, - input_len + 1, + input_high + 1, size=num_requests) output_lens = np.random.randint(output_low, - output_len + 1, + output_high + 1, size=num_requests) offsets = np.random.randint(0, vocab_size, size=num_requests) diff --git a/benchmarks/benchmark_serving.py b/benchmarks/benchmark_serving.py index 0f061f89..b5bd840d 100644 --- a/benchmarks/benchmark_serving.py +++ b/benchmarks/benchmark_serving.py @@ -996,18 +996,23 @@ if __name__ == "__main__": random_group.add_argument( "--random-range-ratio", type=float, - default=1.0, - help="Range of sampled ratio of input/output length, " - "used only for random sampling.", + default=0.0, + help="Range ratio for sampling input/output length, " + "used only for random sampling. Must be in the range [0, 1) to define " + "a symmetric sampling range" + "[length * (1 - range_ratio), length * (1 + range_ratio)].", ) random_group.add_argument( "--random-prefix-len", type=int, default=0, - help="Number of fixed prefix tokens before random " - " context. The length range of context in a random " - " request is [random-prefix-len, " - " random-prefix-len + random-prefix-len * random-range-ratio).") + help=("Number of fixed prefix tokens before the random context " + "in a request. " + "The total input length is the sum of `random-prefix-len` and " + "a random " + "context length sampled from [input_len * (1 - range_ratio), " + "input_len * (1 + range_ratio)]."), + ) hf_group = parser.add_argument_group("hf dataset options") hf_group.add_argument("--hf-subset", diff --git a/benchmarks/benchmark_throughput.py b/benchmarks/benchmark_throughput.py index 33a31e62..39e4a34b 100644 --- a/benchmarks/benchmark_throughput.py +++ b/benchmarks/benchmark_throughput.py @@ -594,18 +594,22 @@ if __name__ == "__main__": default=None, help="Path to the lora adapters to use. This can be an absolute path, " "a relative path, or a Hugging Face model identifier.") - parser.add_argument("--prefix-len", - type=int, - default=None, - help="Number of prefix tokens per request." - "This is for the RandomDataset and SonnetDataset") + parser.add_argument( + "--prefix-len", + type=int, + default=0, + help="Number of fixed prefix tokens before the random " + "context in a request (default: 0).", + ) # random dataset parser.add_argument( "--random-range-ratio", type=float, - default=None, - help="Range of sampled ratio of input/output length, " - "used only for RandomDataSet.", + default=0.0, + help="Range ratio for sampling input/output length, " + "used only for RandomDataset. Must be in the range [0, 1) to define " + "a symmetric sampling range " + "[length * (1 - range_ratio), length * (1 + range_ratio)].", ) # hf dtaset