Как решить "tenorflow.python.framework.errors_impl.AbortedError: RecvTensor ожидает другое воплощение устройства" в Tensorflow - PullRequest
1 голос
/ 02 мая 2019

Я пытаюсь распределить простое вычисление Tensorflow на две машины в Amazon AWS.

Я запускаю следующую программу с аргументом командной строки 0 и 1 на машине 1 и машине 2, соответственно. Я получаю следующую ошибку: tensorflow.python.framework.errors_impl.AbortedError : RecvTensor expects a different device incarnation...Your worker job ... was probably restarted. Check your worker job for the reason why it was restarted. Однако я не перезагружал Машину 2.

Я использовал ping и nc, чтобы убедиться, что машина 2 действительно прослушивает назначенный порт.

import tensorflow as tf
import numpy as np
import sys

config = tf.ConfigProto(log_device_placement=True)
task_number = int(sys.argv[1])
cluster = tf.train.ClusterSpec({"local": ["localhost:2222", "<private_ip_of_machine_2>:2222"]})
server = tf.train.Server(cluster, job_name="local", task_index=task_number, config=config, start=True)

print("Starting server #{}".format(task_number))

tf.reset_default_graph()


r = 2
c = 2

if task_number == 0:
    with tf.device('/job:local/task:0'):
        v = tf.Variable(np.random.normal(0, 1, size=(r, c)), name="v")

    with tf.device('/job:local/task:1'):
        w = tf.matmul(v, v, name="w")

    with tf.device('/job:local/task:0'):
        sum = tf.reduce_sum(w, name="sum")


    sess = tf.Session("grpc://localhost:2222")
    print("Session Run Start")
    sess.run(tf.global_variables_initializer())
    print("Res: ", sess.run(sum))

    LOGDIR = "./tf_board_square/"
    writer = tf.summary.FileWriter(LOGDIR, sess.graph)
#writer.add_graph(sess.graph)

else:
    server.join()

Программа работает на локальном хосте с задачами, запущенными в разных портах.

1 Ответ

1 голос
/ 02 мая 2019

На самом деле, спецификация кластера была неверно определена.Вместо localhost мне пришлось указать IP-адрес машины 1 в спецификации.В противном случае машина 2 не может узнать адрес машины 1. Следовательно, я полагаю, что каждый сервер tf должен знать адрес всех других серверов.

cluster = tf.train.ClusterSpec({"local": ["ip_of_machine_2:2222", "<ip_of_machine_2>:2222"]})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...