tensorflow同时使用2个GPU

May*_*tro 5 multi-gpu tensorflow tensorflow-gpu

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

  1. 当我training data在机器上启动脚本时,它仅适用于2个GPU中的一个.它默认采用第一个gpu:0/.
  2. 当我启动另一个training data脚本在第二个GPU上运行(在完成所需的更改之后with tf.device..),同时保持第一个进程在第一个GPU上运行时,tensorflow会杀死第一个进程并仅使用第二个GPU来运行第二个进程.所以似乎张量流一次只允许一个进程?

我需要的是:能够training data同一台机器上安装的2个不同的GPU上为2个不同的模型启动两个单独的脚本.我在这种情况下遗漏了什么吗?这是预期的行为吗?我应该在本地计算机上执行分布式tensorflow吗?

nes*_*uno 7

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

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

CUDA_VISIBLE_DEVICES=0 python script_one.py
CUDA_VISIBLE_DEVICES=1 python script_two.py
Run Code Online (Sandbox Code Playgroud)

在这两个script_one.pyscript_two.py使用tf.device("/gpu:0")的设备放置在它看到的唯一的GPU.


plt*_*rdy 6

如此看来张量流一次只允许一个进程吗?

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

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

这不是预期的行为,可能有问题,因为您要执行的操作完全有可能(我当前正在运行)。


首先,CUDA使用一个环境变量CUDA_VISIBLE_DEVICE,您可以猜测它为会话设置了可见的GPU。

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

单GPU进程(#1):

export CUDA_VISIBLE_DEVICE=0
./train.py
Run Code Online (Sandbox Code Playgroud)

单GPU进程(#2):

export CUDA_VISIBLE_DEVICE=1
./train.py
Run Code Online (Sandbox Code Playgroud)

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

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

双GPU流程:

export CUDA_VISIBLE_DEVICE=0,1
./train.py
Run Code Online (Sandbox Code Playgroud)

甚至:

CPU进程(禁用GPU):

export CUDA_VISIBLE_DEVICE=
./train.py
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你
pltrdy