已合并
[bugfix] ZJ部署过程遇到的若干问题Bug #842
zhoujing创建于 10 天前
[bugfix] ZJ部署过程遇到的若干问题Bug #842
已合并
Pull Request已成功合入, 合并人@tobking
(感谢 zhoujing 的贡献)10 天前 关联了issue:[Bug-Report|缺陷反馈]: 字节火山引擎局点部署过程遇到的问题Bug
atomgit-bot
10 天前 评论:
10 天前 评论:
变更摘要
该 PR 修复ZJ部署过程中遇到的若干问题,主要围绕推理请求的流式响应超时处理、请求参数校验以及调度器事件处理展开。核心改动是为 CommitAwareStreamingResponse 增加整体墙钟超时(timeout)机制,由 PDHybridRouter 和 UnifiedPDRouter 通过新增的 _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配置差值计算剩余超时预算,并由PDHybridRouter、UnifiedPDRouter在构造流式响应时传入。 - 超时原因定义与映射:
error.py新增INFER_TIMEOUT = "Infer timeout"错误常量;base.py的check_cancel_error将INFER_TIMEOUT识别为正常取消原因;dispatch_session.py的AttemptStopReason新增TIMEOUT,并在unified_pd.py中将INFER_TIMEOUT映射到AttemptStopReason.TIMEOUT。 - OpenAI 请求参数校验: 在
inference_server.py新增_validate_positive_int_field,对max_tokens、max_completion_tokens等可选正整数字段进行校验,非法值(非 int、bool 或非正数)会被从请求体中移除并记录告警日志,避免因非法参数导致部署局点请求失败。 - 调度器 SET 事件处理修复:
scheduler_server.py中EventType.SET分支增加changed条件判断,仅当实例刷新有变化时才快照并清除打开实例 ID 及回调,避免无变化时误清理回调导致 worker 通知异常。


atomgit-bot
10 天前 评论:
10 天前 评论:
xiangjie10
10 天前 评论:
10 天前 评论:
🔍 PR 规范审计未通过,以下项目需要修正:
- ⚠️ PR 代码变更未包含测试用例(变更文件路径中均不包含 test 或 ut),请确认已经备注原因!
请修正后重新提交,或联系仓库管理员。


10 天前 添加了label:stat/needs-squash
此处折叠了58条消息 查看更多
7 天前 更新了 atomgit-bot 的一条评论
7 天前 更新了 atomgit-bot 的一条评论
7 天前 解决了最后一个问题
7 天前 关闭了关联的issue
7 天前 合入了pull request
https://gitcode.com/Ascend/MindIE-Motor/issues/530
1. 合入背景
本次 PR 主要解决流式推理场景下
infer_timeout超时配置未生效的问题:原超时仅作用于单次转发,流式响应由 uvicorn 在 handler 返回后继续发送,timeout_handler装饰器无法约束整个流式请求的 E2E 时长。同时修复流式超时后的日志与错误信息展示、重复Event.SET误清理熔断器、以及max_tokens入参合法性校验缺失等问题。2. 修改内容
BaseRouter新增_stream_overall_timeout(),自请求到达时间(ReqState.ARRIVE)起计算infer_timeout剩余预算并下发给CommitAwareStreamingResponse;后者新增timeout参数,通过loop.call_later设置整体墙钟截止时间,超时后以INFER_TIMEOUT原因取消当前任务,使取消原因级联透传到上游生成器;超时后 commit 前返回 JSON 504、commit 后通过 SSE 发送 504 错误帧。PD 混合路由与 Unified PD 路由均接入该机制。motor/common/utils/error.py新增INFER_TIMEOUT取消原因;check_cancel_error识别该原因不再归为通用 Exception;AttemptStopReason新增TIMEOUT,Unified PD 路由将INFER_TIMEOUT映射为TIMEOUT,超时后日志与返回错误信息正确体现"超时"。_SchedulerRequestDispatcher仅当实例刷新有变化(changed=True)时才快照并清理熔断器,重复 SET 事件不再误清熔断器。_validate_positive_int_field,max_tokens/max_completion_tokens为非正整数(0、负数、布尔、非 int)时从请求体移除并记录 warning,避免非法参数透传引擎。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.py:INFER_TIMEOUT原因识别与RequestCancelledError携带该原因;test_unified_pd_router.py:INFER_TIMEOUT映射为AttemptStopReason.TIMEOUT;test_http_server.py:_validate_positive_int_field对max_tokens/max_completion_tokens合法值保留、非法值移除并告警;test_scheduler_server_main.py:重复 SET 无变化不清熔断器、有变化仍快照并清理;test_ccae_motor_backend.py:补充 Log mock 修复门禁。测试维度覆盖:功能(流式超时、参数校验、熔断器行为)、错误码(504 返回路径)、并发场景(超时取消与流式任务并发,无死锁)。
6. CheckList
[x] 代码注释完备
[x] 正确记录维测日志
[x] 是否有UT用例
[x] 若涉及多线程场景,考虑了并发场景,不存在死锁问题