Tiny support range ratio in GSP in bench serving (#14828)

This commit is contained in:
fzyzcjy
2025-12-11 17:26:07 +08:00
committed by GitHub
parent a368df2818
commit 45eeeb9a3c

View File

@@ -829,6 +829,7 @@ def get_dataset(args, tokenizer, model_id=None):
system_prompt_len=args.gsp_system_prompt_len,
question_len=args.gsp_question_len,
output_len=args.gsp_output_len,
range_ratio=getattr(args, "gsp_range_ratio", 1.0),
tokenizer=tokenizer,
args=args,
)
@@ -1247,6 +1248,14 @@ def sample_sharegpt_requests(
return filtered_dataset
def compute_random_lens(full_len: int, range_ratio: float, num: int):
return np.random.randint(
max(int(full_len * range_ratio), 1),
full_len + 1,
size=num,
)
def sample_random_requests(
input_len: int,
output_len: int,
@@ -1257,15 +1266,15 @@ def sample_random_requests(
random_sample: bool = True,
return_text: bool = True,
) -> List[DatasetRow]:
input_lens = np.random.randint(
max(int(input_len * range_ratio), 1),
input_len + 1,
size=num_prompts,
input_lens = compute_random_lens(
full_len=input_len,
range_ratio=range_ratio,
num=num_prompts,
)
output_lens = np.random.randint(
int(output_len * range_ratio),
output_len + 1,
size=num_prompts,
output_lens = compute_random_lens(
full_len=output_len,
range_ratio=range_ratio,
num=num_prompts,
)
if random_sample:
@@ -1488,11 +1497,15 @@ def sample_image_requests(
)
# Sample text lengths
input_lens = np.random.randint(
max(int(input_len * range_ratio), 1), input_len + 1, size=num_requests
input_lens = compute_random_lens(
full_len=input_len,
range_ratio=range_ratio,
num=num_requests,
)
output_lens = np.random.randint(
int(output_len * range_ratio), output_len + 1, size=num_requests
output_lens = compute_random_lens(
full_len=output_len,
range_ratio=range_ratio,
num=num_requests,
)
def _gen_random_image_data_uri(
@@ -1588,6 +1601,7 @@ def sample_generated_shared_prefix_requests(
system_prompt_len: int,
question_len: int,
output_len: int,
range_ratio: float,
tokenizer: PreTrainedTokenizerBase,
args: argparse.Namespace,
) -> List[DatasetRow]:
@@ -1595,23 +1609,43 @@ def sample_generated_shared_prefix_requests(
cache_path = get_gen_prefix_cache_path(args, tokenizer)
# Try to load from cache first
if cache_path.exists():
if cache_path.exists() and range_ratio == 1:
print(f"\nLoading cached generated input data from {cache_path}")
with open(cache_path, "rb") as f:
return pickle.load(f)
print("\nGenerating new input data...")
print(
f"\nGenerating new input data... "
f"({num_groups=}, {prompts_per_group}, {system_prompt_len=}, {question_len=}, {output_len=}, {range_ratio=})"
)
system_prompt_lens = compute_random_lens(
full_len=system_prompt_len,
range_ratio=range_ratio,
num=num_groups,
)
question_lens = compute_random_lens(
full_len=question_len,
range_ratio=range_ratio,
num=num_groups * prompts_per_group,
)
output_lens = compute_random_lens(
full_len=output_len,
range_ratio=range_ratio,
num=num_groups * prompts_per_group,
)
del system_prompt_len, question_len, output_len
# Generate system prompts for each group
system_prompts = []
for _ in range(num_groups):
system_prompt = gen_prompt(tokenizer, system_prompt_len)
for i in range(num_groups):
system_prompt = gen_prompt(tokenizer, system_prompt_lens[i].item())
system_prompts.append(system_prompt)
# Generate questions
questions = []
for _ in range(num_groups * prompts_per_group):
question = gen_prompt(tokenizer, question_len)
for i in range(num_groups * prompts_per_group):
question = gen_prompt(tokenizer, question_lens[i].item())
questions.append(question)
# Combine system prompts with questions
@@ -1624,7 +1658,8 @@ def sample_generated_shared_prefix_requests(
for prompt_idx in tqdm(
range(prompts_per_group), desc="Generating questions", leave=False
):
question = questions[group_idx * prompts_per_group + prompt_idx]
flat_index = group_idx * prompts_per_group + prompt_idx
question = questions[flat_index]
full_prompt = f"{system_prompt}\n\n{question}"
prompt_len = len(tokenizer.encode(full_prompt))
@@ -1632,11 +1667,11 @@ def sample_generated_shared_prefix_requests(
DatasetRow(
prompt=full_prompt,
prompt_len=prompt_len,
output_len=output_len,
output_len=output_lens[flat_index].item(),
)
)
total_input_tokens += prompt_len
total_output_tokens += output_len
total_output_tokens += output_lens[flat_index].item()
# Shuffle questions
random.shuffle(input_requests)
@@ -2873,6 +2908,13 @@ if __name__ == "__main__":
default=256,
help="Target length in tokens for outputs in generated-shared-prefix dataset",
)
parser.add_argument(
"--gsp-range-ratio",
type=float,
# WARN: The default 1.0 is for backward compatibility, and is different from the default 0.0 for random dataset
default=1.0,
help="Range of sampled ratio of input/output length, used only for gsp dataset.",
)
mooncake_group = parser.add_argument_group("mooncake dataset arguments")
mooncake_group.add_argument(
"--mooncake-slowdown-factor",