首先,我还是张量流的新手。我正在使用v0.9并试图使用我们拥有的机器中安装的2个GPU。那么,这是发生了什么:
training data
脚本时,它仅适用于2个GPU中的一个。它默认采用第一个gpu:0/
。training data
脚本(在完成所需的更改,即with tf.device..
之后),同时保持第一个GPU在第一个GPU上运行时,tensorflow会终止第一个进程并使用只有第二个GPU才能运行第二个进程。所以看来tensorflow一次只允许一个进程?我需要的是:能够在相同计算机上安装的2个不同GPU上为2个不同模型启动两个单独的training data
脚本。我在这种情况下遗漏了什么吗?这是预期的行为吗?我应该在本地计算机上执行分布式张量流吗?
答案 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.py
和script_two.py
中,使用tf.device("/gpu:0")
将设备放置在它看到的唯一GPU上。
答案 1 :(得分:5)
所以看起来tensorflow一次只允许一个进程?
不。我的意思是,没有这样的限制。
这是预期的行为吗?我应该在本地计算机上执行分布式张量流吗?
这不是预期行为,可能会出现问题,因为我完全可以做到(我目前正在运行它)。
首先,CUDA
使用环境变量CUDA_VISIBLE_DEVICE
,正如您所猜测的那样,为会话设置可见的GPU。
这意味着,如果你想在不同的GPU上运行两个进程,更简单的方法是打开两个控制台并执行:
export CUDA_VISIBLE_DEVICE=0
./train.py
export CUDA_VISIBLE_DEVICE=1
./train.py
我的猜测是你的CUDA_VISIBLE_DEVICE
以某种方式设置为O(或1),这确实会引起问题。
如果您想将两个GPU用于一个进程,则可以运行:
export CUDA_VISIBLE_DEVICE=0,1
./train.py
甚至:
export CUDA_VISIBLE_DEVICE=
./train.py
希望有帮助
pltrdy