2016-11-25 82 views
0

我有一個AWS機4個GPU:theanorc對多GPU

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筆記本上相同的ma同時也是中國人。然後,我得到的錯誤:

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

不知道我是誰。雖然嘗試。嘗試用gpu替換gpu0。讓我知道它是否有效。 –

+0

試過這個和'gpu?'沒有運氣。 –

+0

檢查我的答案。 –

回答

2

您可以使用device=gpu,它將選擇第一個可用的GPU。然而,在你的情況下,GPU 0仍然被認爲是「可用的」(它沒有太多的內存,但執行仍然是可能的)。您可以使用nvidia-smi將GPU的計算模式設置爲「獨佔線程」,以便第一臺筆記本電腦「封鎖」第一臺GPU以供其獨佔使用,第二臺筆記本電腦將使用另一臺筆記本電腦。

另一種選擇是在導入theano之前,從筆記本內部更改THEANO_FLAGS環境變量。例如:

import os 

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

import theano 
+0

我覺得不是從內部筆記本改變env變量,而是通過做 $ THEANO_FLAGS = device = gpuN jupyter筆記本來啓動筆記本。 – Sentient07

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。它會工作。