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