tensorflow 同时使用 2 个 GPU

tensorflow using 2 GPU at the same time

首先,我还是张量流的新手。我正在使用 v0.9 并尝试使用我们拥有的机器中安装的 2 个 GPU。所以,这是正在发生的事情:

  1. 当我在机器上启动 training data 脚本时,它只能在 2 个 GPU 之一上运行。默认取第一个 gpu:0/.
  2. 当我在第二个 GPU 上启动另一个 training data 脚本到 运行 时(在完成所需的更改后,即 with tf.device..),同时保持第一个进程 运行ning 开启第一个 GPU,tensorflow 杀死第一个进程,只使用第二个 GPU 运行 第二个进程。所以似乎tensorflow一次只允许一个进程?

我需要的是:能够在 相同 机器上安装的 2 个不同 GPU 上为 2 个不同模型启动两个单独的 training data 脚本。在这种情况下我错过了什么吗?这是预期的行为吗?我应该在本地机器上通过分布式张量流来这样做吗?

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

要解决此问题,请让 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 上。

So it seems only one process at a time is allowed by tensorflow?

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

Is this the expected behavior? Should I go through distributed tensorflow on a local machine to do so?

这不是 预期的行为,这可能是一个问题,因为我完全有可能完成您想要做的事情(我目前正在 运行 处理它)。


首先,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