Python Theano(GPU)内存占用管理/调试
我用theano做了一些计算,涉及到一个大的(大约300000 x 128)矩阵 theano函数在输出Python Theano(GPU)内存占用管理/调试,python,theano,Python,Theano,我用theano做了一些计算,涉及到一个大的(大约300000 x 128)矩阵 theano函数在输出内存错误后退出,类似于 我认为这可能是因为大矩阵被一步一步地处理,每一步都会在内存中留下一个大的GpuArray(尽管形状与第一步相同) 所以我的问题是: 对于具有相同形状和数据类型的临时(非输出)变量,theano是否会努力重用这些分配的内存?例如,是否存在每个阵列形状的池 如果为1,我可以检查函数图中的哪个节点重用内存吗 虽然我知道有一些方法可以实现显式共享,但我怀疑使用它会使(已经很难的
内存错误后退出,类似于
我认为这可能是因为大矩阵被一步一步地处理,每一步都会在内存中留下一个大的GpuArray
(尽管形状与第一步相同)
所以我的问题是:
对于具有相同形状和数据类型的临时(非输出)变量,theano是否会努力重用这些分配的内存?例如,是否存在每个阵列形状的池
如果为1,我可以检查函数图中的哪个节点重用内存吗
虽然我知道有一些方法可以实现显式共享,但我怀疑使用它会使(已经很难的)计算代码更难理解
更新
这种情况的一个简化示例:
import theano
from theano import tensor as T
a0 = T.matrix() # the initial
# op1 op2 op3 are valid, complicated operations,
# whose output's shape are identical to a0's
a1 = op1(a0)
a2 = op2(a1)
a3 = op3(a2)
f = theano.function([a0], a3)
如果op1、op2、op3中的任何一个都不能按原样进行优化,
theano是否会尝试重用内存,例如a1
和a3
可能会“共享”
相同的地址,以减少内存占用,因为a1
不是
在执行op3
时使用时间更长
谢谢 您需要尽可能多地使用就地操作。在大多数情况下,这不在用户控制之下(当情况允许时,优化器会自动使用它们),但您可以做一些事情来鼓励用户使用它们
请查看有关此问题的文档:
请勿使用inc_子传感器
操作的就地
参数,如中所示。用户规范不支持就地运算符(优化器将在可能时自动应用它们)
您可以使用Theano帮助跟踪哪些操作正在使用内存
更新
我不是这方面的专家,但我相信Theano使用垃圾收集机制来释放不再需要的内存。这将在中讨论,谢谢,您的回答非常好且详细,现在我知道了另一个选项(进行就地操作):)。我已经更新了我的问题,请你看一下好吗?再次感谢!theano中提到的GC似乎是内部调用,而不是单个theano函数调用。