| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[Feature]Add AgentHint feature for agent inference Co-authored-by: xavier_zw<xavier.zengwei@huawei.com> # message auto-generated for no-merge-commit merge: !692 merge master into master [Feature]Add AgentHint feature for agent inference Created-by: xavier_zw Commit-by: xavier_zw Merged-by: tobking Description: ## **1. 合入背景** 本 PR 为 Agent 推理引入 AgentHint 特性,允许客户端通过请求体中的 agent_hint 字段传递会话管理、KV 缓存控制和上下文编辑等提示信息。核心变更包括:新增 AgentHintInfo 等 Pydantic 数据模型用于解析和规范化客户端输入;新增 block_offset_translator 模块将消息级索引转换为 PagedAttention 块坐标;在请求验证、分发和调度链路中集成 agent_hint 的解析与块偏移附加逻辑,使调度器能够感知会话亲和性和上下文编辑意图。 关联 ISSUE:[#463](https://gitcode.com/Ascend/MindIE-Motor/issues/463) ## **2. 修改内容** - 新增 agent_hint.py 数据模型模块:定义 AgentHintInfo、CacheControl、ContextEdit、ContextManagement 等 Pydantic 模型,以及 parse_agent_hint() 解析函数和 _resolve_session_ids() 会话 ID 规范化逻辑,支持从请求体与 HTTP 头中联合解析 session 标识 - 新增 block_offset_translator.py 块偏移转换模块:实现 BaseBlockOffsetCalculator 抽象基类及 Dsv4BlockOffsetCalculator / StandardBlockOffsetCalculator 两个模型族计算器,通过 attach_block_offsets() 将 CacheControl.msg_offset 和 ContextEdit.start/end 转换为 PagedAttention 的 block_offset、intra_block_offset、token_offset 坐标 - 修改请求验证逻辑以支持 session-targeted 编辑:在 inference_server.py 中新增 _has_session_target_edit() 辅助函数,将 _validate_openai_request 的空消息列表校验拆分为两种错误信息,允许存在 session 目标编辑时消息列表为空 - 在请求分发链路中集成 agent_hint 解析:在 dispatch.py 的 __create_request_info 中调用 ensure_minimum_messages_for_session_edits() 和 parse_agent_hint(),将解析结果注入 RequestInfo.agent_hint_info 字段 - 在调度策略中集成块偏移附加:在 kv_cache_affinity.py 的 KvCacheAffinityPolicy 中于消息编码后调用 attach_block_offsets(),并在 TokenizerManager 中暴露 is_dsv4 属性以支持 tokenizer 类型判定 ## **3. 资料变更** 对原有功能资料不涉及变更 ## **4. 接口变更** 对原有接口功能不涉及变更 ## **5. 测试结果** ### 测试场景1 - 环境:A3 8卡,qwen3-235B - 测试内容:对比开关AgentHint,测试JiuwenSwarm Agent,先启动session 1,然后offload session 1的KVC,接着启动多个session 2-N,回到session 1,prefetch session 1的KVC,最后在session 1上进行1次新请求推理 - 测试结果 | 指标 | AgentHint OFF | AgentHint ON | ON 相对 OFF | |------|--------------|-------------|-------------| | 首 Token 延迟 (TTFT) | 11,623.54 ms | 2,054.92 ms | 降低 9,568.62 ms (82.32%) | | 每 Token 生成时间 (TPOT) | 36.47 ms | 35.51 ms | 降低 0.96 ms (2.63%) | | 请求端到端延迟 (Request E2E) | 35,483.35 ms | 5,871.63 ms | 降低 29,511.72 ms (71.90%) | | Prompt tokens | 66,196 | 53,243 | 减少 12,953 (19.46%) | | Cached tokens | 5,504 | 51,968 | 增加 46,464 | | 请求级 KVC 命中率 | 8.33% | 97.61% | 提升 89.29 个百分点 | | 需要重新 prefill 的 tokens | 60,602 | 1,275 | 减少 59,327 (97.90%) | ### 测试场景2 - 环境:A3 8卡,deepseek v4 flash - 测试内容:并发启动10个session,每个session结束后,开启AgentHint场景进行主动evict - 关闭AgentHint时的结果 | 指标 | 数值 | |------|------| | 有效请求数 | 10 | | TTFT 均值 | 8.0323s | | TTFT P50 | 6.8542s | | TTFT P90 | 10.7152s | | TPOT 均值 | 0.2209s/token | | TPOT P50 | 0.2298s/token | | TPOT P90 | 0.2743s/token | - 开启AgentHint+主动evict结果 | 指标 | 数值 | |------|------| | 有效请求数 | 10 | | TTFT 均值 | 5.5182s | | TTFT P50 | 3.3983s | | TTFT P90 | 14.4788s | | TPOT 均值 | 0.2106s/token | | TPOT P50 | 0.2038s/token | | TPOT P90 | 0.2459s/token | ## **6. CheckList** > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] [x] 代码注释完备 [x] 正确记录维测日志 [x] 是否有UT用例 [x] 若涉及多线程场景,考虑了并发场景,不存在死锁问题 See merge request: Ascend/MindIE-Motor!692 | 2 天前 | |
[Feature]Add AgentHint feature for agent inference Co-authored-by: xavier_zw<xavier.zengwei@huawei.com> # message auto-generated for no-merge-commit merge: !692 merge master into master [Feature]Add AgentHint feature for agent inference Created-by: xavier_zw Commit-by: xavier_zw Merged-by: tobking Description: ## **1. 合入背景** 本 PR 为 Agent 推理引入 AgentHint 特性,允许客户端通过请求体中的 agent_hint 字段传递会话管理、KV 缓存控制和上下文编辑等提示信息。核心变更包括:新增 AgentHintInfo 等 Pydantic 数据模型用于解析和规范化客户端输入;新增 block_offset_translator 模块将消息级索引转换为 PagedAttention 块坐标;在请求验证、分发和调度链路中集成 agent_hint 的解析与块偏移附加逻辑,使调度器能够感知会话亲和性和上下文编辑意图。 关联 ISSUE:[#463](https://gitcode.com/Ascend/MindIE-Motor/issues/463) ## **2. 修改内容** - 新增 agent_hint.py 数据模型模块:定义 AgentHintInfo、CacheControl、ContextEdit、ContextManagement 等 Pydantic 模型,以及 parse_agent_hint() 解析函数和 _resolve_session_ids() 会话 ID 规范化逻辑,支持从请求体与 HTTP 头中联合解析 session 标识 - 新增 block_offset_translator.py 块偏移转换模块:实现 BaseBlockOffsetCalculator 抽象基类及 Dsv4BlockOffsetCalculator / StandardBlockOffsetCalculator 两个模型族计算器,通过 attach_block_offsets() 将 CacheControl.msg_offset 和 ContextEdit.start/end 转换为 PagedAttention 的 block_offset、intra_block_offset、token_offset 坐标 - 修改请求验证逻辑以支持 session-targeted 编辑:在 inference_server.py 中新增 _has_session_target_edit() 辅助函数,将 _validate_openai_request 的空消息列表校验拆分为两种错误信息,允许存在 session 目标编辑时消息列表为空 - 在请求分发链路中集成 agent_hint 解析:在 dispatch.py 的 __create_request_info 中调用 ensure_minimum_messages_for_session_edits() 和 parse_agent_hint(),将解析结果注入 RequestInfo.agent_hint_info 字段 - 在调度策略中集成块偏移附加:在 kv_cache_affinity.py 的 KvCacheAffinityPolicy 中于消息编码后调用 attach_block_offsets(),并在 TokenizerManager 中暴露 is_dsv4 属性以支持 tokenizer 类型判定 ## **3. 资料变更** 对原有功能资料不涉及变更 ## **4. 接口变更** 对原有接口功能不涉及变更 ## **5. 测试结果** ### 测试场景1 - 环境:A3 8卡,qwen3-235B - 测试内容:对比开关AgentHint,测试JiuwenSwarm Agent,先启动session 1,然后offload session 1的KVC,接着启动多个session 2-N,回到session 1,prefetch session 1的KVC,最后在session 1上进行1次新请求推理 - 测试结果 | 指标 | AgentHint OFF | AgentHint ON | ON 相对 OFF | |------|--------------|-------------|-------------| | 首 Token 延迟 (TTFT) | 11,623.54 ms | 2,054.92 ms | 降低 9,568.62 ms (82.32%) | | 每 Token 生成时间 (TPOT) | 36.47 ms | 35.51 ms | 降低 0.96 ms (2.63%) | | 请求端到端延迟 (Request E2E) | 35,483.35 ms | 5,871.63 ms | 降低 29,511.72 ms (71.90%) | | Prompt tokens | 66,196 | 53,243 | 减少 12,953 (19.46%) | | Cached tokens | 5,504 | 51,968 | 增加 46,464 | | 请求级 KVC 命中率 | 8.33% | 97.61% | 提升 89.29 个百分点 | | 需要重新 prefill 的 tokens | 60,602 | 1,275 | 减少 59,327 (97.90%) | ### 测试场景2 - 环境:A3 8卡,deepseek v4 flash - 测试内容:并发启动10个session,每个session结束后,开启AgentHint场景进行主动evict - 关闭AgentHint时的结果 | 指标 | 数值 | |------|------| | 有效请求数 | 10 | | TTFT 均值 | 8.0323s | | TTFT P50 | 6.8542s | | TTFT P90 | 10.7152s | | TPOT 均值 | 0.2209s/token | | TPOT P50 | 0.2298s/token | | TPOT P90 | 0.2743s/token | - 开启AgentHint+主动evict结果 | 指标 | 数值 | |------|------| | 有效请求数 | 10 | | TTFT 均值 | 5.5182s | | TTFT P50 | 3.3983s | | TTFT P90 | 14.4788s | | TPOT 均值 | 0.2106s/token | | TPOT P50 | 0.2038s/token | | TPOT P90 | 0.2459s/token | ## **6. CheckList** > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] [x] 代码注释完备 [x] 正确记录维测日志 [x] 是否有UT用例 [x] 若涉及多线程场景,考虑了并发场景,不存在死锁问题 See merge request: Ascend/MindIE-Motor!692 | 2 天前 | |
修复故障实例熔断时间过长 Co-authored-by: WZN-JJB<wuzhineng@huawei.com> # message auto-generated for no-merge-commit merge: !715 merge circuit_toolong_fix into master 修复故障实例熔断时间过长 Created-by: qq_46749096 Commit-by: WZN-JJB Merged-by: tobking Description: ## **1. 合入背景** 当前存在两个实例故障场景下的问题: 1. 实例异常(如 pod 删除、IP 释放导致 TCP 黑洞)时,请求连接建立依赖内核 SYN 重试(约 63s 才失败),远超客户端超时,导致请求直接超时失败而非快速触发熔断降级; 2. 熔断恢复定时器到点后直接闭合熔断,若实例实际未恢复,请求会再次被派发进黑洞地址,反复超时。 关联 ISSUE:#470 ## **2. 修改内容** 1. **连接超时收敛(router 层)**: BaseRouter 新增 _build_request_timeout(),使用 exception_config.connect_timeout(默认 5s,取 0 保持原行为)单独约束 TCP connect 阶段,读写/总超时语义不变;流式与非流式两条转发路径均生效。引擎黑洞时请求快速失败 → 熔断及时再跳闸 → hybrid 降级按时接管。 2. **熔断解除前探活(scheduler 层)**:_auto_recover 定时器到点后不再直接闭合熔断,先执行 _probe_instance() 对实例业务端口做 TCP connect 探活(2s 超时),探活成功才 auto_recover 闭合。 3. **探活失败退避(熔断域)**:新增 CircuitBreakerManager.process_probe_failure(),探活失败时保持熔断打开,恢复超时按 trip_count 指数退避(30s 起、2 倍递增、封顶 300s),并重新调度恢复任务。 涉及文件: - motor/coordinator/domain/circuit_breaker.py(新增 process_probe_failure) - motor/coordinator/router/strategies/base.py(新增 _build_request_timeout) - motor/coordinator/scheduler/runtime/scheduler_server.py(新增 _probe_instance,改造 _auto_recover) ## **3. 资料变更** 不涉及。 ## **4. 接口变更** 不涉及(均为内部实现变更;connect_timeout 配置项此前已合入,未新增外部接口)。 ## **5. 测试结果** [MindIE-Motor 熔断修复验证测试报告](https://wiki.huawei.com/domains/123696/wiki/385355/WIKI2026081212268325) ## **6. CheckList** [x] 代码注释完备 [x] 正确记录维测日志 [x] 是否有UT用例 [x] 若涉及多线程场景,考虑了并发场景,不存在死锁问题(asyncio 单线程事件循环,定时器替换逻辑已处理) See merge request: Ascend/MindIE-Motor!715 | 12 小时前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 天前 | ||
| 2 天前 | ||
| 12 小时前 |