RuntimeError: The server socket has failed to listen on any local network address. useIpv6: 0, code:
这个错误表明,你尝试使用的网络端口已经被其他进程占用。在服务器环境中,特别是当多个用户或任务同时运行时,可能已经被其他DDP训练任务占用。在修改端口号之前,最好先检查你选择的端口是否已经被占用。通常,1024以下的端口号被系统保留或需要特权才能使用。因此,选择更高的端口号(如15000以上)通常更安全且不易冲突。为了避免端口冲突,你可以指定一个不同的端口号来启动你的DDP训练任务。为了使你的脚本更
描述
在使用PyTorch的分布式数据并行(DDP)进行多卡训练时,可能会遇到以下错误:
RuntimeError: The server socket has failed to listen on any local network address. useIpv6: 0, code: -98, name: EADDRINUSE, message: address already in use
原因
这个错误表明,你尝试使用的网络端口已经被其他进程占用。在服务器环境中,特别是当多个用户或任务同时运行时,可能已经被其他DDP训练任务占用。
修改方法
为了避免端口冲突,你可以指定一个不同的端口号来启动你的DDP训练任务。以下是如何通过命令行参数来指定新的端口号的步骤:
-
修改启动命令:
使用torch.distributed.launch
工具时,可以通过--master_port
参数来指定主节点使用的端口号。例如,如果你想使用端口号15666,可以修改你的启动命令如下:python3 -m torch.distributed.launch --nproc_per_node=$GPUS --master_port 15666 --use_env main.py
这里,
$GPUS
应该被替换为你想要使用的GPU数量。 -
检查端口占用:
在修改端口号之前,最好先检查你选择的端口是否已经被占用。你可以使用如下命令来检查特定端口的占用情况(以Linux为例):sudo lsofo -i :15666
或者
sudo netstat -tulpn | grep 15666
如果端口已经被占用,你需要选择一个不同的端口号。
-
避免硬编码端口:
为了使你的脚本更加灵活和可移植,建议不要在脚本中硬编码端口号。而是可以通过命令行参数或环境变量来传递端口号。 -
使用更高范围的端口:
通常,1024以下的端口号被系统保留或需要特权才能使用。因此,选择更高的端口号(如15000以上)通常更安全且不易冲突。
更多推荐
所有评论(0)