我有一台带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?
答案 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。它会起作用。