被迫用了两个月tensorflow来描述一下感受。
tensorflow是一个google内部生态很好的东西,但不是一个适合开源的东西,比如说:
1. Google内部支持mapreduce级别的读取SSTable,pytorch用户经常遇到的训练过程中的IO bottleneck在这里不存在
2. 内部跑tensorboard非常流畅,不会出现local运行时log一多就卡住了
3. AutoGraph对并行的支持很好,随便写for循环速度都还可以,pytorch可能要非常小心地去对tensor往batch维度reshape
4. serving端各种方便
5. TPU加持,现在TPU V4的速度快的有点过分了
那么问题来了,明明以上这些都是系统级服务,企业级支持,tf的文档却总是默认用户都是小学生,比如,默认教程从model.fit()开始,单机单卡,跑mnist。哪个用tf的人不是自己写custom dataloader,custom training loop呢
如果只是google自己用,tf的一些特性确实舒服,但是放在社区里其它实验室根本用不上这些特性,这才是pytorch收拢人心的地方,虽然google也在推jax来替换掉静态图这部分,但是文档例子都太不全了。
这种情况也不是google推出的框架里第一次出现了,从bazel到angular,还有tensorflow,一贯的google风,做出来的第一目的是为了服务自家需求,开源只是顺手做的事情,至于非google用户怎么用怎么适配,没人关心…隔壁pytorch每一个版本每一个cuda环境都提供一个编译好的wheel,tensorflow这边根本不管。
tensorflow的未来现在来看是很不明朗的,一方面整个tf组已经从brain team撤出来了,而brain都在推jax,另一方面eager模式在tpu上支持并不好,而google内部基本都用tpu,那问题来了,内部都不会去用eager模式优化eager模式,更不要指望外部去优化,tf未来大概率逐渐被jax慢慢取代
变化太大了,今年面试的实习生,当问他们常用的深度学习框架时,他们清一色的选择了: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领域。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有