TensorFlow具有多个内存分配器,用于将以不同方式使用的内存。他们的行为具有某些适应性方面。
在您的特定情况下,由于您使用的是GPU,因此有一个用于CPU内存的PoolAllocator已预先向GPU注册以实现快速DMA。例如,将从该池中分配预期从CPU转移到GPU的张量。
PoolAllocators试图通过保持符合立即重用条件的已分配然后释放的块的池周围来分摊调用更昂贵的基础分配器的成本。它们的默认行为是缓慢增长,直到逐出速度降到某个常数以下。 (收回率是免费呼叫所占的比例,在空闲呼叫中,我们将未使用的块从池中返回到基础池中,以便不超过大小限制。)在上面的日志消息中,您看到“ Raising pool_size_limit_”行,显示了该池规模不断扩大。假设您的程序实际上具有稳定状态的行为,并且具有所需的最大块数集合,则该池将增长以容纳该块,然后不再增长。它以这种方式工作,而不是简单地保留所有曾经分配的块,从而仅在极少数情况下或仅在程序启动期间需要的大小就不太可能保留在池中。
如果您的内存不足,这些消息仅应引起关注。在这种情况下,日志消息可能有助于诊断问题。还要注意,只有在内存池增长到适当的大小后才能达到峰值执行速度。
0
在训练tensorflow seq2seq模型时,我看到以下消息:
这是什么意思,是否意味着我遇到一些资源分配问题?在Titan X 3500+ CUDA和12 GB GPU上运行