我正在运行这个简单的代码,它将两个大型数组复制到 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,我只能运行此代码两次,第三次会产生以下错误:
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 的内存。