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