已合并
[feature] Docker-only PD 混部推理部署支持 #469
yuzechen创建于 7月10日
[feature] Docker-only PD 混部推理部署支持 #469
已合并
Pull Request已成功合入, 合并人@wangyang
(感谢 yuzechen 的贡献)7月10日 关联了issue:[feature] Docker-only PD 混部推理部署支持
atomgit-bot
7月10日 评论:
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_type和model_name。 - Coordinator 混部配置摘要修复:
coordinator.py中get_config_summary方法在hybrid_instances_num存在时仅打印 hybrid 相关字段(不再同时打印 p/d 字段),并将所有树形缩进统一为├─/└─字符,同时抽取了format_config_summary_header公共方法。 - NodeManager 单容器 union 分支端口/设备偏移计算:
node_manager.py中SingleContainerNodemanagerConfig.from_json新增 union 专属路径,当存在 union 配置且无 prefill 配置时,基于 union 的并行参数计算node_manager_port_offset、base_port_offset、device_offset、dp_rpc_port。 - Daemon 启动参数安全处理:
daemon.py中在追加--kv-port和--dp-rpc-port参数前增加了None检查,避免单容器混部场景下因kv_port未设置而导致 engine_server 解析失败。


atomgit-bot
7月10日 评论:
7月10日 评论:
代码审查
审查总结
我逐一审查了全部 15 个变更文件,共发现 1 个问题:
- P2 × 1:
all_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 |
💬 仅评论


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():
【openlibing.ci】识别到代码检查告警抑制注释,匹配工具:flake8,ruff,请Committer检视其合理性。


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


7月16日 添加了label:lgtm
7月16日 解决了最后一个问题
7月16日 关闭了关联的issue
7月16日 合入了pull request
1. 合入背景
Fixes #263
当前 Docker-only 部署指南仅覆盖 PD 分离,缺少 PD 混部的单容器、多容器端到端部署方式;原有示例在单容器 union 实例拉起、环境变量注入、端口偏移和可选 KV 端口处理方面也不完整。本 PR 统一整理两种 PD 模式的部署指导,并补齐 PD 混部所需的启动与配置支持。
2. 修改内容
CONFIGMAP_PATH和WEIGHT_MOUNT_PATH挂载,模型权重使用只读挂载。all_combine_in_single_container.sh根据motor_engine_union_config识别 PD 混部模式。hybrid_instances_num,按实例设置ROLE=union、INDEX、JOB_NAME和 ranktable 路径并拉起 NodeManager。set_env_docker.py支持从motor_engine_union_config解析 engine 类型和模型名称。set_union_env;未配置motor_engine_union_env时兼容复用 Prefill 环境配置。--kv-port和--dp-rpc-port,避免生成--kv-port None导致 Engine Server 参数解析失败。dp_rpc_port应用到 union 并行配置,避免多 union 实例复用同一 DP RPC 端口。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_config、motor_engine_union_env和hybrid_instances_num配置的支持;文档启动示例新增WEIGHT_MOUNT_PATH变量及31015:1025服务端口映射。5. 测试结果
6. CheckList
[x] 代码注释完备
[x] 正确记录维测日志
[x] 是否有UT用例
[x] 若涉及多线程场景,考虑了并发场景,不存在死锁问题