工作人员和参数服务器在Distributed TensorFlow中的位置在哪里?

时间:2017-05-17 02:41:03

标签: tensorflow distributed-computing

在此post中,有人提到:

  

此外,工作者和ps设备之间没有内置的区别 -   它只是一个变量被分配给ps设备的约定,和   ops被分配给工作人员设备。

在此post中,有人提到:

  

TL; DR:TensorFlow对"参数服务器"没有任何了解,但是   相反,它支持在多个设备上运行图形   不同的过程。其中一些进程具有名称的设备   从"/job:ps"开始,这些包含变量。工人开车   培训过程,当他们运行train_op他们将导致   在"/job:ps"设备上进行工作,这将更新共享   变量

问题:

  1. ps中的变量是否驻留在CPU或GPU上?此外,如果"/job:ps"驻留在CPU或GPU上,是否有任何性能提升?
  2. 较低级别的库是否决定将变量或操作放在何处?

1 个答案:

答案 0 :(得分:1)

  

ps中的变量是驻留在CPU还是GPU上?此外,如果" / job:ps"还有任何性能提升吗?驻留在CPU或GPU上?

您可以将ps作业固定到其中(有例外情况,请参见下文),但将其固定到GPU是不切实际的。 ps实际上是存储参数和操作来更新它。 CPU设备可以拥有比GPU更多的内存(即主RAM),并且在梯度进入时足够快地更新参数。在大多数情况下,矩阵乘法,卷积和其他昂贵的操作由工作人员完成因此,在GPU上放置worker是有道理的。将ps放置到GPU上是浪费资源,除非ps作业正在做一些非常具体和昂贵的工作。

但是:Tensorflow当前没有整数变量的GPU内核,因此当Tensorflow尝试将变量i放在GPU#0上时,以下代码将失败:

with tf.device("/gpu:0"):
  i = tf.Variable(3)

with tf.Session() as sess:
  sess.run(i.initializer)   # Fails!

带有以下消息:

Could not satisfy explicit device specification '/device:GPU:0' 
because no supported kernel for GPU devices is available.

如果没有选择参数的设备,那么就是这种情况,因此对于参数服务器: only CPU

  

较低级别的库是否决定放置变量或操作的位置?

如果我的问题是正确的,那么节点放置规则非常简单:

  • 如果某个节点已放置在之前运行的图表中的设备上,则该节点将保留在该设备上。
  • 否则,如果用户通过tf.device将节点固定到设备,则占位符会将其放置在该设备上。
  • 否则,默认为GPU#0,如果没有GPU,则默认为CPU。

Tensorflow whitepaper还描述了一个动态布局器,它更复杂,但它现在不属于tensorflow的开源版本。