Я пытаюсь распределить простое вычисление 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()
Программа работает на локальном хосте с задачами, запущенными в разных портах.