Prhub

#43756 [Bench] benchmark_serving_multi_turn: make non-standard conversation_id payload opt-in

原始 PR 作者 Change72 合并时间 2026-06-10 10:41 文件变更 3 提交数 6 评论 7 代码增减 +61 / -2

执行摘要

多轮基准测试中 conversation_id 改为可选,默认不发送

PR body 指出:conversation_id 字段不是 OpenAI Chat Completions schema 的一部分,但 benchmark 始终发送该字段,导致严格的前端(如 AI Dynamo KV router)返回 400 错误。目的是让 benchmark 默认兼容标准前端,同时允许需要跨轮 KV 缓存复用的用户通过 --send-conversation-id 保留原有行为。

值得合并,因为它增强了 benchmark 的兼容性,且设计为 opt-in 而非直接移除字段。建议阅读 benchmark 中的直观设计:通过条件表达式 conversation_id=conv_id if req_args.send_conversation_id else None 控制字段注入,保持代码最小改动。

讨论亮点

Review 中 simon-mo 指出这是一个 breaking behavior change,要求更新 disagg_proxy_multiturn.py 的文档以确保 benchmark 能捕获新标志。作者随后在最后一个 commit 中补充了相关文档。

实现拆解

  1. 在 benchmark_serving_multi_turn.py 中添加 --send-conversation-id 命令行参数(store_true,默认 False)。
  2. 在 RequestArgs NamedTuple 中新增 send_conversation_id: bool 字段,并从 get_client_config() 中传递该值。
  3. 修改 send_turn() 调用 send_request() 时,根据 req_args.send_conversation_id 决定是否传入 conversation_id=conv_id;若为 False 则传入 None。
  4. 更新 disagg_proxy_multiturn.py 的模块文档字符串,添加 Benchmarking 小节说明 --send-conversation-id 的用法,并在 _handle_request 的日志警告中提示用户传递该标志。
  5. 在 docs/features/nixl_connector_usage.md 中新增“Benchmarking the multi-turn proxy”小节,提供完整命令行示例。
文件 模块 状态 重要度
benchmarks/multi_turn/benchmark_serving_multi_turn.py 多轮基准测试 modified 6.14
examples/disaggregated/disaggregated_serving/disagg_proxy_multiturn.py 代理示例 modified 5.28
docs/features/nixl_connector_usage.md 文档 modified 2.31

关键符号

send_turn get_client_config main

关键源码片段

benchmarks/multi_turn/benchmark_serving_multi_turn.py core-logic

核心变更文件:添加 --send-conversation-id 参数,修改 RequestArgs 和 send_turn 逻辑,使 conversation_id 变为可选的请求字段。

# 在 get_client_config() 中传递新参数
RequestArgs(
    chat_url=args.chat_url,
    model=args.model,
    stream=not args.disable_stream,
    limit_min_tokens=args.limit_min_tokens,
    limit_max_tokens=args.limit_max_tokens,
    timeout_sec=args.request_timeout_sec,
    send_conversation_id=args.send_conversation_id, # 新增:控制是否发送 conversation_id
    headers=headers,
)
​
# 在 send_turn() 中根据标志决定是否注入 conversation_id
response: ServerResponse = await send_request(
    session,
    messages,
    req_args.chat_url,
    req_args.model,
    req_args.stream,
    min_tokens,
    max_tokens,
    req_args.timeout_sec,
    conversation_id=conv_id if req_args.send_conversation_id else None, # 条件注入
    headers=req_args.headers,
)
examples/disaggregated/disaggregated_serving/disagg_proxy_multiturn.py documentation

更新模块文档和日志提示,告知用户需要使用 --send-conversation-id

# 模块 docstring 新增内容(节选)
Benchmarking:
    Use ``benchmarks/multi_turn/benchmark_serving_multi_turn.py`` with
    the ``--send-conversation-id`` flag to inject a per-conversation
    ``conversation_id`` into every request so this proxy can key
    cross-turn KV cache reuse. The flag is *off by default*: without
    it the benchmark sends OpenAI-schema-compliant payloads and every
    turn lands as a cache MISS in this proxy.
​
# _handle_request() 中更新日志警告
if not conversation_id:
    logger.warning(
        "[%s] No conversation_id provided — KV cache reuse disabled "
        "for this request. Add a 'conversation_id' field to enable "
        "cross-turn KV sharing. When using "
        "benchmarks/multi_turn/benchmark_serving_multi_turn.py, pass "
        "--send-conversation-id (off by default).",
        request_id,
    )

评论区精华

需要更新 disagg_proxy 文档以反映行为变更 documentation

simon-mo 在 review 中指出:由于此 PR 是 breaking behavior change,需要更新 disagg_proxy_multiturn.py 的文档,确保 benchmark 能捕获新标志。

结论:作者在最后一个 commit 中添加了模块 docstring 的 Benchmarking 部分和日志提示,满足该要求。 · 已解决

风险与影响

向后兼容性风险:使用 disagg proxy 的用户若未传递 --send-conversation-id,将导致每个 turn 的 KV 缓存复用失效(cache MISS),跨轮性能下降。该风险已通过文档更新缓解。缺少自动化测试:没有为新的参数添加单元测试或集成测试。此外,如果其他内部工具或脚本依赖旧的默认行为(发送 conversation_id),也需调整。

直接影响:所有运行 benchmark_serving_multi_turn.py 的用户。默认行为变为不发送 conversation_id,与标准 OpenAI 前端兼容;需要与 disagg proxy 交互的用户必须显式添加 --send-conversation-id。间接影响:相关的 disagg proxy 示例和文档已更新,帮助用户适应新行为。影响范围较小,仅限于多轮 benchmark 和代理示例。

默认行为变更 缺少测试覆盖 KV 缓存复用需手动启用

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论