我制作了一个具有相对常见操作的张量流模型(除了一些tf.where和索引处理之外),但是用不同的输入形状(模型中有许多未定义的张量形状)来调用它.
CPU上的一切正常.但是当你使用GPU时,RAM的使用(不是GPU内存,CPU的内存)稳步增加,以填满机器的256GB并自行杀死.
在此过程中,我得到了通常的消息:
2017-03-17 16:42:22.366601: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:247] PoolAllocator: After 18347 get requests, put_count=18345 evicted_count=1000 eviction_rate=0.0545108 and unsatisfied allocation rate=0.0763068
2017-03-17 16:42:22.366680: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:259] Raising pool_size_limit_ from 4385 to 4823
Run Code Online (Sandbox Code Playgroud)
据我所知,GPU的某些DMA内存的池分配器.问题是它似乎永远不会满足它所获得的驱逐率,并且永远不会为自己分配更多的空间.
这是正常的行为吗?他们是控制这个的方法吗?现在,在耗尽内存之前,我无法训练模型超过1小时.
注意:我使用TF的nigthly构建版本,因为我当前模型运行所需的一些错误修正.此外,在训练期间没有添加任何操作,因为我打电话tf.get_default_graph().finalize()
编辑:尝试运行tcmalloc而不是malloc.没有帮助.我还使用了内存分析器,并没有说存在内存泄漏,tcmalloc的内存使用率稳定在500MB,即使内存使用率top更高且程序最终运行OOM.那么为什么tcmalloc剖析器不同意我看到的内存使用情况top呢?
编辑2:重新编译TF与改变硬编码参数,使其"工作".看到这里