2021 年了,TensorFlow 和 PyTorch 两个深度学习框架地位又有什么变化吗?

2021-06-17 14:32:20 浏览数 (1)

pytorch统治学术圈。

现在各大顶会开源代码没有一丝丝的tensorflow2.x,就连谷歌家自己的论文也是只有torch和jax。零零星星一些tf1的开源代码。

tensorflow2.x难用吗?真不难用的,基本就是在用keras,tf.data pipeline 和 tf.distribute 用起来真的省心又快。问题就是现在tf2没人用啊,也不是不好用,就是你有的pytorch也有,pytorch用得已经好好的了为啥还要换呢?

然后你又再搞一个新库,jax,而且还是用tensorflow写的,而且还不是像keras,sonet一样能跟tf混着用的 ,然后google research开源代码要不是pytorch就是jax,连自家都不用别人会用么。

谷歌真的挺迷惑的,把keras合并了不去好好搞keras推广keras,可能再过两年 import tensorflow as tf 直接报warning “tensorflow is deprecated, please use pytorch instead”

小小将(华中科大 工学硕士)回答:

变化太大了,今年面试的实习生,当问他们常用的深度学习框架时,他们清一色的选择了:PyTorch。

我个人认为几个原因导致地位逆转:

(1)PyTorch的易用性更好(当一个框架本身能衍生很多上层框架时,你就能知道它本身是多么不友好了,说的就是TF),而且生态已经起来了,大部分论文开源都是用PyTorch;

(2)TF2看起来并不太成功,反而破坏TF1的生态。TF1和TF2往往混杂在一起,让人摸不着头脑。

(3)关于大家最担心的部署优化问题,其实目前PyTorch也在不断提升这块的劣势,目前Torch->ONNX->TensorRT已经相对成熟了,其他的端侧框架如ncnn也支持torch了。当然动态图比静态图确实要多踩一点坑,但带来的可能是模型迭代效率的提升。

(4)关于分布式训练,TensorFlow可能优势更大,但可能大部分人最多跑个单机多卡就够了,所以性能上不会差距太大,而且分布式训练还有很多第三方框架来支持比如horovod。而且本身PyTorch自带的DDP也不差。

其实我从16年开始接触深度学习,最早学习的框架是theano,当TensorFlow出来后,theano的使用者就慢慢转向了TensorFlow,到19年我又开始转向PyTorch。每次转变后,我只能说一句话:真香。

声明:我的观察只限于在比较卷的CV领域。

Yulong(机器学习优秀答主)回答:

很尴尬的是,业界大多数支撑搜广推场景的模型,还是用tensorflow,而且恶心的是还是tensorflow 1.x,而且更更恶心的是各家攻城狮早期就与master分叉了,开始自己魔改tf,给这个屎山代码打上各种补丁。这些陈年老码已经稳定运行上线了,谁也不敢说从头开始,用pytorch汰换掉。这样搞出线上故障谁背的起?

每天是身在tf营,心在torch。怀念简单的model写法,怀念直接写个if而不需要用诡异的tf.cond。不要管什么variable scope,也不要担心是否真的在train还是eval……pytorch团队赶紧支持大规模kv partition variable,赶紧开发serving部署啊,快解民于倒悬啊!

遗民泪尽tf里,南望torch又一年(ToT)/~~~

叶小飞(北美奔驰研究院 高级深度学习工程师)回答:

先说结论,2021年学术圈 Pytorch会继续称霸天下,而Tensorflow引以为傲的工业界地位会进一步衰退,Pytorch会借助ONNX所带来的落地能力在工业界逐渐抢走主导地位。这番结论并不是通过网上的数据得出的,而是通过我在工业界两次落地的经历得出的。

我18年中旬的时候用的是tensorflow1.x落地了手机端项目(用的是tf->snpe), 那个时候pytorch在落地上的支持还不够好,很多layer不支持,customization也比较复杂,而tensorflow落地框架选择有很多,例如tensorLite, TensorRT, ncnn, snpe等等。虽然落地用了TF,但是业余写学术论文还是pytorch, TF唯一被选择的理由就是它方便在移动端落地

等到了20年初我落地项目的时候,pytorch良好的生态环境促进了它在移动端落地的进展,我们组全部改用pytorch,放弃了tf 1.x , 落地选择了pytorch->ONNX->tensorRT, 整个框架转化过程十分丝滑,prototyping的时候也不需要面对让人头疼的tf graph. 大概这个时候我就意识到,tensorflow又丢了一座城。冷静下来,分析了下原因,为什么tf先声夺人,却被pytorch后来者居上渐渐抢走了一切?我觉得大概有以下几个原因:

1)tf 1.x最大的劣势是它混乱的api设计以及难以debug的静态图机制,这是让他们在学术圈丢掉地位的根本原因。同一个功能你能用tf.slim, tf.layer, tf.keras同时实现,它们底层还互相“串通”,写起来你不狼藉谁狼藉?debug graph的痛我想也不需要在这里细说,搞过的都懂,最怕建立graph的时候不报错,一喂数据各种崩溃.....

2) 无论怎样,tf1.x在工业落地部署上还是可圈可点的,直到tf 2.x的出现。它想往pytorch靠,可是把自己的优势部分也给搞没了。为什么这么说?首先,习惯tf1.x的用户会发现2.x的使用方法改头换面,这种巨大的改变会让之前习惯了静态图的用户难以接受。第二,很多公司已经用tf1.x部署好了落地模型,现在忽然换成了2.x, 为了产品稳定一定不会更换。这就导致了本来改跟着潮流过渡到新版的人群还停留在原地,渐渐它就会失去自身的生态圈活力。各位看一下,之前在公司里用1.x的有几个换到2去呢?

3)Pytorch这两年在落地部署上成熟了很多,通过pytorch->ONNX->ncnn/tensorRT可以满足大部分移动端需求。

4)当年那批用tf的学生毕业了入了工业界,所以公司的人都在用tf. 现在的学生都用pytorch, 等毕业了......

我个人认为,TF有种一子落错,满盘皆输的趋势,这种趋势已经比较难改变了。

文章转载自知乎问答,著作权归属原作者,本文仅作学术分享,侵删!

原文地址:

https://www.zhihu.com/question/452749603

0 人点赞