Deepspeed多节点训练报错:errno:98-地址已占用问题求助
Deepspeed多节点训练端口占用问题解决
问题原因
master_port是**主节点(node_rank=0)**用来接收从节点连接的监听端口,只有主节点会绑定这个端口;从节点是主动发起连接到主节点的master_addr:master_port,不会在本地绑定该端口。你遇到的报错是因为从节点本地的7000端口已经被其他进程占用,和主节点的端口占用无关。
另外,你当前在两个节点分别手动启动脚本的方式也容易引发问题,Deepspeed支持通过hostfile自动分发任务到从节点,无需手动在每个节点启动。
解决步骤
1. 清理从节点的7000端口占用
在报错的从节点上执行命令,查看占用7000端口的进程:
lsof -i :7000 # 或者 netstat -tulpn | grep 7000
找到进程ID(PID)后,杀掉该进程:
kill -9 <PID>
2. 修正启动方式(推荐)
只在主节点(node_rank=0)执行启动脚本即可,Deepspeed会通过hostfile自动连接从节点并启动训练任务,无需手动在从节点运行命令。
3. 检查hostfile配置
确保你的hostfile正确列出两个节点的信息,格式如下:
xxx.xx.xx.198 slots=1 # 主节点IP,对应master_addr <从节点IP> slots=1
其中slots对应每个节点的GPU数量(此处为1)。
4. 若必须手动启动从节点
如果因为环境限制必须手动在两个节点启动,需确保:
- 主节点启动命令中
node_rank=0,从节点node_rank=1 - 从节点本地没有其他进程占用7000端口
- 两个节点之间的7000端口通信是打通的(防火墙允许)
验证
清理端口后,按照正确方式启动训练,即可解决卡在初始化和端口占用的问题。
内容的提问来源于stack exchange,提问作者linos
相关产品推荐
相关产品推荐

