Tensorflow 基于tf估计的gRPC误差

Tensorflow 基于tf估计的gRPC误差,tensorflow,grpc,tensorflow-estimator,Tensorflow,Grpc,Tensorflow Estimator,我正在运行TensorFlow1.4,它是通过OpenStack上运行的Ubuntu16.04上的pip安装的。我按照TensorFlow线性模型教程运行了一个简单的逻辑回归模型。在本地运行时一切正常。我遵循RunConfig()上的文档在一个小型集群上运行模型。据我所知,分发罐装估计器只是设置适当的JSON环境变量的问题。我的做法如下: rank = int(argv[1]) instance_type = argv[2] ... cluster = {'chief': ['master:22

我正在运行TensorFlow
1.4
,它是通过OpenStack上运行的Ubuntu16.04上的
pip
安装的。我按照TensorFlow线性模型教程运行了一个简单的逻辑回归模型。在本地运行时一切正常。我遵循
RunConfig()
上的文档在一个小型集群上运行模型。据我所知,分发罐装估计器只是设置适当的JSON环境变量的问题。我的做法如下:

rank = int(argv[1])
instance_type = argv[2]
...
cluster = {'chief': ['master:2222'],
           'ps': ['master:2223'],
           'worker' : ['worker-1:2222']}
os.environ['TF_CONFIG']= json.dumps(
    {'cluster': cluster,
    'task': {'type': instance_type, 'index': rank}})
...
indep_vars = build_vars()
config = tf.estimator.RunConfig()
lr = tf.estimator.LinearClassifier(model_dir=None,
                                   config = config,
                                   feature_columns=indep_vars)
train_spec = tf.estimator.TrainSpec(
    input_fn=lambda: input_fn_logit(data_path, 1, BATCH_SIZE),
    max_steps=10)
eval_spec = tf.estimator.EvalSpec(
    input_fn=lambda: input_fn_logit(data_path, 1, BATCH_SIZE),
    steps=1)
tf.estimator.train_and_evaluate(lr, train_spec, eval_spec)
然后,我从
master
调用脚本作为:
python tf_dist_example.py 0 chief
,并在另一个窗口中:
python tf_dist_example.py 0 ps
和在
worker-1上作为:
python tf_dist_example.py 0 worker

chief
实例引发错误:
tensorflow.python.framework.errors\u impl.unknown错误:无法启动gRPC服务器
,设置
export gRPC\u VERBOSITY=DEBUG
后,
gRPC
报告错误:

 {"created":"@1513990687.907885617","description":"No address added out of total 1 resolved","file":"external/grpc/src/core/ext/transport/chttp2/server/chttp2_server.c","file_line":245,"referenced_errors":
[{"created":"@1513990687.907882392","description":"Failed to add any wildcard listeners","file":"external/grpc/src/core/lib/iomgr/tcp_server_posix.c","file_line":338,"referenced_errors":
    [{"created":"@1513990687.907869775","description":"Unable to configure socket","fd":7,"file":"external/grpc/src/core/lib/iomgr/tcp_server_utils_posix_common.c","file_line":200,"referenced_errors":
        [{"created":"@1513990687.907859814","description":"OS Error","errno":98,"file":"external/grpc/src/core/lib/iomgr/tcp_server_utils_posix_common.c","file_line":173,"os_error":"Address already in use","syscall":"bind"}]},
        {"created":"@1513990687.907881598","description":"Unable to configure socket","fd":7,"file":"external/grpc/src/core/lib/iomgr/tcp_server_utils_posix_common.c","file_line":200,"referenced_errors":
            [{"created":"@1513990687.907879042","description":"OS Error","errno":98,"file":"external/grpc/src/core/lib/iomgr/tcp_server_utils_posix_common.c","file_line":173,"os_error":"Address already in use","syscall":"bind"}]}]}]}

错误似乎很明显:gRPC尝试连接的端口已在使用中。但是,我使用
netstat-tulpn
验证了没有其他进程正在使用这些端口,因此我不理解gRPC为什么抱怨它们已经在使用。此外,如果我创建一个更低级的示例,手动创建
ClusterSpec
Server
,那么主控人员和工作人员可以很好地沟通,一切都按预期进行。有没有人能提供一些关于如何进一步调试的建议,或者指出我哪里出了问题?我相信这一切都有一个简单的解释。如果有帮助的话,我可以包含来自
gRPC
的更多消息。

如果其他人有这个问题,并且发现这个问题,因为他们也在使用gRPC,当我遇到这个问题时,问题是由于一个应用程序同时侦听了gRPC端口和http端口

我意外地将http端口配置为grpc端口,因此应用程序尝试使用同一端口两次