### 操作系统及版本 不适用(代码走查问题,跨平台) ### 安装工具的python环境 docker容器中的python环境 ### python版本 3.11 ### AISBench工具版本 ais_bench-benchmark 3.1.0(main @ 7bcb644) ### AISBench执行命令 ``` ais_bench --models tgi_api_general --datasets synthetic_gen --mode perf ``` TGI / Triton / MindIE 三个服务化后端均受影响。 ### 模型配置文件或自定义配置文件内容 ```python from ais_bench.benchmark.models import TGICustomAPI models = [ dict( attr="service", type=TGICustomAPI, abbr="tgi-api", path="", model="", stream=True, retry=2, host_ip="127.0.0.1", host_port=8080, max_out_len=512, batch_size=4, generation_kwargs=dict(temperature=0.7), ) ] ``` ### 预期行为 性能报告中的 Input/Output Token Throughput、`generate_tokens_speed` 应反映服务端返回的实际 token 数。 ### 实际行为 三个后端的 `parse_text_response` / `parse_stream_response` 只写 `output.content`,从不设置 `output.input_tokens / output_tokens`: - `ais_bench/benchmark/models/api_models/tgi_api.py:125-132` - `ais_bench/benchmark/models/api_models/triton_api.py:92-98` - `ais_bench/benchmark/models/api_models/mindie_stream_api.py:123-124` 这三个服务实际上都在响应里返回了 token 数 —— 仓库自带的 mock 服务就是按真实协议实现的: `tools/infer_serve_simulator/api/tgi_api.py:32-39`、`triton_api.py:28-33`、`mindie_origin.py:61-70` 都返回 `details.generated_tokens`,但解析侧把它丢了。 因此 `base_perf_metric_calculator.py:490-523` 的 Input/Output Token Throughput 恒为 0, `summarizers/default_perf.py:184-186` 的 `generate_tokens_speed` 也是 0,只有延迟类指标可用。 **附带问题**:`summarizers/default_perf.py:154-162` 本应在服务未上报 token 时用 tokenizer 兜底估算, 但 `Output.__init__` 把计数器初始化为 0(`models/output.py:19-20`),jsonl 里这两个键一定存在且非 None, 而判断写的是"键不存在或 is None",因此兜底逻辑永远不触发 —— 对任何未上报 usage 的后端,报告里都是 0 token。 ### 前置检查 - [x] 我已读懂主页文档的快速入门,无法解决问题 - [x] 我已检索过FAQ,无重复问题 - [x] 我已搜索过现有Issue,无重复问题 - [x] 我已更新到最新版本,问题仍存在
Activity
github-actions commentedon Oct 28, 2026
🌟欢迎给AISBench benchmark测评工具提issue,我们会尽快处理您的诉求~
github-actions commentedon Oct 28, 2026
🤖 基于AI机器人的issue内容完整性检查结果:
问题内容检查结果
检查状态
PASS
详细检查
改进建议
所有内容已完备!
补充说明
该GitHub Issue内容非常详尽和专业。所有必填部分都已提供,并且信息具体、清晰,包含了必要的代码路径、版本信息和详细的行为描述,甚至还包括了对相关代码逻辑的分析和附带问题的提出,对于问题排查和解决非常有帮助。
👉 如果想重新检查,在评论区@issue_checker即可。
【强烈推荐❤️🔥】确保issue描述完整后,可以试着将issue交给
回答,deepwiki包含了和工具相关的所有知识库
aisbench-issue-master commentedon Oct 29, 2026
感谢反馈,问题描述与代码定位都比较完整。
结论
问题成立,属于「响应字段已具备但未被消费」的信息丢失型缺陷,优先级建议 P1:
Input/Output Token Throughput与generate_tokens_speed是性能报告的核心指标,恒为 0 会让 TGI/Triton/MindIE 三条链路的性能数据整体失去可比性;且该缺陷不抛异常、只表现为「数字不对」,排查成本高于崩溃类问题。根因分析
ais_bench/benchmark/models/api_models/tgi_api.py:125-132、triton_api.py:92-98、mindie_stream_api.py:123-124的parse_text_response/parse_stream_response只写output.content,未设置input_tokens / output_tokens;而details.generated_tokens是 TGI 官方 API 的真实字段,接真实服务时同样会失效,问题不局限于模拟器联调。Output.__init__(ais_bench/benchmark/models/output.py:19-20)把计数器初始化为 0,jsonl 中这两个键必然存在且非 None,而ais_bench/benchmark/summarizers/default_perf.py:154-162的判断是「键不存在或 is None」,因此 tokenizer 兜底永不触发——任何未上报 usage 的后端都会得到 0 token。建议修复方向
details.generated_tokens(Triton 同路径,位于text_output+details结构中);字段缺失时回退 tokenizer 计数并打warning留痕,而不是直接返回 0,避免在异常、截断、ignore_eos=False提前 EOS 等场景引入新的KeyError或静默归零。default_perf.py:154-162需区分「键缺失」「值为 None」与「值为 0 且确认无 usage」三种情形,保证未上报 usage 的后端真正走 tokenizer 估算。BaseAPIModel增加统一的_extract_output_tokens(response, text, field_path),三条链路按各自字段路径复用,避免口径漂移。tests/UT/models/api_models/为三个后端各补「字段优先」与「缺失回退且非零」用例;smoke 侧在perf_*_stream_*断言中增加output_token_throughput > 0。仍需确认
tools/infer_serve_simulator/api/mindie_origin.py:61-70已返回details.generated_tokens,但另有核对意见认为该模拟器仅返回generated_text。MindIE 模拟器侧是否缺该字段需要先确认:若缺失,应作为独立子问题与后端解析拆开处理,否则perf_*_mindie_stream_*仍无法验证。lsyx6399 commentedon Oct 29, 2026
感谢详细复核,几点确认/补充:
关于「MindIE 模拟器是否返回
details.generated_tokens」:issue 描述准确,模拟器确实返回该字段。tools/infer_serve_simulator/api/mindie_origin.py:74-75(流式)与:91-92(非流式)都有"details": {"generated_tokens": output_length},与 tgi_api.py:28-29/47-48、triton_api.py:27-28/43-44 一致。因此 #615 的解析侧改动可以端到端验证,MindIE 不需要拆独立子问题。关于 #615 的覆盖范围:PR #615 已覆盖前两条建议的核心——
_update_usage_from_details()从details.generated_tokens取 token(TGI/Triton/MindIE 各自字段路径)。summarizers/default_perf.py的is None改为<= 0,让未上报 usage 的后端真正走 tokenizer 估算,且打 warning 留痕。未覆盖的(可作后续):
_extract_output_tokens到BaseAPIModel:当前三后端各自实现_update_usage_from_details,有少量重复,可上提。为控制 PR 规模与 review 风险,本次未做,可单独提一个 refactor PR。output_token_throughput > 0:同意,但涉及 perf smoke 用例改造,建议与 [bugfix] Parse token usage for TGI/Triton/MindIE backends #615 分开。如需要我把这两项补进 #615,或开 follow-up,请告知。