tensorflow 同时使用 2 个 GPU
tensorflow using 2 GPU at the same time
首先,我还是张量流的新手。我正在使用 v0.9 并尝试使用我们拥有的机器中安装的 2 个 GPU。所以,这是正在发生的事情:
- 当我在机器上启动
training data
脚本时,它只能在 2 个 GPU 之一上运行。默认取第一个 gpu:0/
.
- 当我在第二个 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.py
和 script_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
首先,我还是张量流的新手。我正在使用 v0.9 并尝试使用我们拥有的机器中安装的 2 个 GPU。所以,这是正在发生的事情:
- 当我在机器上启动
training data
脚本时,它只能在 2 个 GPU 之一上运行。默认取第一个gpu:0/
. - 当我在第二个 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.py
和 script_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