此問題最初發佈於Github #3320。如果在那個線程中有更多關於原始問題的細節,並且體積龐大,我不希望在StackOverflow上重新發布,那麼從這裏開始會很好。這個問題的總結是當使用GPU比CPU處理TensorFlow圖時性能更慢。包含CPU/GPU時間軸(調試)用於評估。其中一條評論意見涉及到優化Graph以加快處理速度,並請求討論玩具示例。 「原始解決方案」是我的強化學習代碼,顯示性能下降,併爲社區討論和評估創建了一些已發佈的代碼。TensorFlow:圖形優化(GPU vs CPU性能)
我已經附上測試腳本以及一些原始數據,跟蹤文件& TensorBoard日誌文件,以加快任何審查。 CPUvsGPU testing.zip
由於此主題將使所有Tensorflow用戶受益,因此討論轉移到了StackOverflow。我希望發現的是優化已發佈圖形性能的方法。 GPU與CPU的問題可以分離出來,因爲它可以通過更高效的TensorFlow Graph解決。
我所做的就是拿我的原創解決方案,並剝離出「遊戲環境」。我用隨機數據代替它。在這個遊戲環境中,沒有創建/修改TensorFlow圖形。該結構嚴格遵循/利用nivwusquorum's Github Reinforcement Learning Example。
在2016年7月15日我做了一個「git拉」頭來Tensorflow。我在啓用和不啓用GPU的情況下執行Graph並記錄時間(參見附圖)。意想不到的結果是GPU的性能超過了CPU(這是最初的期望沒有得到滿足)。所以這個帶有支持庫的代碼「cpuvsgpu.py」在GPU上表現更好。所以我將注意力轉移到我的原始解決方案與已發佈的代碼之間可能會有所不同。我也更新頭至2016年7月17日。由於CPU & GPU與原始解決方案之間的整體差異比我看到47s CPU vs 71s GPU再次接近一週的時間有所提高。快速瀏覽一下新的Traces vs我的初始跟蹤,好像「摘要」可能已經改變了,但也可能有其他改進。
我試過其他2點的組合,以更好地反映原液如何運作。這些CPU負載很重(約60% - 70%),並且通過並行執行該腳本來模擬這些負載。另一種變化是增加「數據IO」,原始解決方案使用觀察列表來隨機選擇用於訓練的觀察值。該列表具有固定的上限,然後開始刪除列表中的第一個項目,同時追加新的項目。我想可能其中有一個是放慢數據流向GPU。不幸的是,這些版本都沒有使CPU的性能超過GPU。我還運行了一個快速的GPUTESTER應用程序,它可以執行大型矩陣乘法以獲得與任務大小的時間差異,並且如預期的那樣。
我真的很想知道如何改善這個圖表並減少小型OPS的數量。看起來這是大部分表現可能發生的地方。學習任何技巧將較小的操作符合併成較大的操作符而不會影響圖的邏輯(函數)會很好。
針對GPU性能爲7K比較X 7K MATMUL可以是這裏錯誤的度量。 IE中,我看到你最慢的操作需要<1ms,這意味着你的數據量很小,所以你可以在微小的數據大小上對GPU和CPU進行微型基準測試,以瞭解移動到的時候應該有多少收益(或損失) GPU –
我的7K x 7K數據集的主要用途更多的是確保GPU實際工作。所以對於大型任務來說,GPU很好。這對我來說更像是GPU的原始問題比GPU正確安裝並且CUDA編譯的CPU更慢的證明。 – mazecreator
然後網絡運行一批200×189到5層與Dropout()之間的每層。輸出層數爲140,120,100,80和3。 – mazecreator