2017-07-31 68 views
2

我對Keras與其他TF包裝(如Tensorpack)的培訓性能有疑問。TF包裝:Keras與Tensorpack的性能

a Q&A session,Keras的作者說,包裝內附送的性能沒有影響:

Keras能夠構建一個簡單,快捷的方式,並在TensorFlow火車模型,在性能沒有影響,因爲該機型仍然由相同的TensorFlow引擎運行。

在另一方面雖然,Tensorpack github聲稱它比Keras快2倍,即使一個小小的CNN:

Tensorpack教練幾乎總是比基於feed_dict包裝速度更快。即使在一個微小的CNN例子中,訓練運行速度比同等Keras代碼快兩倍。

所以現在我想知道以下幾點:誰是對的? 對於我來說,訓練中兩個因素是非常重要的。

+1

你自己試過嗎? –

+0

是的,我一直在使用Keras(雖然從未使用過Tensorpack)。我只關心性能,因爲我有4D數據集,數百GB,一個'圖像'是11x13x18x50。目前,我在單個節點中使用Keras TF後端和4個GTX1080(現在多節點不能很好地擴展)。 – 0vbb

回答

0

我的初步答案顯然是錯誤的,但我不能刪除它,因爲它是被接受的答案。見@ppwwyyxx's answer

+0

感謝您鏈接到PR!很高興知道這個問題是已知的。所以就我所知,用numpy數組開銷的Python是個問題。理想情況下,Keras支持原生TF張量輸入,可以在C++中執行,而不是在每個訓練步驟中使用py - > C。 如上所述,我的數據輸入由數百個帶有11x13x18x50分檔的GB組成,目前我正在使用hdf5作爲數據格式。不知道如果TFRecords會產生更好的性能。 – 0vbb

+1

@ 0vbb我自己對TFRecords沒有多少經驗,但我的印象是,他們的好處在更大的投入下更明顯,所以我猜你的情況可能是一個很好的嘗試。但是,我不認爲如果你能獲得顯着的收益,事先就沒有可靠的辦法。 – jdehesa

+0

你們看着錯誤的一點!性能差異來自聰明,高效和並行預取vs feed_dict。在tensorpack中,您可以輕鬆使用所有CPU準備數據,以確保每個更新步驟都有訓練數據可用,幾乎沒有延遲。所以這個答案肯定是錯誤的和誤導的。 – Patwie

6

我是tensorpack的作者。 主要性能改進的原因在文檔的輸入管道頁面中進行了總結:http://tensorpack.readthedocs.io/en/latest/tutorial/input-source.html 這些參數適用於單GPU訓練案例。對於多GPU培訓,我們有更多的性能改進來匹配Google的基準代碼。

@jdehesa的回答是不正確的,我們從來沒有使用TFRecord來讀取數據(儘管它能夠這樣做,我沒有看到太多優勢)。你可以通過純Python讀取所有內容並獲得這個速度。另外,2x加速可能有點過時,我知道Keras一直在減少框架開銷方面進行了改進。