0

我正在运行这个简单的代码,它将两个大型数组复制到 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 的内存。

4

0 回答 0