Prhub

#28617 Fix bench serving base-url-only runs

原始 PR 作者 mmangkad 合并时间 2026-06-18 15:34 文件变更 2 提交数 2 评论 4 代码增减 +12 / -4

执行摘要

修复 bench_serving 仅传 --base-url 时的崩溃

PR #28598 重构了基准测试客户端的 base-URL 解析逻辑,但未处理 --base-url-only 的使用场景,导致 bench_serving 在缺少 --port 参数时崩溃。作者在 PR body 中引用了 CI 失败日志表明问题。

该 PR 是小型回归修复,值得关注其体现的设计原则:将相似逻辑集中到共享函数中以避免重复和条件分支。值得快速合并。

讨论亮点

该 PR 没有 review 评论。第二个 commit 的提交信息(use resolve_host_port for gserver; drop conditional _na)表明 hnyils2002 参与了协作,将条件分支重构为统一的 resolve_host_port 调用。

实现拆解

  1. python/sglang/srt/utils/network.py 中新增 resolve_host_port() 函数,与 resolve_base_url() 类似但不添加 http:// 前缀,直接返回 host:port 格式(通过 NetworkAddress.to_host_port_str() 实现 IPv6 兼容)。
  2. python/sglang/bench_serving.py 中,将 import 语句从导入 NetworkAddress, resolve_base_url 改为导入 resolve_base_url, resolve_host_port
  3. run_benchmark 函数的 gserver 分支中,将 api_url = args.base_url if args.base_url else _na.to_host_port_str() 替换为 api_url = resolve_host_port(args.base_url, args.host, args.port),从而复用共享逻辑。
  4. 移除不再需要的 _na = NetworkAddress(args.host, args.port) 临时变量。
  5. 更新了相关注释以反映 gserver 使用无 scheme 的 host:port 形式。
文件 模块 状态 重要度
python/sglang/srt/utils/network.py 网络层 modified 6.11
python/sglang/bench_serving.py 基准测试 modified 5.57

关键符号

resolve_host_port

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险较低。变更仅限于 gserver 后端的 URL 构造逻辑,其他后端不受影响。新增的 resolve_host_port 函数与 resolve_base_url 结构相同,仅在输出格式上不同,逻辑清晰且易于验证。没有测试覆盖但回归面窄,CI 测试已通过。

只影响使用 --base-url 且 backend 为 gserver 的场景,修复了此类场景下的崩溃。对其他用户无影响。

缺少测试覆盖

关联 Issue

#28598 [misc] Share bench HTTP-client base-URL resolution with IPv6-compatible formatting

完整报告

参与讨论