10

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

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

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

4

2 回答 2

8

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 上。

于 2017-05-23T13:52:06.057 回答
6

所以似乎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

于 2017-05-23T13:57:19.010 回答