已合并
支持引擎原生拉起:删除Engine Server冗余代码 #717
支持引擎原生拉起:删除Engine Server冗余代码 #717
已合并
tobking创建于 23 天前
tobking
tobking成员
23 天前

1. 合入背景

请描述为什么要做这个PR内的改动。
如涉及,请关联前序PR或同特性/需求下的其他PR。
如果是修复之前PR引入的问题,请关联引入问题的PR。
请通过#ISSUE ID关联issue。
注意:Fixes #ISSUE ID会自动关闭issue,如问题部分解决请不要使用Fixes,可以用Fix part of #ISSUE ID替代.

在 NodeManager 原生拉起 vLLM/SGLang、Coordinator 直连原生推理端口(前序原生引擎 / PD 路由能力)落地后,motor/engine_server 已不再承担启动、推理转发与管理面职责,继续保留会带来:

  1. 双栈维护成本:EngineServer 与 Native Runtime 两套启动、健康检查与错误处理路径并存;
  2. 架构不一致:文档与部署仍暗示存在独立 EngineServer 进程,而实际链路为 Controller → NodeManager → 原生引擎;
  3. 遗留协议负担:EngineServer 侧 dispatch 信封、管理 HTTP、虚推(sim_inference)等与原生路径无关的代码/文档仍残留。

本 PR 是「删除 EngineServer、收敛到 Native Runtime」系列的收尾重构:删除 motor/engine_server 及其测试/入口,清理仅服务于 EngineServer 的 dispatch/配置/文档。容器快照中,显存保存/恢复由具备快照能力的引擎镜像自闭环完成;NodeManager 不再触发 /suspend/device_unlock/resume,只保留框架侧状态刷新、元数据准备和完成态感知。

  • 关联前序能力:NodeManager 原生拉起引擎、解除 Engine Server 层依赖;同系列 PR2(原生引擎直连 / PD 路由)。
  • 关联 Issue#486

2. 修改内容

描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列。
如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容)。

  1. 删除 EngineServer 组件
    移除 motor/engine_server/(CLI、推理/管理 Endpoint、dispatch adapter、vLLM/SGLang 封装、sim_inference、snapshot_sentinel 等)、setup.py 入口及相关 UT;进程模型收敛为 NodeManager 直接拉起 vllm serve / sglang.launch_server

  2. 容器快照职责切分(vLLM 快照镜像)
    显存快照保存/恢复是引擎原子能力,由支持快照的独立引擎镜像自闭环完成。NodeManager 在整个快照生命周期只做框架侧编排:

    • 快照前后刷新服务框架状态(Controller 域名、job_namepod_ip),保证恢复后能向 Controller 注册;
    • 准备显存快照所需元数据(model_save_path / model_load_pathdata_parallel_master_ip 等);
    • 通过引擎就绪状态和 Host 侧 checkpoint 标记感知保存/恢复是否完成(心跳屏障、readiness)。
      因此删除 native_engine/snapshot.pySnapshotOrchestrator / NativeSnapshotControl)及其在 EngineManagerDaemonNativeEngineService 上的触发接线。原先 EngineServer 的 snapshot_sentinel 下沉到引擎原生 server(如 api_server),不在 NodeManager 中重建。
      总开关 motor_container_snapshot_config.enable_snapshot 默认 false;SGLang 开启该开关时配置校验失败。
  3. 配置与公共协议精简

    • 去掉 EndpointConfig 的 EngineServer CLI / init_endpoint_config / snapshot_metadata 等入口;TLS 更新改为 _update_native_engine_tls_config
    • 删除 engine_constants 中仅 EngineServer 使用的常量;
    • 精简 dispatch.py:移除 EngineServer 侧 dispatch 信封模型与相关 helper,保留原生路由所需的 DispatchProfile / capability 分类。
  4. 资料与开发指南同步
    删除 EngineServer 架构/接口/虚推文档与插图;更新 architecture、NodeManager/Coordinator 开发指南、container_snapshot、部署与配置参考;管理面文档补充原生场景下 mgmt_port / bootstrap_port 语义说明,并修正失效链接。快照文档改为:引擎负责 Device 侧 suspend/resume/unlock,NodeManager 负责元数据、注册与状态感知。

  5. 测试
    删除 tests/engine_server/** 以及 NodeManager 侧 snapshot orchestrator UT(test_snapshot.pysnapshot_targets 相关用例);保留 metadata 准备、restore 注册刷新、checkpoint 屏障等框架侧 UT。

上下游关系(简要)

Controller
  └─ start/stop/pause → NodeManager API
                          ├─ NativeEngineService → ProcessSupervisor → vLLM/SGLang
                          ├─ HeartbeatManager → Controller(checkpoint 屏障、restore 后重新注册)
                          └─ snapshot metadata / job_name / pod_ip 刷新
Coordinator
  └─ 直连原生 business_port(不再经 EngineServer)
Engine(快照能力镜像)
  └─ Device 侧 suspend / device_unlock / resume 自闭环
Host/MindCluster
  └─ checkpoint 元数据 ↔ NodeManager readiness/status

设计文档位置

  • .agent/skills/motor-dev/references/nodeman.md(Native Runtime + Snapshot Boundary)
  • docs/zh/user_guide/features/container_snapshot.md
  • docs/zh/developer_guide/components/node_manager.md
  • docs/zh/architecture.md / docs/zh/design/pd_disaggregation.md

DFX

  • 快照框架侧日志前缀 [snapshot];恢复后刷新注册信息并重试向 Controller 注册;
  • 健康探测仍走原生 /health;pause 返回原生 metrics URL;
  • 不引入 EngineServer 管理端口,也不由 NodeManager 调用引擎快照 HTTP 接口。

3. 资料变更

请确认是否涉及资料变更
如涉及,需要在PR中体现,并简要说明修改内容。
如不涉及,需填写“不涉及”。

涉及。删除 EngineServer 文档与插图;更新 NodeManager / 容器快照 / 架构与配置说明,明确显存快照由引擎自闭环、NodeManager 只做框架侧编排。

4. 接口变更

请确认是否涉及跨代码仓或者客户面可见的接口变更
如涉及,需详细说明接口以及对应的变更内容,同时需要在资料中体现。
如不涉及,需填写“不涉及”。

不涉及对外客户面接口变更。删除的是 Motor 内部 EngineServer 进程及 NodeManager 对引擎 /suspend/device_unlock/resume 的主动调用;容器快照仍通过 motor_container_snapshot_config.enable_snapshot 显式打开,默认关闭。

5. 测试结果

需体现测试场景,测试方法以及测试结果
测试用例设计时需考虑硬件、部署方式、功能、性能、精度、显存等维度。

  • 单元测试:tests/node_manager/core/test_engine_manager.pytest_daemon.pynative_engine/test_service.py 等框架侧用例通过(含 snapshot metadata / restore 准备、原生拉起与恢复门闩)。
  • 删除 EngineServer 及 snapshot orchestrator 后,不再保留对 NodeManager 主动调用 /suspend /resume 的 UT。
  • 容器快照端到端需使用支持镜像快照的引擎独立镜像,并显式打开 enable_snapshot 后验证:冷启动稳态点、Host checkpoint、恢复后重新注册与推理恢复。

6. CheckList

PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x]

[x] 代码注释完备

[x] 正确记录维测日志

[x] 是否有UT用例

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

likedislike
Pull Request已成功合入, 合并人@wangyang
(感谢 tobking 的贡献)
atomgit-bot
atomgit-bot
23 天前 评论:

🤖 正在生成合并请求摘要,请稍候…

likedislike
atomgit-bot
atomgit-bot
23 天前 评论:

🤖 AI 代码检视正在进行中,请稍候…

likedislike
Xxiangjie10成员
23 天前 添加了label:pr-audit-failed
xiangjie10成员
23 天前 评论:
🔍 PR 规范审计未通过,以下项目需要修正:
  • PR 未关联里程碑或 Issue
  • PR 新增代码 9163 行超过 1000 行,且标题未标注"反合"

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

likedislike
ascend-robotascend-robot成员
23 天前 添加了label:stat/needs-squash
此处折叠了156条消息 查看更多
ascend-robotascend-robot成员
18 天前 添加了label:approved
liu
liu成员
18 天前 评论:

/lgtm

likedislike
ascend-robotascend-robot成员
18 天前 添加了label:lgtm
ganglv成员
18 天前 评论:

/lgtm

likedislike
wangyangwangyang成员
18 天前 合入了pull request