已合并
[bugfix] ZJ部署过程遇到的若干问题Bug #842
[bugfix] ZJ部署过程遇到的若干问题Bug #842
已合并
zhoujing创建于 10 天前
zhoujing
zhoujing成员
10 天前

https://gitcode.com/Ascend/MindIE-Motor/issues/530

1. 合入背景

本次 PR 主要解决流式推理场景下 infer_timeout 超时配置未生效的问题:原超时仅作用于单次转发,流式响应由 uvicorn 在 handler 返回后继续发送,timeout_handler 装饰器无法约束整个流式请求的 E2E 时长。同时修复流式超时后的日志与错误信息展示、重复 Event.SET 误清理熔断器、以及 max_tokens 入参合法性校验缺失等问题。

2. 修改内容

  1. 流式整体超时(infer_timeout E2E)BaseRouter 新增 _stream_overall_timeout(),自请求到达时间(ReqState.ARRIVE)起计算 infer_timeout 剩余预算并下发给 CommitAwareStreamingResponse;后者新增 timeout 参数,通过 loop.call_later 设置整体墙钟截止时间,超时后以 INFER_TIMEOUT 原因取消当前任务,使取消原因级联透传到上游生成器;超时后 commit 前返回 JSON 504、commit 后通过 SSE 发送 504 错误帧。PD 混合路由与 Unified PD 路由均接入该机制。
  2. 流式超时日志与错误信息motor/common/utils/error.py 新增 INFER_TIMEOUT 取消原因;check_cancel_error 识别该原因不再归为通用 Exception;AttemptStopReason 新增 TIMEOUT,Unified PD 路由将 INFER_TIMEOUT 映射为 TIMEOUT,超时后日志与返回错误信息正确体现"超时"。
  3. 重复 Event.SET 不处理_SchedulerRequestDispatcher 仅当实例刷新有变化(changed=True)时才快照并清理熔断器,重复 SET 事件不再误清熔断器。
  4. max_tokens 入参合法性校验:OpenAI 请求校验新增 _validate_positive_int_fieldmax_tokens/max_completion_tokens 为非正整数(0、负数、布尔、非 int)时从请求体移除并记录 warning,避免非法参数透传引擎。
  5. 门禁修复:修复 test_ccae_motor_backend.py 缺失 Log mock 导致的门禁问题,并补充上述功能的 UT 用例。

3. 资料变更

涉及:docs/zh/user_guide/configuration/config_reference.md 更新 infer_timeout 字段说明——非流式场景作用于单次转发;流式场景作为整个流式请求的整体墙钟超时(从请求到达算起,超时后中断并返回 504)。

4. 接口变更

不涉及跨代码仓或客户面可见的接口变更。流式超时返回码与既有约定一致(504 Gateway Timeout),未改变对外 API 形态。

5. 测试结果

新增/更新 UT 用例(通过 bash tests/run_tests.sh 全量验证,含 pre-commit 门禁):

  • test_stream_response.py:流式整体超时取消上游(取消原因为 INFER_TIMEOUT)、commit 前返回 JSON 504、commit 后 SSE 发送 504 错误帧、预提交/已提交场景 RequestCancelledError(INFER_TIMEOUT) 均返回 504;
  • test_base_router_request_timeout.py_stream_overall_timeout 剩余预算计算(满预算、扣除已用时间、超期归零、无 ARRIVE 时间兜底);
  • test_cancel_error.pyINFER_TIMEOUT 原因识别与 RequestCancelledError 携带该原因;
  • test_unified_pd_router.pyINFER_TIMEOUT 映射为 AttemptStopReason.TIMEOUT
  • test_http_server.py_validate_positive_int_fieldmax_tokens/max_completion_tokens 合法值保留、非法值移除并告警;
  • test_scheduler_server_main.py:重复 SET 无变化不清熔断器、有变化仍快照并清理;
  • test_ccae_motor_backend.py:补充 Log mock 修复门禁。

测试维度覆盖:功能(流式超时、参数校验、熔断器行为)、错误码(504 返回路径)、并发场景(超时取消与流式任务并发,无死锁)。

Snipaste_2026-08-26_17-28-56.png

6. CheckList

[x] 代码注释完备

[x] 正确记录维测日志

[x] 是否有UT用例

[x] 若涉及多线程场景,考虑了并发场景,不存在死锁问题

likedislike
Pull Request已成功合入, 合并人@tobking
(感谢 zhoujing 的贡献)
zhoujingzhoujing成员
10 天前 关联了issue:[Bug-Report|缺陷反馈]: 字节火山引擎局点部署过程遇到的问题Bug
atomgit-bot
atomgit-bot
10 天前 评论:

变更摘要

该 PR 修复ZJ部署过程中遇到的若干问题,主要围绕推理请求的流式响应超时处理、请求参数校验以及调度器事件处理展开。核心改动是为 CommitAwareStreamingResponse 增加整体墙钟超时(timeout)机制,由 PDHybridRouterUnifiedPDRouter 通过新增的 _stream_overall_timeout() 方法传入基于 infer_timeout 配置计算的剩余超时预算;超时触发时以 INFER_TIMEOUT 原因取消任务并返回 HTTP 504,同时新增 AttemptStopReason.TIMEOUT 枚举及 INFER_TIMEOUT 错误常量用于超时原因上报。此外,OpenAI 请求校验新增可选正整数参数校验,调度器修正了 EventType.SET 事件处理逻辑。

主要改动

  • 流式响应整体超时机制: 在 CommitAwareStreamingResponse 中新增 timeout 参数,通过 loop.call_later 设置整体墙钟截止时间,超时后以 cancel_error.INFER_TIMEOUT 原因取消当前任务,在预提交/已提交两种状态下分别返回 504 响应,并将 TimeoutError / INFER_TIMEOUT 取消映射为 HTTP 504 Gateway Timeout;finally 中会取消定时器句柄。
  • 超时预算计算与接入: 在 BaseRouter 新增 _stream_overall_timeout(),按请求到达时间(ReqState.ARRIVE)与 infer_timeout 配置差值计算剩余超时预算,并由 PDHybridRouterUnifiedPDRouter 在构造流式响应时传入。
  • 超时原因定义与映射: error.py 新增 INFER_TIMEOUT = "Infer timeout" 错误常量;base.pycheck_cancel_errorINFER_TIMEOUT 识别为正常取消原因;dispatch_session.pyAttemptStopReason 新增 TIMEOUT,并在 unified_pd.py 中将 INFER_TIMEOUT 映射到 AttemptStopReason.TIMEOUT
  • OpenAI 请求参数校验: 在 inference_server.py 新增 _validate_positive_int_field,对 max_tokensmax_completion_tokens 等可选正整数字段进行校验,非法值(非 int、bool 或非正数)会被从请求体中移除并记录告警日志,避免因非法参数导致部署局点请求失败。
  • 调度器 SET 事件处理修复: scheduler_server.pyEventType.SET 分支增加 changed 条件判断,仅当实例刷新有变化时才快照并清除打开实例 ID 及回调,避免无变化时误清理回调导致 worker 通知异常。
likedislike
atomgit-bot
atomgit-bot
10 天前 评论:

代码审查

✅ 未发现问题

likedislike
xiangjie10成员
10 天前 评论:
🔍 PR 规范审计未通过,以下项目需要修正:
  • ⚠️ PR 代码变更未包含测试用例(变更文件路径中均不包含 test 或 ut),请确认已经备注原因!

请修正后重新提交,或联系仓库管理员。

likedislike
ascend-robotascend-robot成员
10 天前 添加了label:stat/needs-squash
此处折叠了58条消息 查看更多
zhoujingzhoujing成员
7 天前 更新了 atomgit-bot 的一条评论
zhoujingzhoujing成员
7 天前 更新了 atomgit-bot 的一条评论
tobkingtobking成员
7 天前 解决了最后一个问题
tobkingtobking成员
7 天前 关闭了关联的issue
tobkingtobking成员
7 天前 合入了pull request