如何对分布式TensorFlow进行分析?

时间:2018-01-05 22:17:38

标签: tensorflow multi-gpu

我在TF中有一个简单的分布式设置(每一步大致对应一个tf.Session.run调用)

  1. Parent通过与唯一父任务的目标的会话对设备'/job:parent'上的变量进行更改。
  2. 几个子进程tf.assign父变量到'/job:child/task:<child index>'上的局部变量。
  3. 然后,每个子进程在自己的TF设备上使用自己的局部变量进行一系列计算。
  4. 孩子们都有自己的主会议,与个人儿童任务目标相关联。

    我的设置是单个GPU或多个(2)GPU,它们在父级和子级之间进行分片。儿童的总数远远超过总GPU(内存和计算密度足够小,以至于单个子任务无法完全利用GPU)。

    即使有很多孩子,我仍然发现单GPU和多GPU的GPU利用率都很低。我怀疑它是assign操作。这些是本地GPU,因此应该可以通过DMA,一个vanilla GPU副本(如果在同一GPU上)或nccl执行assign op,但我担心默认情况下TF将通过本地传输数据gRPC套接字。

    我有几个问题:

    1. 我的数据传输理解是否正确?
    2. TF profiler似乎是针对单进程工作流,在单个会话中测量操作何时执行等。如何组合来自多个远程会话的日志? tf.RunMetadata会捕获gRPC延迟吗?
    3. 如果我要在父会话上运行所有tf.assign操作,在每个子索引上执行每个副本,这会避免gRPC调用吗?

0 个答案:

没有答案