内積計算のために 2 つの大きな配列を GPU メモリにコピーするこの単純なコードを実行しています。
import numpy as np
import theano
import theano.tensor as T
a = np.asarray(np.random.uniform(-1,1, (10000,40000)), dtype=np.float32)
b = np.asarray(np.random.uniform(-1,1, (40000,20000)), dtype=np.float32)
aa = theano.shared(a)
bb = theano.shared(b)
x = T.matrix()
y = T.matrix()
dd = T.dot(x,y)
ddd = theano.function([], dd, givens=[(x,aa), (y,bb)])
ddd()
ただし、(Spyder で) コードを実行するたびに、これらの共有変数に割り当てられた GPU メモリが解放されないようです。
12GB の RAM で Titan-X を使用していますが、このコードは 2 回しか実行できません。3 回目は次のエラーが発生します。
MemoryError: ('Error allocating 3200000000 bytes of device memory (CNMEM_STATUS_OUT_OF_MEMORY).', "you might consider using 'theano.shared(..., borrow=True)'")
ここに私のtheanorcファイルがあります:
[blas]
ldflags =
[nvcc]
flags=-LC:\Anaconda\libs
compiler_bindir=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
[global]
device = gpu0
floatX = float32
print_active_device = True
optimizer_including = cudnn
allow_gc = True
[lib]
cnmem = 0.8
[dnn]
enabled = True
conv.algo_fwd = time_on_shape_change
conv.algo_bwd_filter = time_on_shape_change
conv.algo_bwd_data = time_on_shape_change
nvidia-smi で GPU メモリの使用状況を監視していますが、3 つのコードを実行した後、12GB のメモリがすべて消費されていることがわかります。