在进行模型分布式训练时遇到报错“Failed to bind the IP port. Reason: The IP address and port have been bound already.”
问题描述
- 报错截图
- 报错文本
…… [ERROR] 2024-12-19-08:46:00 (PID:270, Device:7, RankID:7) ERR02200 DIST call hccl api failed. EJ0003: [PID: 270] 2024-12-19-08:46:00.284.867 Failed to bind the IP port. Reason: The IP address and port have been bound already. TraceBack (most recent call last): host nic listen start failed, port[60007], return[11][FUNC:StartListenSocket][FILE:network_manager.cc][LINE:1155]
问题分析
HCCL组件通常使用60000~60015端口,如果其他组件占用该端口,可能会报“Failed to bind the IP port. Reason: The IP address and port have been bound already.”。
处理方法
分布式训练场景下,HCCL会使用Host服务器的部分端口进行集群信息收集,需要操作系统预留该部分端口。HCCL通常使用60000-60015端口,若通过环境变量HCCL_IF_BASE_PORT指定了Host网卡起始端口,则需要预留以该端口起始的16个端口,此环境变量详细信息可参见《CANN 环境变量参考》中的“HCCL_IF_BASE_PORT”章节。
- 若操作系统端口号预留仅需临时生效,可执行如下命令,临时生效的配置重启后会失效:
sysctl -w net.ipv4.ip_local_reserved_ports=60000-60015
- 若操作系统端口号预留需永久生效,可执行如下命令:
- 以root用户登录服务器,编辑“/etc/sysctl.conf”文件。
vim /etc/sysctl.conf
- 在“/etc/sysctl.conf”文件末尾加上net.ipv4.ip_local_reserved_ports=60000-60015,保存并退出。
- 执行如下命令使配置生效。
sysctl -p
- 以root用户登录服务器,编辑“/etc/sysctl.conf”文件。
父主题: 模型分布式训练常见问题