如何解释tensorflow中的Poolallocator消息?

在训练tensorflow seq2seq模型时,我看到以下消息:

 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:27282获得请求后,put_count = 9311 evicted_count = 1000 eviction_rate = 0.1074,不满意的分配率= 0.699032
 I tensorflow / core / common_runtime / gpu / pool_allocator.cc:239]将pool_size_limit_从100提升到110
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:在13715获得请求之后,put_count = 14458 evicted_count = 10000 eviction_rate = 0.691659,不满意的分配率= 0.675684
 I tensorflow / core / common_runtime / gpu / pool_allocator.cc:239]将pool_size_limit_从110提升到121
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:6965请求后,put_count = 6813 evicted_count = 5000 eviction_rate = 0.733891,不满意的分配率= 0.741421
 I tensorflow / core / common_runtime / gpu / pool_allocator.cc:239]将pool_size_limit_从133提升到146
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:获取44个请求后,put_count = 9058 evicted_count = 9000 eviction_rate = 0.993597,不满意的分配率= 0
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:46请求后,put_count = 9062 evicted_count = 9000 eviction_rate = 0.993158,不满意的分配率= 0
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:获得4个请求之后,put_count = 1029 evicted_count = 1000 eviction_rate = 0.971817,不满意的分配率= 0
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:获得2个请求后,put_count = 1030 evicted_count = 1000 eviction_rate = 0.970874,不满意的分配率= 0
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:获得44个请求后,put_count = 6074 evicted_count = 6000 eviction_rate = 0.987817,不满意的分配率= 0
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:获取12个请求后,put_count = 6045 evicted_count = 6000 eviction_rate = 0.992556,不满意的分配率= 0
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:获得2个请求后,put_count = 1042 evicted_count = 1000 eviction_rate = 0.959693,不满意的分配率= 0
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:44请求后,put_count = 6093 evicted_count = 6000 eviction_rate = 0.984737,不满意的分配率= 0
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:获取请求后,put_count = 1069 evicted_count = 1000 eviction_rate = 0.935454,不满意的分配率= 0
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:17722获得请求后,put_count = 9036 evicted_count = 1000 eviction_rate = 0.110668,不满意的分配率= 0.550615
 I tensorflow / core / common_runtime / gpu / pool_allocator.cc:239]将pool_size_limit_从792提高到871
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:获得6个请求后,put_count = 1093 evicted_count = 1000 eviction_rate = 0.914913,不满意的分配率= 0
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:获得6个请求后,put_count = 1101 evicted_count = 1000 eviction_rate = 0.908265,不满意的分配率= 0
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:3224获得请求后,put_count = 4684 evicted_count = 2000 eviction_rate = 0.426985,不满意的分配率= 0.200062
 I tensorflow / core / common_runtime / gpu / pool_allocator.cc:239]将pool_size_limit_从1158提升到1273
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:在17794获得请求后,put_count = 17842 evicted_count = 9000 eviction_rate = 0.504428并且不满意的分配率= 0.510228
 I tensorflow / core / common_runtime / gpu / pool_allocator.cc:239]将pool_size_limit_从1400提高到1540
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:得到31个请求后,put_count = 1185 evicted_count = 1000 eviction_rate = 0.843882,不满意的分配率= 0
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:获得40个请求后,put_count = 8209 evicted_count = 8000 eviction_rate = 0.97454,不满意的分配率= 0
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:0请求后,put_count = 2272 evicted_count = 2000 eviction_rate = 0.880282,不满意的分配率= -nan
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:0请求后,put_count = 2362 evicted_count = 2000 eviction_rate = 0.84674,不满意的分配率= -nan
 W tensorflow / core / common_runtime / gpu / pool_allocator.cc:227] PoolAllocator:获取38个请求后,put_count = 5436 evicted_count = 5000 eviction_rate = 0.919794,不满意的分配率= 0

这是什么意思,这是否意味着我有一些资源分配问题? 我在Titan X 3500+ CUDA上运行,12 GB的GPU

TensorFlow有多个内存分配器,内存将以不同的方式使用。 他们的行为有一些适应性方面。

在您的具体情况下,由于您使用的是GPU,因此有一个用于CPU内存的PoolAllocator,它已预先向GPU注册以实现快速DMA。 预计将从CPU转移到GPU的张量将从该池中分配。

PoolAllocators试图通过保持一个被分配和释放的数据块池来分摊调用更昂贵的底层分配器的成本,这些数据块可以立即重用。 他们的默认行为是慢慢增长,直到驱逐率下降到某个常数以下。 (驱逐率是免费调用的比例,我们将一个未使用的块从池返回到底层池,以便不超过大小限制。)在上面的日志消息中,您会看到显示池的“提升pool_size_limit_”行规模在增长。 假设你的程序实际上有一个稳定的状态行为,它需要最大的区块集合,这个池将会增长以适应它,然后不再增长。 它的行为是这样的,而不是简单地保留所有分配的块,所以只有在程序启动时很less需要的大小不太可能保留在池中。

如果内存不足,这些消息应该只是一个令人担忧的原因。 在这种情况下,日志消息可能有助于诊断问题。 还要注意,只有在内存池已经增长到适当的大小之后才能达到峰值执行速度。