我们可以在tensorflow GraphDef中看到Send节点和Receive节点吗?

时间:2016-10-31 17:44:04

标签: python tensorflow

我们可以在tensorflow GraphDef中看到发送节点和 Receive 节点,还是使用python API?

我尝试以下代码

import tensorflow as tf

with tf.device("/gpu:0"):
    x = tf.constant(1.0)
with tf.device("/gpu:1"):
    y = tf.constant(2.0)
with tf.device("/cpu:0"):
    sum = tf.add(x, y)

graph_def = tf.get_default_graph().as_graph_def()
print(graph_def)

graph_def中没有发送/ recv节点。是否有任何发送/ recv节点添加到图表中以便将xy传输到 cpu

1 个答案:

答案 0 :(得分:3)

send和recv节点仅在您第一次尝试执行图形时添加到图形中,调用tf.Session.run() ...实际上,获取的send和recv节点集合添加的内容取决于您在该呼叫中提供和提取的特定张量。

您可以将tf.RunOptions(output_partition_graphs=True)传递给Session.run()来查看在每个设备上执行的确切图表,包括send和recv节点,如下所示:

options = tf.RunOptions(output_partition_graphs=True)
metadata = tf.RunMetadata()

sess.run(..., options=options, metadata=metadata)

for partition_graph_def in metadata.partition_graphs:
    print partition_graph_def  # Contains all the nodes that ran on a single device.