Tensorflow如何转储结果放置算法

62lalag4  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(159)

1.我对模型并行性很感兴趣,我读过Yaroslav Bulatov的代码,在这个例子中,我们应该划分模型(或在tensorflow 中称为Graph)手动分配到不同的分区(left_network & right_network)。所以,我想知道我是否必须手动进行分区,simple_placer.ccgraph_partition.cc对整个图做了什么,我还是不太清楚。
1.在我的思想(让我知道,如果任何thong错误):如果该图有8个分区(子图),可以看作8个作业和4个工人,如何将分区分配给工人可以通过:

  • 通过tf.device()的显式注解,或
  • 分布式培训,tf.train.replica_device_setter()

在参数服务器之间共享变量,否则将所有操作放在工作设备上
但是图是如何划分的呢?我想追踪子图(操作节点集)是什么样子的?我可以转储结果还是需要追踪/修改哪个代码文件?
请让我知道,如果任何概念是错误的或模糊的。我是一个新手这些,任何意见是赞赏。
1.在下面的代码中,matmul是op-node吗?它会被划分到不同的作业中吗?

y_ = tf.placeholder(tf.float32, [None, 10])
 x = tf.placeholder(tf.float32, [None, 784])
 W = tf.Variable(tf.zeros([784, 10]))
 b = tf.Variable(tf.zeros([10]))
 y = tf.matmul(x, W)  + b
hkmswyz6

hkmswyz61#

通过在调用tf.Session.run()时传递附加选项,可以获得放置算法的结果

# ...
y = tf.matmul(x, W) + b

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

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

# `metadata` now contains information about what happened during the `run()` call.
for partition in metadata.partition_graphs:

  # `partition` is a `tf.GraphDef` representing all the nodes that ran on a single
  # device. All nodes in `partition` have the same `device` value.
  device = partition.node[0].device

  for node in partition.node:
    # e.g. print each node or store it in a dictionary for further analysis.
    # ...

相关问题