多个GPU的theanorc

时间:2016-11-25 05:15:27

标签: theano theano-cuda

我有一台带4个GPU的aws机器:

00:03.0 VGA compatible controller: NVIDIA Corporation GK104GL [GRID K520] (rev a1)
00:04.0 VGA compatible controller: NVIDIA Corporation GK104GL [GRID K520] (rev a1)
00:05.0 VGA compatible controller: NVIDIA Corporation GK104GL [GRID K520] (rev a1)
00:06.0 VGA compatible controller: NVIDIA Corporation GK104GL [GRID K520] (rev a1)

我的theanorc文件如下所示:

[global]
floatX = float32
device = gpu0

[lib]
cnmem = 1

当我打开一个jupyter笔记本并导入theano时,我得到以下内容(我假设只使用一个GPU):

Using Theano backend.
Using gpu device 0: GRID K520 (CNMeM is enabled with initial size: 95.0% of memory, cuDNN 5105)
/home/sabeywardana/anaconda3/lib/python3.5/site-packages/theano/sandbox/cuda/__init__.py:600: UserWarning: Your cuDNN version is more recent than the one Theano officially supports. If you see any problems, try updating Theano or downgrading cuDNN to version 5.

但是,如果我同时在同一台机器上打开第二个jupyter笔记本。然后我收到错误:

ERROR (theano.sandbox.cuda): ERROR: Not using GPU. Initialisation of device 0 failed:
initCnmem: cnmemInit call failed! Reason=CNMEM_STATUS_OUT_OF_MEMORY. numdev=1

ERROR (theano.sandbox.cuda): ERROR: Not using GPU. Initialisation of device gpu failed:
initCnmem: cnmemInit call failed! Reason=CNMEM_STATUS_OUT_OF_MEMORY. numdev=1

如果我手动更改我的.theanorc以使用gpu1,那么第二个jupyter笔记本工作正常。 所以问题是:有没有办法配置.theanorc才能获得可用的GPU?

2 个答案:

答案 0 :(得分:2)

您可以使用device=gpu,这将选择第一个可用的GPU。 但是,在您的情况下,GPU 0仍将被视为"可用" (它没有太多的内存,但仍然可以执行)。您可以使用nvidia-smi将GPU的计算模式设置为" Exclusive Thread",以便第一个笔记本"阻止"第一款独家使用的GPU,第二款笔记本将使用另一款。

另一种选择是在导入theano之前从笔记本内部更改THEANO_FLAGS环境变量。类似的东西:

import os

os.environ['THEANO_FLAGS'] = os.environ.get('THEANO_FLAGS', '') + ',' + 'device=gpu1'

import theano

答案 1 :(得分:1)

导入theano后无法更改gpu设备。

可能你可以试试这个 -

import os
os.system("THEANO_FLAGS='device=gpu0' python script_1.py")
os.system("THEANO_FLAGS='device=gpu1' python script_2.py")
os.system("THEANO_FLAGS='device=gpu1' python script_3.py")
os.system("THEANO_FLAGS='device=gpu1' python script_4.py")

如果您想从笔记本内部(更多程序设计)进行此操作,您可以使用以下代码段: -

import theano.sandbox.cuda
theano.sandbox.cuda.use("gpu0")

将其粘贴到每个笔记本并更改gpu ID。它会起作用。