TensorFlow到底慢在哪里?

1,268 阅读3分钟
本文由 「AI前线」原创
整理|Natalie

近日,有人在知乎上提了一个问题,引起了小编的注意。提问者表示:“很多公开测评文章对比 TensorFlow 与其它深度学习框架(主要是 Mxnet、Caffe),各种场景下性能方面都是被吊打的。那么 TensorFlow 到底慢在哪里?修过哪些地方就能够有效提升性能?”

目前这个问题已经被 2W+ 人浏览过,关注者 369。问题下的回答基本都是在吐槽“无知的业余评测者”。

现就职于 Facebook 人工智能研究院(FAIR)的吴育昕对此问题做出了直言不讳的解(tu)答(cao),并且得到了多位人工智能领域大神的点赞,这其中包括 Facebook 研究科学家及 Caffe 作者贾扬清、Facebook 人工智能研究院研究员田渊栋、谷歌大脑工程师周玥枫。

更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front)



吴育昕的回(tu)答(cao)如下:

单机做不太小的常见模型,使用正确的情况下,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 上的这个帖子

www.reddit.com/r/MachineLe…

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

Amateur benchmarks are hard, and more often than not they are quite wrong.Inrecent times I don't think I've seen a single amateur benchmark that didn't screw up in it's first couple of iterations.

断章取义的翻译:"我没见过一个业余测评是做对了的"。

另一位知乎网友“立党”的吐槽也同样十分犀利:“语言和框架不是瓶颈,智商才是。”

欢迎围观,知乎原文链接:

www.zhihu.com/question/26…

更多干货内容,可关注AI前线,ID:ai-front,后台回复「AI」、「TF」、「大数据」可获得《AI前线》系列PDF迷你书和技能图谱。