RuntimeError: The server socket has failed to listen on any loca

举报
AI浩 发表于 2024/12/24 08:18:34 2024/12/24
528 0 0
【摘要】 描述在使用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训练任务。以下是如何通过命令行参数来指定新的端口号的步骤:

  1. 修改启动命令
    使用torch.distributed.launch工具时,可以通过--master_port参数来指定主节点使用的端口号。例如,如果你想使用端口号15666,可以修改你的启动命令如下:

    python3 -m torch.distributed.launch --nproc_per_node=$GPUS --master_port 15666 --use_env main.py
    

    这里,$GPUS应该被替换为你想要使用的GPU数量。

  2. 检查端口占用
    在修改端口号之前,最好先检查你选择的端口是否已经被占用。你可以使用如下命令来检查特定端口的占用情况(以Linux为例):

    sudo lsofo -i :15666
    

    或者

    sudo netstat -tulpn | grep 15666
    

    如果端口已经被占用,你需要选择一个不同的端口号。

  3. 避免硬编码端口
    为了使你的脚本更加灵活和可移植,建议不要在脚本中硬编码端口号。而是可以通过命令行参数或环境变量来传递端口号。

  4. 使用更高范围的端口
    通常,1024以下的端口号被系统保留或需要特权才能使用。因此,选择更高的端口号(如15000以上)通常更安全且不易冲突。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。