# PR #21917 完整报告

- 仓库：`sgl-project/sglang`
- 标题：Fix DP attention worker port binding for IPv6 support
- 合并时间：2026-04-04 03:39
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/21917

---

# 执行摘要
本 PR 修复了 DP（数据并行）注意力工作进程在 IPv6-only 网络环境下的端口绑定问题，通过从 `dist_init_addr` 解析主机地址并改用支持 IPv6 检测的 `get_zmq_socket_on_host` 函数，确保调度器能够正确连接。这是一个针对特定网络配置的 bugfix，提升了系统在纯 IPv6 集群中的可用性。

# 功能与动机
在 IPv6-only 集群中，DP 注意力工作进程的 PUSH 套接字使用 `get_zmq_socket` 绑定到 `tcp://*`（IPv4 通配符），而调度器尝试通过 `dist_init_addr` 中的 IPv6 地址连接。由于 ZMQ 需要显式设置 `zmq.IPV6=1` 才能监听 IPv6，连接会静默失败。PR body 中明确指出："The connection silently fails because ZMQ requires explicit `zmq.IPV6=1` to listen on IPv6."

# 实现拆解
修改集中在 `python/sglang/srt/managers/data_parallel_controller.py` 文件的 `launch_dp_attention_schedulers` 方法中：
1. **主机地址解析**：
   ```python
   if server_args.dist_init_addr is None:
       bind_host = "127.0.0.1"
   else:
       bind_host = NetworkAddress.parse(server_args.dist_init_addr).host
   ```
2. **套接字创建替换**：将 `get_zmq_socket(self.context, zmq.PUSH)` 替换为 `get_zmq_socket_on_host(self.context, zmq.PUSH, host=bind_host)`。
3. **日志增强**：更新调试日志以包含端口、工作进程排名和主机地址信息。

# 评论区精华
Review 中仅有 merrymercy 的批准，无具体技术讨论。PR body 中作者详细说明了问题根因和解决方案，但未在 review 线程中展开交锋。

# 风险与影响
- **回归风险**：若 `dist_init_addr` 解析逻辑错误，可能导致绑定到无效主机地址，破坏 DP 注意力调度器的网络通信。
- **兼容性风险**：从 IPv4-only 绑定切换到 IPv6-aware 绑定，需确保 `get_zmq_socket_on_host` 在混合网络环境中正确处理 IPv4 回退。
- **逻辑风险**：当 `server_args.dist_init_addr` 为 None 时，默认使用 127.0.0.1，这在分布式多节点部署中可能不适用。

影响范围主要限于使用 DP 注意力调度器且部署在 IPv6-only 环境的用户，修复后提升了系统在该场景下的可靠性。

# 关联脉络
从近期历史 PR 分析中，未发现直接修改相同文件或处理 IPv6 网络问题的 PR。本 PR 是一个独立的网络通信修复，与仓库中其他优化性能、修复 CI 或增强硬件的 PR 无直接关联。