tensorflow同时使用2个GPU

时间:2017-05-23 12:57:09

标签: tensorflow multi-gpu tensorflow-gpu

首先,我还是张量流的新手。我正在使用v0.9并试图使用我们拥有的机器中安装的2个GPU。那么,这是发生了什么:

  1. 当我在计算机上启动training data脚本时,它仅适用于2个GPU中的一个。它默认采用第一个gpu:0/
  2. 当我在第二个GPU上运行另一个training data脚本(在完成所需的更改,即with tf.device..之后),同时保持第一个GPU在第一个GPU上运行时,tensorflow会终止第一个进程并使用只有第二个GPU才能运行第二个进程。所以看来tensorflow一次只允许一个进程?
  3. 我需要的是:能够在相同计算机上安装的2个不同GPU上为2个不同模型启动两个单独的training data脚本。我在这种情况下遗漏了什么吗?这是预期的行为吗?我应该在本地计算机上执行分布式张量流吗?

2 个答案:

答案 0 :(得分:7)

Tensorflow尝试在它看到的每个GPU上分配一些空间。

要解决此问题,请让Tensorflow为每个脚本查看单​​个(和不同的)GPU:为此,您必须以这种方式使用环境变量CUDA_VISIBLE_DEVICES

CUDA_VISIBLE_DEVICES=0 python script_one.py
CUDA_VISIBLE_DEVICES=1 python script_two.py

script_one.pyscript_two.py中,使用tf.device("/gpu:0")将设备放置在它看到的唯一GPU上。

答案 1 :(得分:5)

  

所以看起来tensorflow一次只允许一个进程?

不。我的意思是,没有这样的限制。

  

这是预期的行为吗?我应该在本地计算机上执行分布式张量流吗?

这不是预期行为,可能会出现问题,因为我完全可以做到(我目前正在运行它)。

首先,CUDA使用环境变量CUDA_VISIBLE_DEVICE,正如您所猜测的那样,为会话设置可见的GPU。

这意味着,如果你想在不同的GPU上运行两个进程,更简单的方法是打开两个控制台并执行:

单GPU进程(#1):

export CUDA_VISIBLE_DEVICE=0
./train.py

单GPU进程(#2):

export CUDA_VISIBLE_DEVICE=1
./train.py

我的猜测是你的CUDA_VISIBLE_DEVICE以某种方式设置为O(或1),这确实会引起问题。

如果您想将两个GPU用于一个进程,则可以运行:

双GPU流程:

export CUDA_VISIBLE_DEVICE=0,1
./train.py

甚至:

CPU处理(禁用GPU):

export CUDA_VISIBLE_DEVICE=
./train.py

希望有帮助 pltrdy