python - Theano (GPU) 内存占用管理/调试

标签 python theano

我正在使用 theano 进行一些涉及大型(约 300,000 x 128)矩阵的计算。

theano函数在输出MemoryError后退出,类似于this question .

我认为这可能是因为大矩阵是一步一步处理的,每一步都会在内存中留下一个大的GpuArray(尽管形状与第一个相同)。

所以我的问题是:

  1. 对于具有相同形状和数据类型的临时(非输出)变量,theano 是否会努力重用此类分配的内存?比如,每个数组形状都有一个池?

  2. 如果为 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 会尝试重用内存吗? a1a3 可能会“共享” 相同的地址,以减少内存占用,因为 a1 不是 op3 时使用时间更长?

谢谢!

最佳答案

您需要尽可能使用就地操作。在大多数情况下,这不受用户控制(在情况允许的情况下,优化器会自动使用它们),但您可以采取一些措施来鼓励它们的使用。

查看有关此问题的文档:

不要使用 inc_subtensor 操作的 inplace 参数,如 documentation 中所示。 。 docs also indicate用户规范不支持就地运算符(优化器将在可能的情况下自动应用它们)。

您可以使用 Theano 的 memory profiler帮助追踪哪些操作正在耗尽内存。

更新

我不是这方面的专家,但我相信 Theano 使用垃圾收集机制来释放不再需要的内存。 documentation. 对此进行了讨论。

关于python - Theano (GPU) 内存占用管理/调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33120123/

相关文章:

python - 如何让keras+theano使用>1个核心

python - 如何从嵌入层获取输出

python - 在 pylearn2 中使用 RBM 预训练 ANN

python color-logs(与其他库)配置问题

python - 编写 python 脚本以获取 GCP 中数据存储实体的内容

python - 如何在 nolearn、lasagne 中定义成本函数?

python - 在 theano 中使用 CUDA8

python - 为 emacs-jedi 安装 python 服务器

python - 如果元素以特定字符开头,则将其从列中的列表中删除

python - 将轮廓路径转换为 ​​svg 路径