TensorFlow 到底慢在哪裡?

很多公開測評文章對比 TensorFlow 與其它深度學習框架(主要是mxnet、caffe),各種場景下性能方面都是被吊打的。那麼tensorflow到底慢在哪裡?修過哪些地方就能夠有效提升性能?


單機不太小常見模型使用正確的情況下,TensorFlow不會比任何其他框架顯著的慢.

不顯著: 大概上下5%以內. 不存在"被吊打".

常見模型: 指沒有奇怪的層的CNN, 及標準的RNN/LSTM.

因為Google又不傻..

tensorflow/benchmarks 里的DGX1的數字剛出來的時候就是跟caffe2一樣的.

不常見模型: 各個框架用的kernel都不一樣了, 能跑多快主要看運氣. 具體點說,主要看開發者里有沒有人恰好認認真真優化了你也恰好在用的這個非主流的kernel.

太小的模型: 1秒能跑成百上千個iteration的時候, 框架overhead會體現出來.

多機: TensorFlow的多機scalability差. 好像最近正在試圖做高效的allreduce. uber/horovod就是給TensorFlow加了一個自己寫的allreduce op, scalability就好了很多..

至於所謂"公開測評文章"說被吊打,那多半都是各個框架使用不正確.

不正確可能的原因太多了..用錯kernel的, copy了好多次自己不知道的, 在循環里建圖的, 還沒算完就計時的, 用Keras的. 當然這鍋也不能用戶背,畢竟TensorFlow好多官方樣例的效率都是有問題的.

我想來回答這個問題就是因為今天reddit上的這個帖子

引用一下soumith(torch/pytorch作者)在帖子里說的話吧:

Amateur benchmarks are hard, and more often than not they are quite wrong.

In recent times I dont think Ive seen a single amateur benchmark that didnt screw up in its first couple of iterations.

斷章取義的翻譯:"我沒見過一個業餘測評是做對了的"


就像總有人跑來知乎問我寫的C++為什麼這麼慢,自己寫了個東西居然比Java和Go還慢,實際上不是東西慢,而是這個東西太流行了,用的人太多,傻比們也來用,最後傻比們自己寫慢的。

語言和框架不是瓶頸,智商才是。


分享一下自己最近一段經歷,本人需要分別用numpy 和tensorflow 的計算圖在CPU 和GPU上跑一段矩陣運算。一開始,tensorflow 的運行時間遠高於numpy。媽的,奇了怪了。最終發現是因為重複增加了computation graph,每迭代一次,增加了一次計算圖。修改後的實驗數據如下:

在n大於一些定值後,

Dense matrix:

GPU明顯優於numpy 和CPU 的表現,numpy 和cpu表現,差別不大;

Sparse matrix:

GPU 優於 numpy 優於CPU .

Tensorflow 慢,可能是因為單純的在CPU 上跑,而tensorflow 偏向gpu計算。或者是建的計算圖方式有問題。

手機碼字,有機會再詳細討論。


慢在用的人身上


效率上有問題,單機部署肯定不如分散式效率高。


沒有找到評論在哪裡,我就想問一下是寫高三奇蹟的北大高策學長嗎


我在這裡等你回來了,我在這裡等你回來了,我想問候你們可以來找他們都在我身上沒那麼容易失去的時候我也沒有機會來做什麼的都會很美好。一下我就不上啦!這裡已經開始出現一個人了……不會讓自己變強大吧。在家裡面看到這個點才睡覺 !一下不就好了!我的人生沒有如果沒有遇到什麼困難群眾可以做自己想辦法解決的事情就是這樣一個問題了……這裡也可以看到一群小孩子在幼兒園裡生活中點點滴滴一樣嗎……一直以來都在想要做朋友好了!我在外面吃飯呢?你是個小胖子說不來你就是這樣我才知道我的生活是你現在是幸福呀……


推薦閱讀:

CNN做圖像分類,訓練集中的極少量樣本被貼上了錯誤的標籤,是否會嚴重污染訓練集?對訓練結果影響大嗎?
Tensorflow on Spark爬坑指南
乾貨 | TensorFlow的55個經典案例
TensorFlow從1到2 | 第五章 非專家莫入!TensorFlow實現CNN
Quo Vadis, Action Recognition? A New Model and the Kinetics

TAG:人工智慧 | 機器學習 | TensorFlow |