具有多个gpu的分布式张量流

时间:2016-10-12 05:40:41

标签: tensorflow distributed

似乎tf.train.replica_device_setter不允许指定使用的gpu。

我想做的事情如下:

 with tf.device(
   tf.train.replica_device_setter(
   worker_device='/job:worker:task:%d/gpu:%d' % (deviceindex, gpuindex)):
     <build-some-tf-graph>

2 个答案:

答案 0 :(得分:7)

如果你的参数没有分片,你可以使用简化版replica_device_setter来完成,如下所示:

def assign_to_device(worker=0, gpu=0, ps_device="/job:ps/task:0/cpu:0"):
    def _assign(op):
        node_def = op if isinstance(op, tf.NodeDef) else op.node_def
        if node_def.op == "Variable":
            return ps_device
        else:
            return "/job:worker/task:%d/gpu:%d" % (worker, gpu)
    return _assign

with tf.device(assign_to_device(1, 2)):
  # this op goes on worker 1 gpu 2
  my_op = tf.ones(())

答案 1 :(得分:0)

我没有查看以前的版本,但在Tensorflow 1.4 / 1.5中,您可以在GenerateDocumentationFile中指定设备。

请参阅.csproj第199-202行:

replica_device_setter(worker_device='job:worker/task:%d/gpu:%d' % (FLAGS.task_index, i), cluster=self.cluster)

感谢@Yaroslav Bulatov提供的代码,但他的协议与tensorflow/python/training/device_setter.py不同,在某些情况下可能会失败。