我弄清楚我的问题是什么。
的
TL; DR
</强>
:首席需要了解
所有
变量以初始化它们
所有
。非首席工作人员无法创建自己的变量。
我正在转换一个旧程序,其中所有工作人员都有一些自变量,但需要共享一些变量(我使用ZMQ传递这些)到分布式TensorFlow设置,并忘记初始化所有工作人员的所有变量。我有类似的东西
# Create worker specific variable
with tf.variablescope(“world{}”.format(worker_id)):
w1 = tf.get_variable(“weight”, shape=(input_dim, hidden_dim), dtype=tf.float32, initializer=tf.truncated_normal_initializer())
</code>
而不是做这样的事情:
# Create all worker specific variables
allw1 = {}
for worker in worker_cnt:
with tf.variable_scope(“world{}”.format(worker_id)):
all_w1[worker] = tf.get_variable(“weight”, shape=(input_dim, hidden_dim), dtype=tf.float32, initializer=tf.truncated_normal_initializer())
grab worker specific variable
w1 = all_w1[worker_id]
</code>
至于错误……
我怀疑这导致一些工人死于此
Master init: Unavailable:
上面的错误信息,因为主管从来不知道工人想要创建的变量。
我没有一个可靠的解释为什么设备不可用(第三)错误没有找到该设备,但我认为它再次,因为只有主人可以创建它,他不知道新的变量。
第一个错误似乎是因为计算机在失败后还没准备好说话,因为我在修复后没有看到错误。如果我杀了一个工人并重新启动他,我仍然会看到它,但如果它们一起启动它似乎不是问题。
无论如何,我希望如果有人在以后遇到同样的错误,这会有所帮助。