【发布时间】:2016-01-12 05:37:15
【问题描述】:
我正在使用 theano 进行一些涉及大型(约 300,000 x 128)矩阵的计算。
theano函数在输出MemoryError后退出,类似于this question。
我认为这可能是因为大矩阵是一步一步处理的,每一步都会在内存中留下一个大的GpuArray(虽然形状和第一个相同)。
所以我的问题是:
对于具有相同形状和 dtype 的临时(非输出)变量,theano 是否会努力重用这些分配的内存?比如,每个数组形状都有一个池吗?
如果为 1,我可以检查函数图中的哪个节点重用内存吗?
虽然我知道shared 可以进行显式共享,但我怀疑使用它会使(已经很难)计算代码更难理解。
更新
这种情况的简化示例:
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的时候用的比较久吗?
谢谢!
【问题讨论】: