Prhub

#22371 Fix image (random multimodal) dataset token statistics

原始 PR 作者 amd-bishwoadhikari 合并时间 2026-05-17 14:12 文件变更 1 提交数 7 评论 3 代码增减 +14 / -0

执行摘要

随机多模态数据集 token 统计增强

当前 SGLang 图像数据集存在 Token 化往返(初始 token → decode → re-encode)不确定性问题,导致实际 Token 数与 random-input-len 指定值不符。此外基准测试只报告总输入 Token 数,无法区分文本、Chat 模板、Token 化往返开销或视觉模板的贡献。PR 旨在输出每个请求的 Token 分解,使用户能直接看出 Token 来源。

值得精读:展示了如何为调试目的添加细粒度统计信息,不引入风险。适合作为基准测试可观测性增强的参考模式。

讨论亮点

Reviewer rkarhila-amd 确认变更仅影响随机图像数据集基准测试,并表示视觉模型在 gfx950 GPU 上支持不稳,但该 PR 本身无问题。最终获得 HaiShaw 批准合并。无争议性讨论。

实现拆解

  1. 提取 DatasetRow 字段:在 sample_image_requests 函数数据集生成循环结束后,从 dataset 中提取 r.text_prompt_lenr.vision_prompt_len,并计算文本提示开销(text_prompt_len - input_lens)。
  2. 打印 Token 分解表:将上述数据整理为 stat_fields 列表,遍历打印每个维度的平均值和总和,包括原始文本 Token、Chat 模板后 Token、文本提示开销、视觉 Token。
  3. 保持原有统计不变:原有总输入/输出 Token 数和图像计数打印保留,新增分解表放在两者之间。
    涉及的唯一文件:python/sglang/benchmark/datasets/image.py,仅添加约 14 行日志代码。
文件 模块 状态 重要度
python/sglang/benchmark/datasets/image.py 基准测试 modified 5.05

关键源码片段

python/sglang/benchmark/datasets/image.py core-logic

唯一变更文件,在 `sample_image_requests` 函数末尾添加 Token 分解统计打印,增强基准测试数据集的可观测性。

# 在循环结束后,从 dataset 中提取字段
# text_prompt_len 是应用 chat template 后的文本 token 数
# vision_prompt_len 是视觉 token 数
# input_lens 是原始请求的文本 token 数
# 开销 = chat template 后长度 - 原始长度
text_prompt_lens = np.array([r.text_prompt_len for r in dataset])
vision_prompt_lens = np.array([r.vision_prompt_len for r in dataset])
text_prompt_overheads = text_prompt_lens - input_lens# 定义要展示的四个维度
stat_fields = [
    ("Raw text prompt tokens (without overhead)", input_lens),
    ("Text prompt tokens (with chat template)", text_prompt_lens),
    ("Text prompt overhead", text_prompt_overheads),
    ("Vision tokens", vision_prompt_lens),
]print("\n=== Token Breakdown (per request avg / total) ===")
for label, vals in stat_fields:
    # 输出每个维度的平均值和总和,便于对比
    print(f"  {label}: avg={np.mean(vals):.1f}, total={np.sum(vals)}")

评论区精华

视觉模型支持不稳定 other

rkarhila-amd 评论指出视觉模型在 gfx950 GPU 上支持非常不稳定,但本次变更本身没有问题。

结论:无行动项,PR 本身正常。 · 已解决

风险与影响

风险极低。仅添加信息性日志输出,不修改任何推理路径、数据流或状态。新代码仅在基准测试数据集生成时执行,不干扰模型服务。

直接影响:使用 sample_image_requests 生成随机多模态数据集的基准测试用户将看到详细的 Token 分解表,辅助分析 Token 数量偏差。其他用户无影响。团队无需额外部署或配置变更。

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论