随机合成数据集使用指南
一. 应用简介
该功能仅支持性能测评相关场景,而不支持精度测评相关场景
该功能旨在不提供真实数据集,而考虑使用构造随机的合成数据集的场景,用于大语言模型推理性能基准测试。
二. 使用指导
配置ais_bench/benchmark/configs/datasets/synthetic 目录下的配置模板文件中的synthetic_config参数。
当前提供了两种不同构造类型的随机数据集配置模板文件,用户可根据自己的需求选择合适的模板文件进行修改:
synthetic_gen_string.py: 生成随机长度字符串(模拟真实输入)synthetic_config = { "Type": "string", ... # 其他参数 }
synthetic_gen_tokenid.py: 生成随机token id序列(直接输入编码后的Token)synthetic_config = { "Type": "tokenid", ... # 其他参数 }
注意: ais_bench/benchmark/configs/datasets/synthetic/synthetic_gen.py模板所使用配置需在ais_bench/benchmark/configs/datasets/synthetic中进行修改。为了统一数据集配置模式,此方法将在后续版本中弃用。
执行命令:
ais_bench --models {model_api_file} --datasets synthetic_gen_{string/tokenid} {other_option_args}
在命令行执行如下命令启动测评:
随机长度字符串数据集:
ais_bench --models {model_api_file} --datasets synthetic_gen_string --mode {mode} --request-count {request_count} --string-config-input {input_config} --string-config-output {output_config}
随机token id序列数据集:
ais_bench --models {model_api_file} --datasets synthetic_gen_tokenid --mode {mode} --request-count {request_count} --tokenid-config-request-size {request_size} --tokenid-config-prefix-len {prefix_len}
样例:
ais_bench --models vllm_api_stream_chat --datasets synthetic_gen_tokenid --mode perf \
--batch-size 1 8 16 32 40 50 64 \
--num-prompts 1 8 16 32 40 50 64 \
--request-count 64 \
--tokenid-config-request-size 8192 \
--tokenid-config-prefix-len 6554 \
--max-out-len 1024 \
--num-warmups 16 \
--path /mnt/weight/Qwen3.8-27B-w8a8 \
--model-name qwen3.8 \
--host-ip 127.0.0.1 \
--host-port 8000 \
--generation-kwargs '{"ignore_eos":true}'
三. 参数说明
以下仅做配置文件中参数的大概说明,详细取值要求需参考配置文件中预留的注释和使用场景。
3.1 公共参数
参数名称 |
类型 |
说明 |
取值范围 |
|---|---|---|---|
Type |
string |
数据集类型(必填) |
string/tokenid |
RequestCount |
int |
生成的请求总数(必填) |
[1, 1,048,576] |
3.2 String类型配置(Type="string"时需配置)
"StringConfig" : {
"Input" : { # 输入序列配置
"Method": str, # 分布类型:uniform/gaussian/zipf
"Params": {} # 对应分布的参数
},
"Output" : { # 输出序列配置(参数同上)
"Method": str,
"Params": {}
}
}
输入输出分布参数说明
关键规则
所有数值参数的最大值默认应小于 2^20(即 1,048,576)
请求的最大输入/输出长度还会受到服务化配置的限制,具体参考该配置文件中的注释描述
分布类型 |
参数 |
类型 |
说明 |
取值范围 |
|---|---|---|---|---|
uniform |
|
int |
输入/出序列的最小长度 |
[1, 1,048,576] |
|
int |
输入/出序列的最大长度(可等于MinValue) |
[≥MinValue] |
|
gaussian |
|
float |
分布中心值(均值) |
[-3.0e38, 3.0e38] |
|
float |
方差(控制数据分散程度) |
[0, 3.0e38] |
|
|
int |
输入/出序列的硬性下限 |
[1, 1,048,576] |
|
|
int |
输入/出序列的硬性上限 |
[≥MinValue] |
|
zipf |
|
float |
形状参数(值越大分布越均匀) |
(1.0, 10.0] |
|
int |
输入/出序列的最小长度 |
[1, 1,048,576] |
|
|
int |
输入/出序列的最大长度(必须大于MinValue) |
[>MinValue] |
3.3 TokenId类型配置(Type="tokenid"时需配置)
"TokenIdConfig" : {
"RequestSize": int, # 单请求token数量
"PrefixLen": int # 所有请求的公共前缀token数量
}
四. 配置示例
4.1 String类型示例
1. Uniform均匀分布
synthetic_config = {
"Type": "string",
"RequestCount": 1000,
"StringConfig": {
"Input": {
"Method": "uniform",
"Params": {"MinValue": 50, "MaxValue": 500} # 输入长度50-500
},
"Output": {
"Method": "uniform",
"Params": {"MinValue": 20, "MaxValue": 200} # 输出长度20-200
}
}
}
特性:输入/输出长度在区间内等概率分布,适用于基准性能测试
2. Gaussian高斯分布
synthetic_config = {
"Type": "string",
"RequestCount": 800,
"StringConfig": {
"Input": {
"Method": "gaussian",
"Params": {
"Mean": 256, # 中心值256
"Var": 10, # 方差10
"MinValue": 64, # 实际范围64-512
"MaxValue": 512
}
},
"Output": {
"Method": "gaussian",
"Params": {
"Mean": 128,
"Var": 50,
"MinValue": 32,
"MaxValue": 256
}
}
}
}
分布特征:约95%的输入长度在[236,276]范围内(μ±2σ)
3. Zipf齐夫分布
synthetic_config = {
"Type": "string",
"RequestCount": 1200,
"StringConfig": {
"Input": {
"Method": "zipf",
"Params": {
"Alpha": 1.5, # 强长尾效应
"MinValue": 10, # 输入长度范围10-1000
"MaxValue": 1000
}
},
"Output": {
"Method": "zipf",
"Params": {
"Alpha": 2.0, # 较平缓分布
"MinValue": 5,
"MaxValue": 500
}
}
}
}
典型场景:模拟真实场景中的请求长尾分布,当Alpha=1.5时,约20%的请求占60%的计算量
4. 混合分布配置
synthetic_config = {
"Type": "string",
"RequestCount": 1500,
"StringConfig": {
"Input": {
"Method": "zipf", # 输入长尾分布
"Params": {
"Alpha": 1.2,
"MinValue": 10,
"MaxValue": 2000
}
},
"Output": {
"Method": "uniform", # 输出均匀分布
"Params": {
"MinValue": 50,
"MaxValue": 300
}
}
}
}
4.2 TokenId类型示例
长文本压力测试
synthetic_config = {
"Type": "tokenid",
"RequestCount": 1000,
"TokenIdConfig": {
"RequestSize": 2048, # 单请求2048个token
"PrefixLen": 0
}
}
短文本性能测试
synthetic_config = {
"Type": "tokenid",
"RequestCount": 5000,
"TokenIdConfig": {
"RequestSize": 128, # 短文本处理场景
"PrefixLen": 0
}
}
公共前缀性能测试
synthetic_config = {
"Type": "tokenid",
"RequestCount": 5000,
"TokenIdConfig": {
"RequestSize": 512, # 单请求512个token
"PrefixLen": 256 # 所有请求前面256个token相等
}
}
五. 常见问题
Q1: 选择分布类型?
均匀分布:适用于压力测试的基线场景
高斯分布:模拟真实场景中的平均请求长度
Zipf分布:生成长尾分布数据(如1%的请求占50%的计算量)
分布组合建议:
压力测试:Input使用zipf分布,Output使用uniform分布
稳定性测试:Input/Output均使用gaussian分布
Q2: 为什么在指定了 输入长度 情况下,但性能测评结果矩阵还是会显示非预期值?
tokenid模式:发送时会将每条由模型权重词表范围下随机生成的token所组成的、指定长度的prompt重新decode为字符串格式后再发送给服务化,由于每个模型的词表映射可能出现多对一、一对多等情况,故可能出现波动string模式:该模式下的输入长度指代输入的string的长度,而非token的长度预处理阶段:在使用chat相关的api时,可能会在前后进行一些额外的字符串拼接
Q3:为什么在String模式下,指定了 输出长度,但性能测评结果矩阵还是会显示非预期值?
相差很大:请检查在model api配置文件中是否正确配置
generation_kwargs中的ignore_eos参数(可以使得服务化处理输出时忽略终止符直至输出长度达到预设值)为True
六. 注意事项
tokenid模式:该模式下的tokenid取值范围取决于在模型配置文件中指定的模型的词表范围string模式:当MinValue=MaxValue时生成固定长度序列
七. 通过自定义配置文件实现
💡 上述合成数据集测评场景也可以通过 自定义配置文件方式 实现。配置文件本质上是 Python 脚本,支持循环、条件判断、列表推导等所有 Python 语法,可将模型、数据集、summarizer 等配置写入一个文件,一次编写、多次复用。详见 自定义配置文件运行AISBench 中"合成数据集性能测评"示例。