0

内積計算のために 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 のメモリがすべて消費されていることがわかります。

4

0 に答える 0