在这个Tensorflow Distributed Training代码示例中,sess.run([train_op, global_step])
将被多次调用(在while循环中)。从执行DAG操作之前,Tensorflow首先需要将图形节点放置到某些设备(节点放置过程)。
在这种情况下,我想知道需要完成多少个节点放置过程。假设循环计数为N,Tensorflow sys是否仅执行节点放置?或执行节点放置 N次?
答案 0 :(得分:1)
节点的设备放置只发生一次。您可以使用tf.device
或tf.train.replica_device_setter
等指令控制设备展示位置。
由于tensorflow会按设备划分图形,添加recv并将节点发送到每个子图并执行其他设置,将这些节点替换为不同的设备是很昂贵的。但您仍然可以在调用session.run
之间更改图表。
修改强>
设备为an attribute of a node,由this function设置,并在构建图形时设置。当您使用tf.device
时,设备功能将被推送到堆栈,并且以下节点将调用堆栈中的设备功能以获取设备分配。它的实现可以在这里找到:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/framework/ops.py#L2880
(TensorFlow使用延迟执行。)在评估图形时,根据设备分配,它将是partitioned,子图将被发送到不同的设备以执行。