变长与指定prefix cache命中率数据生成/压测和多模态数据生成
概述
AISBench Prefix Cache 插件用于生成变长与指定的prefix cache命中率数据集并执行压测,可以生成两类数据集:
纯文本数据集:支持可控变长的输入/输出长度分布、公共前缀比例、Prefix Group 分组和请求顺序,并可指定全局理论 Prefix Cache 命中率(如 60%),生成带可控公共前缀的请求数据。针对纯文本数据集,prefix cache插件先离线计算理论 Prefix Cache 命中率,
run再通过 AISBench 与 vLLM 采集实际命中率并进行对比。它适用于验证输入长度、公共前缀比例、Prefix Group、请求顺序以及单入口多 DP 对缓存命中率的影响多模态数据集:基于 MMMU 图片生成固定图片场景的多模态请求(单图 1080P、五图 720P),见「多模态数据集生成与压测」。
插件整体流程:按 Scenario 配置从 GSM8K 语料中选取样本,结合 tokenizer 离线构造带可控公共前缀的请求数据并计算理论命中率;run 将请求发送到 vLLM 执行压测;最后通过 Prometheus 指标在压测前后的差分得到实际命中率,并与理论值对比:
flowchart LR
C[GSM8K JSONL 语料] --> PR[prepare:离线生成数据集]
TK[Tokenizer] --> PR
SC[Scenario 配置<br/>请求数量、输入/输出长度、目标命中率、<br/>Prefix Group、请求顺序、DP 数] --> PR
PR --> D1[requests.jsonl / full.jsonl<br/>带可控公共前缀的请求]
PR --> D2[manifest.json / analysis.json<br/>含理论命中率]
D1 --> RU[run:探活、reset、逐 Group × DP 预热]
RU --> AI[AISBench 正式请求]
AI --> VL[vLLM 服务<br/>Prefix Cache]
VL --> PF[AISBench 性能汇总<br/>TTFT / TPOT / ITL]
VL --> PM[Prometheus /metrics]
PM --> SN[baseline / after 指标快照]
SN --> DF[after - baseline 差分<br/>实际命中率]
DF --> D2
SN -. 保存的快照文件 .-> AZ[analyze:离线复算]
AZ -.-> D2
插件提供五个子命令:
命令 |
作用 |
|---|---|
|
预览场景配置、理论命中率可达范围与长度分布。 |
|
生成正式请求数据、Manifest 与理论分析。 |
|
校验已有产物是否被修改、截断或换序。 |
|
探活、reset、按组逐 DP 预热并执行 AISBench 正式压测。 |
|
使用两份 Prometheus 快照离线复算实际命中率。 |
前置条件
Python 3.10 或更高版本。
可正常使用的 AISBench 仓库及依赖。
与目标 vLLM 服务一致的 tokenizer。tokenizer 不一致会造成 token 长度、Block 边界和理论命中率偏差。
JSONL 语料。每个非空行必须是 JSON 对象,并包含 Scenario 中
corpus.field指定的文本字段,默认是 GSM8K 数据集中的question,若想用gsm8k类似的语料,需要参考gsm8k的格式。正确的 Prefix Cache Block 大小。
tokenizer.block_size必须与目标服务实际值一致。在线
run所需服务能力:/v1/completions、/metrics、可选/reset_prefix_cache;多 DP 时还需支持X-data-parallel-rank定向路由和带engine标签的分 DP 指标。
安装
以下命令假设当前目录是 AISBench 仓库根目录。
仅生成数据集:只使用 inspect、prepare、validate、analyze 等离线命令时,安装插件本身即可:
conda create --name ais_bench python=3.10 -y
conda activate ais_bench
pip3 install -e ./plugins/prefix_cache
执行在线压测:run 需要以 perf 模式启动 AISBench 正式压测,请先参考 AISBench 工具安装文档 安装 AISBench 及服务化压测依赖(推荐使用 Conda 管理环境):
pip3 install -e ./ --use-pep517
pip3 install -r requirements/api.txt
pip3 install -r requirements/extra.txt
ais-bench-prefix-cache --help
-e 表示 editable 安装,修改当前仓库源码后通常不需要重新安装。
快速开始
复制示例 Scenario:
cp ./plugins/prefix_cache/config_examples/scenario.example.json ./scenario.json
至少检查 tokenizer.path、tokenizer.block_size 和 corpus.path。需要模拟 cold 多 DP 路由或生成 warmup 计划时,还应让 service.dp_size 与目标服务一致。执行在线压测前还要核对 service 下的 URL、model 以及 aisbench.config。
一个最小示例。该示例生成一个纯文本 Prefix Cache 数据集:
100 条正式请求,每条输入固定 1024 token、最多输出 32 token,自然后缀语料从 GSM8K 中按种子随机选取;
所有请求属于同一个 Prefix Group,按组内交错顺序发送;
目标全局理论 Prefix Cache 命中率为 60%,缓存模式为
warmup,run时会先逐Prefix Group × DP rank预热缓存再正式压测;目标服务为单个 HTTP 入口,内部 2 个 DP rank。
{
"schema_version": "1.0",
"run": {
"run_id": "gsm8k-prefix-cache-60",
"random_seed": 42,
"output_dir": "./outputs/gsm8k-prefix-cache-60"
},
"tokenizer": {
"path": "/path/to/tokenizer",
"block_size": 16
},
"corpus": {
"path": "./GSM8K.jsonl",
"field": "question",
"selection": {"mode": "random"}
},
"requests": {
"count": 100,
"input_length": {"mode": "fixed", "value": 1024},
"output_length": {"mode": "fixed", "value": 32}
},
"prefix_cache": {
"mode": "warmup",
"target_hit_rate": 0.6,
"seed_blocks": 1,
"groups": {"count": 1, "assignment": {"mode": "uniform"}},
"order": {"strategy": "interleave"}
},
"service": {"dp_size": 2}
}
示例中各字段的含义:
字段 |
说明 |
|---|---|
|
任务名称;执行时会自动追加时间戳。 |
|
数据生成和随机选择的全局种子,相同配置可复现。 |
|
Prefix Cache 产物基础目录。 |
|
Tokenizer 路径,必须与目标 vLLM 服务一致。 |
|
Prefix Cache Block 大小,必须与服务实际值一致。 |
|
GSM8K JSONL 语料路径和问题文本字段名。 |
|
语料选择模式; |
|
正式请求总数。 |
|
输入 token 长度规则;示例为固定 1024 token。 |
|
最大输出 token 长度规则;示例为固定 32 token。 |
|
缓存模式: |
|
期望的全局 Prefix Cache 命中率。 |
|
每条请求唯一 seed 占用的 Block 数。 |
|
Prefix Group 数量与分配规则;示例为 1 组、均匀分配。 |
|
正式请求排列策略;示例为按组交错。 |
|
单实例内部 DP rank 数量。 |
完整参数见下文「Scenario 参数说明」。多模态压测还需追加 multimodal 段,见「多模态数据集生成与压测」。
依次执行推荐工作流:
ais-bench-prefix-cache inspect --scenario ./scenario.json
ais-bench-prefix-cache prepare --mode text --scenario ./scenario.json
ais-bench-prefix-cache validate --manifest \
./outputs/gsm8k-prefix-cache-60_<时间戳>/result/gsm8k-prefix-cache-60_<时间戳>.manifest.json
ais-bench-prefix-cache run --scenario ./scenario.json
各命令的作用:
inspect:离线预览场景配置、理论命中率可达范围与长度分布,不生成正式产物、不访问服务;prepare --mode text:离线生成带可控公共前缀的正式请求数据,以及 Manifest 和理论分析等产物;validate:校验已有产物是否被手工修改、截断、换序或版本不符;manifest 路径中的时间戳目录可从prepare输出 JSON 的manifest字段获取;run:连接 vLLM 执行在线压测,先探活、reset、按组逐 DP 预热,再运行 AISBench 正式请求,采集实际命中率与 TTFT/TPOT/ITL 等性能指标。
详细用法见下文「命令详解」。
命令详解
inspect:检查配置和理论范围
ais-bench-prefix-cache inspect --scenario ./scenario.json
作用:
只解析 Scenario,生成长度、分组、顺序、cold DP 路由和共享前缀理论计划,不加载 tokenizer/GSM8K、不构造 prompt;
展示 requested / effective / theoretical 命中率、组分布、输入/输出长度摘要和 cold DP 路由;
不访问 vLLM、不发送请求。
其中 requested 是 Scenario 请求的目标命中率,effective 是求解器选择的最近可达目标,theoretical 是按最终发送顺序模拟的理论值。
每次 inspect 创建新的 _YYYYMMDD_HHMMSS 时间戳目录,产物包括:
output_dir_<时间戳>/log/<run_id>_<时间戳>.inspect.log:详细日志;output_dir_<时间戳>/result/<run_id>_<时间戳>.manifest.json:轻量 Manifest,status="inspected",摘要在inspect.summary;stdout 输出 JSON 摘要,主要字段如下。
字段 |
说明 |
|---|---|
|
Scenario 中未追加时间戳的任务名。 |
|
|
|
用户请求的目标命中率。 |
|
最近可达目标命中率。 |
|
预计理论命中率。 |
|
全局最小/最大可达命中率。 |
|
请求目标是否处于可达区间。 |
|
求解策略、轨迹状态( |
|
各 Prefix Group 的可达范围。 |
|
各 Group 的请求数量。 |
|
输入/输出长度统计和总 token 数。 |
|
各 DP rank 的正式请求数。 |
|
是否发送在线请求;inspect 固定为 |
|
固定为 |
|
固定为 |
|
日志文件和 inspect Manifest 路径。 |
后续 prepare / run 可通过匹配的 Manifest 复用同一时间戳目录。
大规模 cold 场景按 (Prefix Group, DP rank) 分 lane 构造,保证最终 hit token 精确,并尽量使累计命中率平缓收敛;小场景保留按 lane 评分的受限 beam search。scalable 要求 lane 内可用 Prefix Block 容量非递减,但不要求原始输入长度非递减。长度突增或容量受限仍可能导致累计命中率回落,因此不承诺所有场景严格单调。cold 轨迹逐 lane 检查,以各位置累计输入对应的一个 Block 量化误差区间排除舍入噪声,并与历史峰值区间比较,保留对累计回落的检查。明显回落、超调或进入精确回退时,状态为 BEST_EFFORT 并只告警。
设 N 为请求数、cap_i 为请求 i 可用的 Prefix Block 数、T 为全部生成 prompt 的输入 token 数:
条件 |
规划路径 |
复杂度/限制 |
|---|---|---|
warmup |
累计输入比例分配 |
|
cold 且 |
受限 beam search |
最多保留 256 个状态;无精确解时继续尝试 scalable。 |
cold、大于阈值或 beam 无解 |
scalable lane 构造 |
lane 内容量非递减且分配成功时, |
cold、不满足 scalable 前提或分配失败 |
exact lane fallback |
保证最终 hit token 精确,记录回退原因,不增加大规格 beam 重试。 |
inspect 只执行上述规划;快速规划路径下,prepare 加上总计 T 个输入 token 的 prompt 构造、tokenizer round-trip 和落盘,端到端约为 O(T + N log N)。实际时间由 tokenizer、CPU、磁盘和 prompt 总长度决定。
prepare:生成正式数据产物
ais-bench-prefix-cache prepare --mode text --scenario ./scenario.json
--mode:必填。text生成文本压测数据;mm生成多模态压测数据(见多模态数据集生成与压测和 MULTIMODAL.md)。--scenario:Scenario 文件路径。--overwrite:可选。只覆盖本次时间戳目录内该 run 对应的产物文件,不会清理整个输出目录。
prepare 根据 Scenario 确定性生成并校验四个文件:
result/<run_id>_<时间戳>.full.jsonlresult/<run_id>_<时间戳>.requests.jsonlresult/<run_id>_<时间戳>.manifest.json(status="prepared")result/<run_id>_<时间戳>.analysis.json(status="prepared")
执行时先在 stderr 显示 prompt 生成进度,最后一行结果 JSON 写入 stdout:
Generate prompts [###############---------------] 50/100 50%
Generate prompts [##############################] 100/100 100%
{"full":"...","requests":"...","manifest":"...","analysis":"...","log":"..."}
例如配置为 run_id: gsm8k-prefix-cache-60、output_dir: ./outputs/gsm8k-prefix-cache-60 时,实际目录为:
./outputs/gsm8k-prefix-cache-60_20260825_123456/
├── log/
│ └── gsm8k-prefix-cache-60_20260825_123456.prepare.log
└── result/
├── gsm8k-prefix-cache-60_20260825_123456.full.jsonl
├── gsm8k-prefix-cache-60_20260825_123456.requests.jsonl
├── gsm8k-prefix-cache-60_20260825_123456.manifest.json
└── gsm8k-prefix-cache-60_20260825_123456.analysis.json
prepare 会自动发现最近一次与当前 Scenario SHA-256 匹配的 inspected Manifest,并在同一路径把它升级为正式 prepared Manifest;否则创建新时间戳。修改 Scenario 后旧 Manifest 自动失配并创建新时间戳,正常工作流不需要手动修改 run_id 或 output_dir。
validate:校验已有产物
ais-bench-prefix-cache validate --manifest \
./outputs/gsm8k-prefix-cache-60_<时间戳>/result/gsm8k-prefix-cache-60_<时间戳>.manifest.json
--manifest:待校验的 Manifest 路径,校验逻辑根据 Manifest 的benchmark_mode自动区分 text/mm。
作用:不生成数据、不访问 vLLM,只检查:
Manifest、full 和 requests 行数是否一致;
sequence_index是否连续;requests 是否严格只含
question、answer以及output.output_key指定的可选第三字段;requests 与 full 是否逐行对应;
full 和 requests 的 SHA-256 是否匹配 Manifest。
它用于发现文件被手工编辑、截断、换序或使用了错误版本。stdout 输出 ok、rows、run_id,详细日志写入 Manifest 所在时间戳目录的 log/<run_id>_<时间戳>.validate.log。
run:执行 vLLM Prefix Cache 压测
ais-bench-prefix-cache run --scenario ./scenario.json
ais-bench-prefix-cache run --scenario ./scenario.json --config ./my_prefix_cache_perf.py
--scenario:提供数据构造、服务、验证和 AISBench 参数。--config:可选,仅 text 模式支持,临时覆盖本次运行使用的 AISBench Python 配置模板,不修改 Scenario。
run 执行前需要已有匹配的 prepared Manifest(即先执行 prepare),执行时自动识别 text/mm 模式并复用同时间戳产物。完整流程为:
校验本时间戳的产物;
逐 DP 探活,多 DP 请求使用
X-data-parallel-rank定向路由;reset Prefix Cache;未配置
reset_url或 reset 失败时,只有service.assume_empty_cache=true才会告警后继续;warmup 模式按 Manifest 的
warmup.plan逐Prefix Group × DP rank定向预热;采集 baseline,将 Scenario 中的 AISBench 配置渲染为临时 Python 配置并以
perf模式启动 AISBench 正式请求;期间按service.poll_interval_seconds周期采样 KV Cache 用量(设为0可关闭);采集 after,以
after - baseline计算每 DP 和全局实际命中率,并把runtime、actual、理论/实际差值和告警写回 analysis。
产物包括:
log/<run_id>_<时间戳>.run.log:插件阶段日志,不回显到终端;result/<run_id>_<时间戳>.analysis.json:追加runtime、actual和偏差字段,status="complete";AISBench 子进程结果:默认写入
aisbench.work_dir(./outputs/default),TTFT/TPOT/ITL 等性能汇总位于performances/<model-abbr>/,可用ais-bench-prefix-cache report --manifest <manifest路径>查看;stdout:先打印 AISBench 风格的结果标题,再以
Prefix Cache Metric | Value两列表格展示总体目标命中率、总体理论命中率、总体实际命中率、理论与实际偏差、理论与目标偏差,最后输出完整 analysis 路径。
补充说明:
正式请求默认使用 vLLM SSE 流式响应(
aisbench.model.stream=true),生成 TTFT、TPOT、ITL、E2EL 与吞吐量指标;设为false后仍可统计 Prefix Cache 命中率,但不能生成完整 TTFT、TPOT 和 ITL。插件 warmup 与 AISBench 自带的
--num-warmups是两套独立机制。若要求 baseline 后只包含正式请求,应在 Scenario 中设置"extra_args": {"--num-warmups": 0}(示例 Scenario 已默认配置)。多 DP 使用同一个 HTTP 入口,要求服务支持
X-data-parallel-rank定向路由及带engine标签的分 DP Prometheus 指标。
analyze:使用 Prometheus 快照离线复算
ais-bench-prefix-cache analyze \
--manifest <manifest路径> \
--baseline ./baseline.prom \
--after ./after.prom
--manifest:prepared Manifest;命令先校验产物完整性,再从effective_config.service读取dp_size、engine_label_map和告警阈值。--baseline:正式统计窗口开始前保存的完整 Prometheus 文本。--after:正式统计窗口结束后保存的完整 Prometheus 文本;queries/hits 是累计 counter,应不小于 baseline。
该命令不连接 vLLM、不运行 AISBench,只解析两份快照,按 DP 计算增量后汇总实际命中率并与理论值比较,以 status="analyzed" 写回 Manifest 对应的 analysis 文件,stdout 输出完整 analysis JSON。插件日志写入 log/<run_id>_<时间戳>.validate.log。
baseline.prom 和 after.prom 不是 prepare 生成的数据集文件,而是同一个 vLLM 服务 /metrics 端点在正式统计窗口前后的完整文本快照。手工采集时,应先完成 reset;warmup 场景还要先完成插件预热,然后在第一条正式请求前保存 baseline,并在最后一条正式请求完成后立即保存 after:
METRICS_URL="http://127.0.0.1:8000/metrics"
curl -fsS "$METRICS_URL" -o baseline.prom
# 在这里执行正式压测请求,期间不要重启 vLLM 或重置指标
curl -fsS "$METRICS_URL" -o after.prom
两份快照必须来自同一服务进程并覆盖全部 DP rank,多 DP 指标需保留 engine 标签。正常执行 run 时插件已自动采集这两个时点,并把原始文本写入 analysis 的 runtime.metrics_baseline.raw_prometheus 和 runtime.metrics_after.raw_prometheus,如需离线复算可导出:
ANALYSIS="./outputs/<run_id_时间戳>/result/<run_id_时间戳>.analysis.json"
jq -r '.runtime.metrics_baseline.raw_prometheus' "$ANALYSIS" > baseline.prom
jq -r '.runtime.metrics_after.raw_prometheus' "$ANALYSIS" > after.prom
analyze 适用于历史结果复核、解析逻辑升级后的重算、外部压测流量分析和 CI 校验;成功的 run 已在线完成同样的差分分析,通常无需再次执行。
Scenario 参数说明
完整逐字段参考见 Scenario 配置参数说明。Scenario 采用严格白名单,未列出的字段会被拒绝;省略的字段使用示例默认值。
配置路径 |
简短说明 |
|---|---|
|
Scenario 配置格式版本;默认 |
|
任务标识、随机性和输出控制。 |
|
任务名称,例 |
|
数据生成和随机选择的全局种子,例 |
|
Prefix Cache 产物基础目录,例 |
|
是否允许覆盖同名正式产物;默认 |
|
Tokenizer 加载与 Block 配置。 |
|
Tokenizer 模型或目录路径,例 |
|
Prefix Cache 的 token Block 大小,例 |
|
Tokenizer 的分支、tag 或 commit,用于固定版本;默认 |
|
是否执行模型仓库的自定义 tokenizer 代码;默认 |
|
自然后缀语料配置。 |
|
JSONL 语料文件路径,例 |
|
JSONL 中的问题文本字段名,默认 |
|
语料样本选择规则,默认 |
|
选择模式: |
|
非 mixed 模式的行号或哈希值列表,例 |
|
mixed 模式的零基行号列表,例 |
|
mixed 模式的问题 SHA-256 列表,例 |
|
正式请求数量和长度分布。 |
|
正式请求总数,例 |
|
输入 token 长度生成规则,默认 |
|
输入长度模式: |
|
|
|
|
|
|
|
单个采样区间下界(含),例 |
|
单个采样区间上界(含),例 |
|
单个区间生成的请求数,例 |
|
|
|
|
|
|
|
|
|
|
|
最大输出 token 长度生成规则,默认 |
|
输出长度模式: |
|
|
|
|
|
|
|
|
|
|
|
|
|
精简请求文件的字段控制。 |
|
可选输出长度字段名: |
|
Prefix Cache 数据和运行策略。 |
|
缓存模式,默认 |
|
期望的全局 token 加权命中率,例 |
|
每条请求唯一 seed 占用的 Block 数,默认 |
|
每条请求至少保留的非共享 token 数,例 |
|
Prefix Group 数量、分配和覆盖配置;每个 Group 独立生成 canonical 前缀并统计理论命中率。 |
|
Prefix Group 总数,例 |
|
请求到 Group 的分配规则,默认 |
|
Group 分配模式: |
|
|
|
|
|
各 Group 的可选独立覆盖,默认 |
|
指定 Group 的输入长度规则,例 |
|
指定 Group 的输出长度规则,例 |
|
指定 Group 的语料选择规则,例 |
|
正式请求排列规则,默认 |
|
排列策略: |
|
在线推理服务与指标采集配置。 |
|
vLLM 推理接口地址,例 |
|
Prometheus 指标接口地址,例 |
|
Prefix Cache 重置接口地址,例 |
|
请求体中的服务模型名,例 |
|
单实例内部 DP rank 数量,默认 |
|
无重置接口时是否假定缓存为空,默认 |
|
Prometheus |
|
探活、预热和指标请求超时秒数,默认 |
|
推理服务 Bearer Token,默认 |
|
正式压测期间 KV 指标采样间隔,默认 |
|
结果偏差告警阈值,单位为百分点(pp)。 |
|
理论值偏离目标的告警百分点,默认 |
|
实际值偏离理论值的告警百分点,默认 |
|
AISBench 正式压测启动配置。 |
|
AISBench Python 配置模板路径,例 |
|
AISBench 结果基础目录,例 |
|
附加 CLI 参数键值对象,例 |
|
Dataset reader 和 Prompt 映射配置;为保证理论 token 与实际 prompt 一致, |
|
Dataset 展示简称,默认 |
|
Dataset reader 的输入列,默认 |
|
Dataset reader 的参考答案列,默认 |
|
正式请求的 Prompt 模板,默认 |
|
预测结果的角色名称,默认 |
|
AISBench API Model 配置;旧 Scenario 省略时自动使用示例默认值。 |
|
Model 展示简称,默认 |
|
模型属性;当前只能为 |
|
是否使用 SSE 流式响应,默认 |
|
Model 层的兜底最大输出长度,默认 |
|
API 请求失败重试次数,默认 |
|
AISBench API 最大并发基值,默认 |
|
透传给 vLLM 的生成参数,例 |
产物说明
所有正式数据产物位于时间戳输出目录的 result/ 下,详细日志位于同级 log/ 下:
outputs/gsm8k-prefix-cache-60_20260825_123456/
├── log/
│ ├── gsm8k-prefix-cache-60_20260825_123456.inspect.log
│ ├── gsm8k-prefix-cache-60_20260825_123456.prepare.log
│ ├── gsm8k-prefix-cache-60_20260825_123456.validate.log
│ └── gsm8k-prefix-cache-60_20260825_123456.run.log
└── result/
├── gsm8k-prefix-cache-60_20260825_123456.full.jsonl
├── gsm8k-prefix-cache-60_20260825_123456.requests.jsonl
├── gsm8k-prefix-cache-60_20260825_123456.manifest.json
└── gsm8k-prefix-cache-60_20260825_123456.analysis.json
产物 |
作用 |
|---|---|
|
完整审计数据,包括组、DP lane、输入长度、公共前缀、唯一 seed、GSM8K 来源、理论水位和碰撞状态。 |
|
最小 AISBench 请求;默认只有 |
|
复现和校验入口:有效配置、输入哈希、tokenizer 指纹、长度分布、可达范围、组、DP、warmup 计划和产物哈希。 |
|
requested/effective/theoretical/actual 命中率、baseline/after 快照、分组/分 DP 统计、偏差与 warnings。 |
service.api_key 明文不会写入 Manifest,只记录 api_key_configured。
requests.jsonl 字段
字段 |
说明 |
|---|---|
|
发送给模型的完整 Prompt。 |
|
AISBench 使用的参考答案,当前固定为 |
|
可选的最大输出 token 数。 |
|
|
max_tokens 和 output_tokens 由 output.output_key 二选一追加;默认 null 时都不出现。full.jsonl.max_tokens 始终保留,AISBench 从 full 读取生成长度,因此默认省略不影响运行。
full.jsonl 字段
字段 |
说明 |
|---|---|
|
全局唯一的请求标识。 |
|
最终发送顺序中的全局序号。 |
|
请求所属 Prefix Group。 |
|
请求在组内的出现序号。 |
|
cold 模式下的目标 DP rank;warmup 正式请求为 |
|
|
|
配置期望的输入 token 数。 |
|
Tokenizer 验证后的实际输入 token 数。 |
|
该请求允许生成的最大 token 数。 |
|
可复用公共前缀的 token 数。 |
|
全局唯一 seed 的 token 数。 |
|
自然后缀的 token 数。 |
|
公共前缀、seed 和后缀组成的完整 Prompt。 |
|
AISBench 参考答案。 |
|
自然后缀使用的 GSM8K 零基行号。 |
|
自然后缀对应问题的 SHA-256。 |
|
所属组 canonical 前缀摘要。 |
|
当前请求唯一 seed 摘要。 |
|
当前请求派生出的随机种子。 |
|
请求前该缓存 lane 的模拟水位。 |
|
当前请求理论命中的 token 数。 |
|
请求后该缓存 lane 的模拟水位。 |
|
当前请求理论命中率。 |
|
用于验证分歧 Block 的摘要。 |
|
分歧 Block 是否全局唯一。 |
|
前缀或 seed 碰撞检查结果,成功产物为 |
manifest.json 顶层字段
字段 |
说明 |
|---|---|
|
Manifest 数据结构版本。 |
|
生成产物的插件版本。 |
|
|
|
带执行时间戳的任务标识。 |
|
原始 Scenario 路径及摘要。 |
|
补齐默认值后的有效配置及其摘要。 |
|
GSM8K 语料文件摘要。 |
|
Tokenizer 身份和 Block 信息。 |
|
请求数、总 token 和长度摘要。 |
|
模式、命中率和可达性结果。 |
|
每个 Prefix Group 的独立统计。 |
|
DP 数量和 cold 路由策略。 |
|
是否启用及 Group × DP 预热计划。 |
|
seed/分歧块唯一性汇总。 |
|
各产物路径、大小和摘要。 |
|
inspect-only Manifest 的预览信息。 |
正式 Manifest 使用除 inspect 外的上述字段;inspect-only Manifest 的 status="inspected",预览结果保存在 inspect.summary。
analysis.json 顶层字段
字段 |
说明 |
|---|---|
|
Analysis 数据结构版本。 |
|
对应的带时间戳任务标识。 |
|
|
|
Scenario 请求的目标命中率。 |
|
求解器选择的最近可达目标。 |
|
按最终顺序模拟的理论命中率。 |
|
理论值与目标的绝对百分点差。 |
|
理论值减目标值的带符号百分点差。 |
|
理论值与目标的绝对百分点差。 |
|
可达性、状态和告警策略。 |
|
理论 token、Group 和 DP 统计。 |
|
本次产生的告警列表。 |
|
baseline/after 快照、KV 采样等运行期信息;由 run/analyze 追加。 |
|
指标差分得到的实际命中统计;由 run/analyze 追加。 |
|
实际值与理论值的绝对百分点差。 |
|
实际值减理论值的带符号百分点差。 |
|
实际值与理论值的绝对百分点差。 |
多模态数据集生成与压测
多模态模式用于生成固定图片场景的多模态数据集(单图 1080P 或五图 720P,两种场景二选一,如 1319 条单图 1080P 请求),与纯文本模式共用同一个 Scenario JSON 和命令入口:
ais-bench-prefix-cache prepare --mode mm --scenario ./scenario.json
ais-bench-prefix-cache run --scenario ./scenario.json
在文本配置基础上追加 multimodal 段即可:
{
"multimodal": {
"mmmu_parquet_dir": "../../../../MMMU",
"scenarios": ["single_1080p"]
}
}
配置路径 |
简短说明 |
|---|---|
|
多模态压测( |
|
MMMU Parquet 目录; |
|
图片场景, |
多模态模式复用文本配置中的 tokenizer.path、corpus、requests、run.output_dir、service 和 aisbench 段;但 requests.input_length / requests.output_length 必须为 fixed,且不使用 tokenizer.block_size 和 prefix_cache 段(可省略,保留也不会对多模态文本长度施加 Block、共享前缀或非共享区限制)。run、validate、report 从 prepare 生成的 Manifest 中读取 benchmark_mode,不再接收 --mode。
图片按原生尺寸从 MMMU Parquet 的 image_1~image_7 bytes 字段中严格选择,不进行缩放;图片编码为 Base64 data URL 发送,服务端无需访问本地 MMMU 路径。stream=true 是获得有效 TTFT、TPOT、ITL 的必要条件。完整说明见 MULTIMODAL.md。
告警与退出码
告警 |
条件 |
|---|---|
|
请求目标不在 |
|
理论值与请求目标的绝对差超过 |
|
实际值与理论值的绝对差超过 |
这些告警只把 analysis.json 的展示状态改为 PASS_WITH_WARNING,不改变成功退出码。配置错误、产物损坏、服务能力不足或 AISBench 执行失败才会返回非零退出码。