已合并
[feature] Docker-only PD 混部推理部署支持 #469
[feature] Docker-only PD 混部推理部署支持 #469
已合并
yuzechen创建于 7月10日
yuzechen
yuzechen成员
7月10日

1. 合入背景

Fixes #263

当前 Docker-only 部署指南仅覆盖 PD 分离,缺少 PD 混部的单容器、多容器端到端部署方式;原有示例在单容器 union 实例拉起、环境变量注入、端口偏移和可选 KV 端口处理方面也不完整。本 PR 统一整理两种 PD 模式的部署指导,并补齐 PD 混部所需的启动与配置支持。

2. 修改内容

  1. 统一 Docker 部署指南
    • 将 PD 分离与 PD 混部整合到单容器、多容器两篇指南中,按“PD 分离在前、PD 混部在后”的顺序说明配置和启动差异。
    • 增加 examples 获取方式、推荐端口规划、Coordinator 对外端口映射、服务验证及 A5 环境说明。
    • 启动示例增加 CONFIGMAP_PATHWEIGHT_MOUNT_PATH 挂载,模型权重使用只读挂载。
  2. 支持单容器 union 实例拉起
    • all_combine_in_single_container.sh 根据 motor_engine_union_config 识别 PD 混部模式。
    • 校验 hybrid_instances_num,按实例设置 ROLE=unionINDEXJOB_NAME 和 ranktable 路径并拉起 NodeManager。
  3. 支持 union 环境变量注入
    • set_env_docker.py 支持从 motor_engine_union_config 解析 engine 类型和模型名称。
    • 为单容器、多容器启动脚本生成 set_union_env;未配置 motor_engine_union_env 时兼容复用 Prefill 环境配置。
  4. 完善单容器混部端口与设备分配
    • NodeManager 根据 union 实例索引计算管理端口、业务端口、设备及 DP RPC 端口偏移。
    • EngineService 仅在端口配置有效时传递 --kv-port--dp-rpc-port,避免生成 --kv-port None 导致 Engine Server 参数解析失败。
    • EndpointConfig 将偏移后的 dp_rpc_port 应用到 union 并行配置,避免多 union 实例复用同一 DP RPC 端口。
  5. 补充自动化测试
    • 覆盖 union 环境注入、单容器 union 端口与设备偏移、混部/分离配置摘要、可选 KV 端口省略及 union DP RPC 端口覆盖。
  6. 文档站点配置
    • 修正 mkdocs.yml 中的站点地址。

3. 资料变更

  • docs/zh/user_guide/deployment/docker/single_container.md:统一单容器 PD 分离/混部部署流程,补充端口映射、挂载与服务验证。
  • docs/zh/user_guide/deployment/docker/multi_container.md:统一多容器 PD 分离/混部部署流程,补充端口规划、挂载与服务验证。
  • mkdocs.yml:更新文档站点地址。

4. 接口变更

不涉及跨代码仓 API 变更。Docker 启动流程新增对现有 motor_engine_union_configmotor_engine_union_envhybrid_instances_num 配置的支持;文档启动示例新增 WEIGHT_MOUNT_PATH 变量及 31015:1025 服务端口映射。

5. 测试结果

  • 相关 NodeManager、EndpointConfig 测试:108 个用例通过。
  • 相关文件 pre-commit 检查全部通过。
  • 按部署文档验证服务能够成功拉起。

6. CheckList

[x] 代码注释完备

[x] 正确记录维测日志

[x] 是否有UT用例

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

likedislike
Pull Request已成功合入, 合并人@wangyang
(感谢 yuzechen 的贡献)
yuzechenyuzechen成员
7月10日 关联了issue:[feature] Docker-only PD 混部推理部署支持
atomgit-bot
atomgit-bot
7月10日 评论:

变更摘要

此 PR 为 PD 混部推理补齐了 Docker-only 单/多容器端到端部署能力。主要围绕三个层面展开:新增混部部署文档与导航、适配单容器启动脚本使其支持 union 角色的自动检测与拉起、修复 Coordinator 配置摘要中混部模式下字段显示错误以及 Daemon 在 kv_port 为空时误传参数的问题。同时补充了对应的单元测试覆盖。

主要改动

  • 单容器启动脚本适配混部模式all_combine_in_single_container.sh 新增对 motor_engine_union_config 的检测分支,当存在该配置项时读取 hybrid_instances_num 并循环以 ROLE=union 拉起 node_manager,原有 P/D 分离启动逻辑移入 else 分支。
  • 环境变量注入支持 union 引擎set_env_docker.py 新增 motor_engine_union_env 环境块的生成与 set_union_env 函数的注入(同时覆盖单容器与多容器场景),并在 prefill 配置缺失时回退使用 union 配置段解析 engine_typemodel_name
  • Coordinator 混部配置摘要修复coordinator.pyget_config_summary 方法在 hybrid_instances_num 存在时仅打印 hybrid 相关字段(不再同时打印 p/d 字段),并将所有树形缩进统一为 ├─/└─ 字符,同时抽取了 format_config_summary_header 公共方法。
  • NodeManager 单容器 union 分支端口/设备偏移计算node_manager.pySingleContainerNodemanagerConfig.from_json 新增 union 专属路径,当存在 union 配置且无 prefill 配置时,基于 union 的并行参数计算 node_manager_port_offsetbase_port_offsetdevice_offsetdp_rpc_port
  • Daemon 启动参数安全处理daemon.py 中在追加 --kv-port--dp-rpc-port 参数前增加了 None 检查,避免单容器混部场景下因 kv_port 未设置而导致 engine_server 解析失败。
likedislike
atomgit-bot
atomgit-bot
7月10日 评论:

代码审查

审查总结

我逐一审查了全部 15 个变更文件,共发现 1 个问题

  • P2 × 1all_combine_in_single_container.sh 第 60 行新增的 grep 命令中 $USER_CONFIG_PATH 未加引号,存在路径含空格时 word-splitting 风险。

其余 14 个文件未发现由本次 diff 引入的真实问题:

文件 结论
docs/zh/.nav.yaml 导航键值正确,无拼写错误
docs/zh/user_guide/deployment/README.md 链接更新正确
docs/zh/user_guide/deployment/docker/multi_container/pd_aggregation_deployment.md 新增文档,端口配置/安全建议合理
docs/zh/user_guide/deployment/docker/multi_container/pd_disaggregation_deployment.md 仅修复 quick_start 相对路径
docs/zh/user_guide/deployment/docker/single_container/pd_aggregation_deployment.md 新增文档,安全建议合理
docs/zh/user_guide/deployment/docker/single_container/pd_disaggregation_deployment.md 仅修复 quick_start 相对路径
examples/deployer/startup/set_env_docker.py union env 注入逻辑正确,死代码清理安全
motor/config/coordinator.py format_config_summary_header 复用正确,树形字符统一,字符串拼接有效
motor/config/node_manager.py union 分支端口/设备偏移计算逻辑正确,MOTOR_ENGINE_UNION_CONFIG_KEY 常量引用一致
motor/node_manager/core/daemon.py kv_port/dp_rpc_port None 检查逻辑正确,防止 engine_server 参数解析失败
tests/coordinator/core/test_config.py 混部/分离配置摘要断言精确
tests/examples/deployer/test_set_env_docker.py union env 注入验证覆盖到位
tests/node_manager/test_config.py union 端口偏移参数化测试正确
tests/node_manager/test_daemon.py kv_port=None 时省略参数验证正确

整体风险评估:低风险。仅有一个 Shell 健壮性缺陷,不影响正常路径(路径无空格时运行正常),修复成本极低。

类型 数量
🔴 阻塞 0
🟡 建议 2

💬 仅评论

likedislike
ascend-robot
ascend-robot成员7月10日进行代码检视1
tests/examples/deployer/test_set_env_docker.py
@@ -0,0 +18,5 @@
18+sys.path.insert(0, str(STARTUP_ROOT))
19+ 
20+from set_env_docker import set_env_docker # noqa: E402
21+ 
22+ 
23+def _make_hybrid_single_container_user_config():
ascend-robot
ascend-robot7月10日评论:

此条代码评论区间+18+23

【openlibing.ci】识别到代码检查告警抑制注释,匹配工具:flake8,ruff,请Committer检视其合理性。

likedislike
ascend-robotascend-robot成员
7月10日 添加了label:stat/needs-squash
此处折叠了125条消息 查看更多
y1lou
y1lou成员
7月16日 评论:

/lgtm

likedislike
ascend-robotascend-robot成员
7月16日 添加了label:lgtm
yuzechenyuzechen成员
7月16日 解决了最后一个问题
wangyangwangyang成员
7月16日 关闭了关联的issue
wangyangwangyang成员
7月16日 合入了pull request