2016-03-31 144 views
6

我目前在TensorFlow中實現了YOLO,我對有多少內存正在使用感到有點驚訝。在我的GPU上,我可以使用批量大小爲64的Darknet框架來訓練YOLO。在TensorFlow上,我只能使用批量大小6來完成,而我已經用完了8個內存。對於測試階段,我可以以批量大小64運行而不會耗盡內存。TensorFlow:如何測量每個張量需要多少GPU內存?

  1. 我想知道如何計算每張張量消耗了多少內存?默認情況下所有張量都保存在GPU中?我可以簡單地計算總內存消耗爲形狀* 32位嗎?

  2. 我注意到,因爲我使用的是動量,所以我的張量也有/Momentum張量。那也可以使用大量的內存嗎?

  3. 我用一個方法distorted_inputs來擴充我的數據集,這與CIFAR-10 tutorial中定義的方法非常相似。難道這部分會佔用大量的記憶嗎?我相信Darknet會在CPU中進行修改。

回答

6

現在1258已經關閉,您可以通過導入TensorFlow之前設置環境變量來使Python中存儲日誌記錄:

import os 
os.environ['TF_CPP_MIN_VLOG_LEVEL']='3' 
import tensorflow as tf 

會有記錄的很多爲這樣的結果。你需要grep結果來找到合適的行。例如:

grep MemoryLogTensorAllocation train.log 
+0

這應該是*接受*答案now – Wontonimo

+0

以及這是在Python中,但我怎樣才能抑制所有登錄張量流cpp –

0

查看此(commit)中的說明。 內存分配是原始信息,雖然它需要一個腳本來以易於閱讀的形式收集信息。

+0

感謝您的快速回復。我有點困惑如何使用python設置VLOG?能否請你幫忙?謝謝! – Clash

+0

什麼是「MemoryLogTensorOutput」? – Clash

7

對不起,回覆緩慢。不幸的是,現在設置日誌級別的唯一方法是編輯tensorflow/core/platform/logging.h並用例如重新編譯。

#define VLOG_IS_ON(lvl) ((lvl) <= 1) 

有一個bug打開1258來更好地控制日誌記錄。

MemoryLogTensorOutput在每次操作執行結束時記錄條目,並指示保存操作輸出的張量。瞭解這些張量是有用的,因爲直到下游操作系統消耗張量,內存纔會被釋放,這可能會在很長的時間內出現在大圖中。