基于外部产品的Conv滤波器消耗不成比例的高内存

时间:2017-01-07 02:18:23

标签: memory-leaks tensorflow

最小可重复的示例在此github gist中。问题是内存使用量过大。

我修改了带有tensorflow的cifar10示例,使用3个向量的外积作为卷积层的权重。此更改可在此part of the code中看到。

为简单起见,我删除了所有参数训练操作甚至丢失计算。当前模型只反复计算logits(正向传递)。 未修改的代码(可以通过将use_outerp标志设置为False来执行)使用大约.4 GB RAM 而修改后的代码(使用向量的外积作为卷积权重张量)使用了不成比例的高5.6 GB RAM。

知道为什么会这样吗? 我对于为什么会发生这种情况的直觉是,可能每次需要转换滤波器时都会执行外部产品操作,而不是在每次前向传递中只执行一次。这是真的吗?有办法解决这个问题吗?

重现的步骤:

运行默认版本的代码(内存不足):

python train.py --use_outerp='False'

运行修改后的代码版本(内存占用率高):

python train.py --use_outerp='True'

操作系统:

Ubuntu 14.04

已安装的CUDA和cuDNN版本:

没有,我正在使用TF的CPU版本。

python -c "import tensorflow; print(tensorflow.__version__)"的输出:

0.10.0rc0

建议使用tcmalloc here没有帮助。

0 个答案:

没有答案