RuntimeError: The server socket has failed to listen on any loca
【摘要】 描述在使用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 u...
描述
在使用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以上)通常更安全且不易冲突。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)