TensorFlow分布式目标检测报错:Master init: Unavailable: OS Error求助
我刚帮几个同行排查过类似的分布式训练报错,你遇到的这个Unavailable: OS Error基本都是集群节点间的网络通信或者配置格式出了问题,咱们一步步来捋:
先验证节点网络连通性
从chief节点(host2)分别ping worker节点(host1)和ps节点(host1),确认能正常通。接着用telnet host1 2230、telnet host1 22231(这里注意你写的ps端口是22231?会不会是多打了个2?正常端口一般是四位数,比如2231,先确认端口号有没有笔误)测试端口是否能正常访问,要是telnet连不上,那肯定是网络或者防火墙的锅。核对TF_CONFIG的格式与配置细节
你写的cluster里用了master字段,但TensorFlow分布式中,chief角色的配置字段应该是chief而非master,而且必须给每个节点指定自身的task角色。给你一个标准的配置示例参考:import json import os chief_host = ['host2:2229'] worker_hosts = ['host1:2230'] ps_hosts = ['host1:2231'] # 建议检查端口是否为笔误 cluster_spec = { 'chief': chief_host, 'worker': worker_hosts, 'ps': ps_hosts } # 注意:不同节点的task配置要对应自身角色! # 比如在chief节点上: tf_config = { 'cluster': cluster_spec, 'task': {'type': 'chief', 'index': 0} } # 在worker节点上要改成:{'type': 'worker', 'index': 0} # 在ps节点上要改成:{'type': 'ps', 'index': 0} os.environ['TF_CONFIG'] = json.dumps(tf_config)检查端口占用与防火墙规则
每个节点上用netstat -tulpn | grep [端口号]确认目标端口没被其他进程占用。同时要放开集群内的防火墙规则——不管是系统层面的iptables/ufw,还是集群所在平台的安全组,都要允许节点之间的TCP通信。替换hostname为IP地址尝试
有时候hostname解析会出问题,把所有节点的hostname换成对应的内网IP再试,能排除DNS解析的干扰。确认所有节点的TensorFlow版本一致
不同TF版本对分布式配置的要求有差异,你用的train.py脚本是对应特定TF版本的,要确保集群所有节点的TensorFlow版本完全匹配,避免因版本兼容问题导致通信失败。
内容的提问来源于stack exchange,提问作者Ruchika Dakalia

