在此post中,有人提到:
此外,工作者和ps设备之间没有内置的区别 - 它只是一个变量被分配给ps设备的约定,和 ops被分配给工作人员设备。
在此post中,有人提到:
TL; DR:TensorFlow对"参数服务器"没有任何了解,但是 相反,它支持在多个设备上运行图形 不同的过程。其中一些进程具有名称的设备 从
"/job:ps"
开始,这些包含变量。工人开车 培训过程,当他们运行train_op
他们将导致 在"/job:ps"
设备上进行工作,这将更新共享 变量
问题:
ps
中的变量是否驻留在CPU或GPU上?此外,如果"/job:ps"
驻留在CPU或GPU上,是否有任何性能提升?答案 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
将节点固定到设备,则占位符会将其放置在该设备上。Tensorflow whitepaper还描述了一个动态布局器,它更复杂,但它现在不属于tensorflow的开源版本。