2016-02-02 7 views
60

Ben şu mesajları görürsünüz bir tensorflow seq2seq modeli eğitim sırasında:Tensorflow'da Poolallocator mesajları nasıl yorumlanır?

 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 27282 get requests, put_count=9311 evicted_count=1000 eviction_rate=0.1074 and unsatisfied allocation rate=0.699032 
I tensorflow/core/common_runtime/gpu/pool_allocator.cc:239] Raising pool_size_limit_ from 100 to 110 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 13715 get requests, put_count=14458 evicted_count=10000 eviction_rate=0.691659 and unsatisfied allocation rate=0.675684 
I tensorflow/core/common_runtime/gpu/pool_allocator.cc:239] Raising pool_size_limit_ from 110 to 121 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 6965 get requests, put_count=6813 evicted_count=5000 eviction_rate=0.733891 and unsatisfied allocation rate=0.741421 
I tensorflow/core/common_runtime/gpu/pool_allocator.cc:239] Raising pool_size_limit_ from 133 to 146 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 44 get requests, put_count=9058 evicted_count=9000 eviction_rate=0.993597 and unsatisfied allocation rate=0 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 46 get requests, put_count=9062 evicted_count=9000 eviction_rate=0.993158 and unsatisfied allocation rate=0 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 4 get requests, put_count=1029 evicted_count=1000 eviction_rate=0.971817 and unsatisfied allocation rate=0 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 2 get requests, put_count=1030 evicted_count=1000 eviction_rate=0.970874 and unsatisfied allocation rate=0 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 44 get requests, put_count=6074 evicted_count=6000 eviction_rate=0.987817 and unsatisfied allocation rate=0 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 12 get requests, put_count=6045 evicted_count=6000 eviction_rate=0.992556 and unsatisfied allocation rate=0 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 2 get requests, put_count=1042 evicted_count=1000 eviction_rate=0.959693 and unsatisfied allocation rate=0 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 44 get requests, put_count=6093 evicted_count=6000 eviction_rate=0.984737 and unsatisfied allocation rate=0 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 4 get requests, put_count=1069 evicted_count=1000 eviction_rate=0.935454 and unsatisfied allocation rate=0 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 17722 get requests, put_count=9036 evicted_count=1000 eviction_rate=0.110668 and unsatisfied allocation rate=0.550615 
I tensorflow/core/common_runtime/gpu/pool_allocator.cc:239] Raising pool_size_limit_ from 792 to 871 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 6 get requests, put_count=1093 evicted_count=1000 eviction_rate=0.914913 and unsatisfied allocation rate=0 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 6 get requests, put_count=1101 evicted_count=1000 eviction_rate=0.908265 and unsatisfied allocation rate=0 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 3224 get requests, put_count=4684 evicted_count=2000 eviction_rate=0.426985 and unsatisfied allocation rate=0.200062 
I tensorflow/core/common_runtime/gpu/pool_allocator.cc:239] Raising pool_size_limit_ from 1158 to 1273 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 17794 get requests, put_count=17842 evicted_count=9000 eviction_rate=0.504428 and unsatisfied allocation rate=0.510228 
I tensorflow/core/common_runtime/gpu/pool_allocator.cc:239] Raising pool_size_limit_ from 1400 to 1540 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 31 get requests, put_count=1185 evicted_count=1000 eviction_rate=0.843882 and unsatisfied allocation rate=0 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 40 get requests, put_count=8209 evicted_count=8000 eviction_rate=0.97454 and unsatisfied allocation rate=0 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 0 get requests, put_count=2272 evicted_count=2000 eviction_rate=0.880282 and unsatisfied allocation rate=-nan 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 0 get requests, put_count=2362 evicted_count=2000 eviction_rate=0.84674 and unsatisfied allocation rate=-nan 
W tensorflow/core/common_runtime/gpu/pool_allocator.cc:227] PoolAllocator: After 38 get requests, put_count=5436 evicted_count=5000 eviction_rate=0.919794 and unsatisfied allocation rate=0 

Ne anlama geliyor

, ben bazı kaynak tahsisi sorunlar yaşıyorum demektir? Titan X 3500+ CUDA üzerinde çalışıyorum, 12 GB GPU

cevap

75

TensorFlow, farklı yollarla kullanılacak bellek için birden çok bellek ayırıcısına sahiptir. Davranışlarının bazı uyarlanabilir yönleri vardır.

Özel durumunuzda, bir GPU kullandığınız için, hızlı DMA için GPU ile önceden kaydedilmiş CPU belleği için bir PoolAllocator var. CPU'dan GPU'ya aktarılması beklenen bir tensör, örneğin, bu havuzdan tahsis edilecektir.

PoolAllocators, daha hızlı bir temel ayırıcıyı arama maliyetini, yeniden kullanım için uygun olan serbest bırakılmış serbest bırakılmış bir havuzun etrafında tutarak tutmaya çalışır. Varsayılan davranışları, tahliye oranı bazı sabitlerin altına düşene kadar yavaşça büyümektir. (Tahliye oranı, boyut sınırını aşmamak için havuzdan alttaki havuza geri döndüğümüzde ücretsiz aramaların oranıdır.) Yukarıdaki günlük mesajlarında, havuzu gösteren "Pool_size_limit_" satırlarını görebilirsiniz. boyut büyüyor. Programınızın, ihtiyaç duyduğu en büyük boyutta bir toplama topluluğuna sahip sabit bir durum davranışına sahip olduğunu varsayarsak, havuz bunu karşılamak için büyüyecek ve daha fazla büyümeyecektir. Bu, sadece, nadiren ihtiyaç duyulan veya sadece program başlangıcı sırasında, havuzda tutulma olasılığının daha düşük olması için tahsis edilen tüm parçaları saklamak yerine, bu şekilde davranır.

Bu mesajlar, yalnızca bellek tükendiğinde endişelenmeniz gereken bir neden olmalıdır. Böyle bir durumda, günlük mesajları sorunu teşhis etmeye yardımcı olabilir. Ayrıca, tepe yürütme hızının sadece bellek havuzları uygun boyuta ulaştıktan sonra elde edilebileceğini unutmayın.

+8

Yanıt veren, ancak GPU mimarilerinde uzmanlık sahibi olmayan insanlar için bunu anlamak kolay değil. Yine de teşekkürler! – stpk

+0

buna dayanarak şu soruya cevap verebilirsiniz: http://stackoverflow.com/questions/35171405/how-to-determine-maximum-batch-size-for-a-seq2seq-tensorflow-rnn-training-model – stackit

+0

As Bir ek, [kod burada] (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/common_runtime/gpu/pool_allocator.cc#L213) anlamak için yararlı olacağını düşünüyorum. TF'nin tahliye oranını rutin olarak kontrol edeceği ve tahliye oranının ve doyurulmamış oranın belirli bir sayıda (0,003 orada) üzerinde olması halinde limit artacaktır. –