点击我爱计算机视觉标星,更快获取CVML新技术


本文转载自新智元(ID:AI_era),禁止二次转载。


  新智元报道  

来源:Reddit

编辑:小芹

【新智元导读】PyTorch可以和TensorFlow一样快,有时甚至比TensorFlow更快了?这是怎么回事?最近Reddit的一个帖子引起热议。

近日,Reddit 上有一个热帖:为什么 PyTorch 和 TensorFlow 一样快 (有时甚至比 TensorFlow 更快)?

作者说:

由于这两个库都在底层使用 cuDNN,所以我预想各个操作的速度是相似的。然而,TensorFlow (在 graph 模式下) 编译一个 graph,因此当你运行实际的训练循环时,在 session.run 调用之外没有任何 Python 开销。在 PyTorch 中,由于动态图的关系,需要经常使用 Python,所以我预想这会增加一些开销。更不用说,拥有静态图意味着可以进行图优化,比如节点修剪和排序操作。但我在网上看到的许多基准测试中,在 GPU 上,PyTorch 都可以轻松地赶上 TensorFlow。

一个具体的例子是,在 PyTorch 和 TensorFlow 两个库中的 Adam 实现

https://github.com/pytorch/pytorch/blob/master/torch/optim/adam.py

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/adam.py

PyTorch 拥有你所期望的所有操作。对于 {_resource} _apply_density 情况下的 TensorFlow (据我所知这是常见情况), TensorFlow 有一个专用的 C++ 实现。因此,在这里,TensorFlow 不会在 Python 上花费额外的时间,而且它在 C++ 中有一个优化的实现。在这种情况下,为什么 TensorFlow 版本没有更快一些呢?

我听说 PyTorch 在 cuDNN 级别上进行了更好的优化。有人能提供更多细节吗?是什么阻止了 TensorFlow 做同样的事情?我所知道的惟一优化是 PyTorch 使用 NCHW 格式 (针对 cuDNN 进行了更好的优化),而 TensorFlow 默认使用 NHWC。

更新:看起来新的 Volta GPU 使用 NHWC 格式 (TensorFlow 的默认格式) 的性能更好:https://devblogs.nvidia.com/tensor-core-ai-performance- ones/

这个问题引发了诸多 Reddit 网友的关注,大家纷纷给出自己的答案。

SR2Z:

这里的关键是异步执行 —— 除非你不断地在 GPU 之间复制数据,否则 PyTorch 操作只会为 GPU 排队。对 torch 函数的 Python 调用将在排队操作后返回,因此大多数 GPU 工作都不会占用 Python 代码。这将瓶颈从 Python 转移到了 CUDA,这就是为什么它们执行起来如此相似。

huberloss (回复 SR2Z):

TF 构建了一个执行图,然后由 C++ 后端处理,这意味着你在 Python 中所做的唯一工作就是设置这个图 (至少在 TF1.x 中是这样)。我不认为 TF 会移动移入 / 移出 GPU,除非需要 (例如,op1 运行在 CPU 上,op2 运行在 GPU 上,op3 运行在 CPU 上 -> 这将导致向 GPU 复制或从 GPU 复制)。TF 有执行程序,它也将异步运行所有内容 (这意味着独立节点将以一种你能够尽快满足输出节点的方式执行)。

关于 OP 的观点,我真的不知道为什么有时候会更快。我可以想到的唯一猜测是数据格式,或者某些 ops 调用 CUDA/cuDNN 的方式。

entarko:

正如你所说,这两个库都使用 cuDNN,所以在较低级别上使用的大多数算法是相似的。我的理解是,在默认情况下,PyTorch 中的执行是异步的。这意味着 Python 命令在 GPU 上执行某项调用,但不等待该调用的结果,除非下一个操作需要该结果。因此,GPU 操作速度的唯一不同之处在于 Python 调用所需的时间,这与 GPU 上的实际计算相比总体上较小。这并不能解释为什么有时候 PyTorch 更快,这在一定程度上来自 NCHW (尽管并不总是这样),而且还来自算法为不同的操作进行的选择 (cuDNN 的 benchmark flag)。

patrickkidger:

这与 PyTorch 和 TensorFlow 没有直接关系,但是既然 NCHW 和 NHWC 被提了出来,我希望这里有人能知道答案……

为什么 batch size N 是第一个而不是最后一个?在我看来,由于缓存的局部性,最后使用它通常会加快速度。

大多数数据集格式不统一应该不是大问题:相比于在整个计算的其余部分中具有 N-last 格式的好处而言,单个副本转到 N-last 格式(即在将其送入神经网络之前)的开销应该是微不足道的。

programmerChilli (回复 patrickkidger):

我认为你是正确的,将批处理维度放在最后可以实现一些非常有趣的优化 (想想所有的向量化)。

但是,如果你的 batch size 很小,会发生什么呢?比如 batch size 为 2 (可能 3 会更糟)。突然之间,你可以在批处理维度上进行向量化的数量变得非常少了,并且你已经传播了其余的数据,但没有获得多少收益。

实际上,以前有几个框架使用这种格式,比如来自 Nervana 的 Neon。

我想主要的答案是人们尝试了,但是由于各种原因,一些政治上 / 技术上的原因,我们目前已经把 batch size 作为第一个维度确定下来。

un_om_de_cal:

根据我将项目从 PyTorch 转移到 TF 的经验,虽然 PyTorch 的基本训练操作 (前向传播、反向传播、更新参数) 更快,但是一些不寻常的操作 (包括 argmax 和 slicing),PyTorch 比 TF 要慢得多。因此,也许 PyTorch 更适合通常基准测试的更常见的操作,而 TF 针对更广泛的操作进行了优化?

我想到的另一点是,PyTorch 教程在 CPU 上做数据增强,而 TF 教程在 GPU 上做数据增强 (至少 1-2 年前我看到的教程是这样)。如果你像这样做项目,那么你将在 CPU 上执行一些计算,只要你没有耗尽 CPU, 就可以提高效率。

各位 PyTorcher 和 TF boy,你们怎么看?


TF & PyTorch学习群

学习交流TensorFlow、PyTorch深度学习框架的使用,欢迎加入52CV-TF & PyTorch群,扫码添加CV君拉你入群,如已为CV君其他账号好友请直接私信,

(请务必注明:框架):

喜欢在QQ交流的童鞋可以加52CV官方QQ群:805388940。

(不会时时在线,如果没能及时通过还请见谅)


长按关注我爱计算机视觉

Reddit热议:为什么PyTorch比TensorFlow更快?相关推荐

  1. Reddit热议: 如何读论文才不至于发疯?

    Reddit热议: 如何读论文才不至于发疯? 文章目录 Reddit热议: 如何读论文才不至于发疯? 前言 核心总结 举个栗子 前言 许多新晋研究生在迈入新的领域时,都要阅读大量相关领域论文,但在信息 ...

  2. 擦掉纹身的AI火了:再现无暇皮肤,网友却发现“伏地魔” | Reddit热议

    子豪 发自 凹非寺 量子位 报道 | 公众号 QbitAI 还记得被P到体无完肤的贝克汉姆吗? P到这个程度,不得不说,后期工作人员堪称敬业典范. 在综艺节目甚至体育比赛中,艺人们也各出奇招-- 现在 ...

  3. 机器学习内卷化:博士数量激增,本硕毕业生有点慌 | reddit热议

    转自:量子位 一入ML深似海,从此求职不由人? 机器学习现在势头正劲,越来越多的人涉足其中,就业门槛也随之抬高. 最近,就有人在reddit上提出疑问:ML博士数量激增,那么没博士学位的人,找工作的难 ...

  4. Reddit热议被引最多的机器学习论文:上世纪LSTM称霸,何恺明今年被引1.8w居首...

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自新智元(AI_era).   新智元报道  来源:reddit 整理:大明 [新智元导读]机器学习和AI今天的繁荣离不开前辈们的辛勤耕耘.近日 ...

  5. ​AI大事件 | 特斯拉开发人工智能芯片,智能爆炸论再引热议,Pytorch新版本发布

    呜啦啦啦啦啦大家好呀,又到了本周的AI大事件时间了.过去的一周中AI圈都发生了什么?大佬们互撕了哪些问题?研究者们发布了哪些值得一读的论文?又有哪些开源的代码和数据库可以使用了?文摘菌带你盘点过去一周 ...

  6. 为了一个科研idea,博士生们连冥想、巫毒仪式都用上了|Reddit热议

    丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI 俗话说,好的开端是成功的一半. 而一个好的idea也是课题研究成功的第一步! 可这idea从来哪? Reddit上一位博士生便有这样的困惑, ...

  7. 博士在读却连矩阵的秩都搞不清,我该如何毕业?|Reddit热议

    丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI 带着满腔热血读了博,到头却发现自己学术天分不够? 看着别人做顶会收割机,自己却一篇论文都没发? 而且研究不出什么新方法,只能天天搞搞应用? ...

  8. 社交媒体和arXiv存在,让双盲评审形同虚设 | Reddit热议

    白交 发自 凹非寺  量子位 报道 | 公众号 QbitAI 双盲评审机制真的双盲吗? 最近,Reddit上有这样一个讨论:社交媒体与arXiv是否损坏了顶会双盲的机制? 13个小时,热度超过300- ...

  9. 无贡献、无创新、无思路,ML领域准博士求助:论文到底要怎么创新? | Reddit热议...

    来源丨量子位 编辑丨极市平台 导读 如何在机器学习领域写论文时保证创新性? 机器学习领域水写论文日常: △图源推特:AI Memes for Artificially Intelligent Teen ...

最新文章

  1. 使用pyinstaller打包python_使用pyinstaller打包Python项目,python
  2. Docker源码分析(三):Docker Daemon启动
  3. 原生js实现JSON.parse()和JSON.stringify()
  4. 【XSY2667】摧毁图状树 贪心 堆 DFS序 线段树
  5. 神经网络架构搜索_神经网络架构
  6. 解决 springboot 项目:找不到或无法加载主类
  7. 区分大小屏幕_第一个Python程序——在屏幕上输出文本
  8. Django之Ajax刷新记住用户名
  9. Java之static的内容
  10. wr703n 4m固件 带打印机服务器_旗捷支招 | 如何关闭打印机固件自动更新?分分钟搞定!...
  11. 阿里巴巴对外开源液冷数据中心技术
  12. Spring 事务模型
  13. 计算机智能化弱电设备发展趋势,中国弱电智能化发展趋势
  14. 计算机安装xp蓝屏怎么办,联想笔记本装xp系统蓝屏解决方法
  15. Spring实战第五章idea复现
  16. 前端打包之后 运用nginx反向代理运行项目
  17. 英语专家谈英语学习方法
  18. storm流程——storm
  19. GRIB2 资料处理
  20. 【PTA】 试试手气

热门文章

  1. Hanoi 汉诺塔——通俗易懂地讲解(c++)
  2. Struts学习笔记--导航
  3. QT Basic 014 Model/View programming (模型、视图编程)
  4. [Study Notes][001][gstreamer] memory
  5. 大容量存储方案_基因行业容器存储解决方案
  6. golang map合并_Golang之流式编程
  7. 改ip地址会有什么影响_led显示屏会带来什么负面影响
  8. mysql5.6.39编译安装_源码编译安装MySQL-5.6/mysql-5.6.39------踩了无数坑,重装了十几次服务器才会的,不容易啊!...
  9. golang mysql封装_使用Golang 封装一个Api 框架 ----- 数据库操作篇(gorm引入)
  10. C#中输入法全角转换半角