You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决跨主机Horovod分布式学习中的NoValidAddressesFound错误

解决跨主机Horovod分布式训练连接失败的问题

我之前在部署跨主机Horovod训练时也碰到过几乎一模一样的问题,给你梳理几个关键的排查和解决步骤:

1. 先搞定SSH免密登录(Horovod的核心依赖)

Horovod底层靠SSH在主机间同步任务,这是最容易踩坑的点:

  • 在发起任务的本地主机上生成SSH密钥对:ssh-keygen -t rsa,一路回车用默认配置就行
  • 把公钥复制到目标主机(192.168.0.20):ssh-copy-id 你的目标主机用户名@192.168.0.20
  • 测试免密登录:ssh 你的目标主机用户名@192.168.0.20,如果能直接进入目标主机不用输密码,这一步就没问题了

2. 检查防火墙和端口权限

报错里提到的30871是Horovod动态分配的服务端口,两台主机之间得确保这类端口能被访问:

  • 可以先临时关闭两台主机的防火墙做测试:
    • CentOS/RHEL:sudo systemctl stop firewalld
    • Ubuntu:sudo ufw disable
      测试完记得重新开启防火墙
  • 如果不想关防火墙,直接配置允许两台主机互访所有端口:
    # 允许本地主机访问192.168.0.20的所有端口
    sudo iptables -A INPUT -s 你的本地主机IP -j ACCEPT
    # 允许192.168.0.20访问本地主机的所有端口
    sudo iptables -A INPUT -s 192.168.0.20 -j ACCEPT
    

3. 强制Horovod绑定到可访问的网卡

有时候Horovod会默认绑定到Docker内部网卡或回环地址,导致跨主机无法连接,你可以通过环境变量指定:

  • 运行命令前先设置环境变量:
    # 允许绑定到所有可用网卡
    export HOROVOD_BIND_ALL=1
    # 或者直接指定你的物理网卡,比如报错里的enp0s31f6
    export HOROVOD_IFACE=enp0s31f6
    
  • 再执行你的跨主机训练命令:
    horovodrun -np 3 -H localhost:1,192.168.0.20:2 -p 12345 python keras_mnist_advanced.py
    

4. 确保Docker用Host网络模式

因为你用的是NVIDIA Docker,必须让容器使用主机网络栈,否则容器内的端口不会暴露给外部主机:

  • 启动容器时加上--net=host参数:
    docker run --gpus all --net=host -it 你的NVIDIA镜像名 bash
    
    这样容器会直接复用主机的网络,Horovod的服务端口就能被跨主机访问到

5. 手动验证网络连通性

可以用nc命令测试两台主机的端口是否能通,在本地主机执行:

nc -zv 192.168.0.20 30871

如果显示连接成功,说明网络没问题;如果失败,回到前面的防火墙和Docker配置排查。

Launching horovodrun task function was not successful: horovod.run.common.util.network.NoValidAddressesFound: Unable to connect to the horovodrun task service #1 on any of the addresses:{'lo': [('127.0.0.1', 30871)], 'docker0': [('172.17.0.1', 30871)], 'enp0s31f6': [('192.168.0.20', 30871)]}

这个错误本质是:Horovod在目标主机上启动了服务,但本地主机无法通过列出的地址访问到它。上面的步骤都是围绕打通两台主机的网络、让Horovod绑定到可被外部访问的地址来解决的。

内容的提问来源于stack exchange,提问作者plusultra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:51:31