python pytorch_PyTorch到底好用在哪里?

Pytorch好用在哪,要对比之后才知道。

之前,斯坦福大学研究机器学习的博士生Awni Hannun,围绕PyTorch还是TensorFlow这个话题,做了一个深入的比较。量子位把内容传送如下:我写的这份指南,主要对比了PyTorch和TensorFlow之间的区别。希望对那些想着手开始一个新项目或者考虑转换深度学习框架的人有所帮助。

我主要考察了深度学习堆栈的训练和部署时,相关的可编程性和灵活性。在这里,我不会过多的谈论速度、内存占用等方面的权衡。

先放结论

PyTorch更有利于研究人员、爱好者、小规模项目等快速搞出原型。而TensorFlow更适合大规模部署,特别是需要跨平台和嵌入式部署时。

然后咱们一项一项分着说。

上手时间

赢家:PyTorch

PyTorch本质上是Numpy的替代者,而且支持GPU、带有高级功能,可以用来搭建和训练深度神经网络。如果你熟悉Numpy、Python以及常见的深度学习概念(卷积层、循环层、SGD等),会非常容易上手PyTorch。

而TensorFlow可以看成是一个嵌入Python的编程语言。你写的TensorFlow代码会被Python编译成一张图,然后由TensorFlow执行引擎运行。我见过好多新手,因为这个增加的间接层而困扰。也正是因为同样的原因,TensorFlow有一些额外的概念需要学习,例如会话、图、变量作用域(variable scoping)、占位符等。

另外还需要更多的样板代码才能让一个基本的模型运行。所以TensorFlow的上手时间,肯定要比PyTorch长。

图创建和调试

赢家:PyTorch

创建和运行计算图可能是两个框架最不同的地方。在PyTorch中,图结构是动态的,这意味着图在运行时构建。而在TensorFlow中,图结构是静态的,这意味着图先被“编译”然后再运行。

举一个简单的例子,在PyTorch中你可以用标准的Python语法编写一个for循环结构

for _ in range(T):

h = torch.matmul(W, h) + b

此处T可以在每次执行代码时改变。而TensorFlow中,这需要使用“控制流操作”来构建图,例如tf.while_loop。TensorFlow确实提供了dynamic_rnn用于常见结构,但是创建自定义动态计算真的更加困难。

PyTorch中简单的图结构更容易理解,更重要的是,还更容易调试。调试PyTorch代码就像调试Python代码一样。你可以使用pdb并在任何地方设置断点。调试TensorFlow代码可不容易。要么得从会话请求要检查的变量,要么学会使用TensorFlow的调试器(tfdbg)。

全面性

赢家:TensorFlow

随着PyTorch逐渐成熟,我预计这部分的差距会趋近于零。但目前,TensorFlow还是有一些PyTorch不支持的功能。它们是:沿维翻转张量(np.flip, np.flipud, np.fliplr)

检查无穷与非数值张量(np.is_nan, np.is_inf)

快速傅里叶变换(np.fft)

这些TensorFlow都支持。另外,TensorFlow的contrib软件包中,有更多PyTorch没有的高级功能和模型。

序列化

赢家:TensorFlow

两种框架下保存和加载模型都很简单。PyTorch有一个特别简单的API,可以保存模型的所有权重或pickle整个类。TensorFlow的Saver对象也很易用,而且为检查提供了更多的选项。

TensorFlow序列化的主要优点是可以将整个图保存为protocol buffer。包括参数和操作。然而图还能被加载进其他支持的语言(C++、Java)。这对于部署堆栈至关重要。理论上,当你想改动模型源代码但仍希望运行旧模型时非常有用。

部署

赢家:TensorFlow

对于小规模的服务器端部署(例如一个Flask web server),两个框架都很简单。

对于移动端和嵌入式部署,TensorFlow更好。不只是比PyTorch好,比大多数深度学习框架都要要。使用TensorFlow,部署在Android或iOS平台时只需要很小的工作量,至少不必用Java或者C++重写模型的推断部分。

对于高性能服务器端的部署,还有TensorFlow Serving能用。除了性能之外,TensorFlow Serving一个显著的优点是可以轻松的热插拔模型,而不会使服务失效。

文档

赢家:平手

对于两个框架,我都在文档中找到所需的一切。Python API被很好的记录,以及有足够的案例和教程来学习框架。

一个特例是,PyTorch的C库大多数没有文档。不过,这只有在你编写一个定制化的C扩展时才有影响。

数据加载

赢家:PyTorch

PyTorch中用于加载数据的API设计的很棒。接口由一个数据集、一个取样器和一个数据加载器构成。数据加载器根据取样器的计划,基于数据集产生一个迭代器。并行化数据加载简单的就像把num_workers参数传递给数据加载器一样简单。

我在TensorFlow中没有发现特别有用的数据加载工具。很多时候,并不总能直接把准备并行运行的预处理代码加入TensorFlow图。以及API本身冗长难学。

设备管理

赢家:TensorFlow

TensorFlow的设备管理非常好用。通常你不需要进行调整,因为默认的设置就很好。例如,TensorFlow会假设你想运行在GPU上(如果有的话)。而在PyTorch中,即使启用了CUDA,你也需要明确把一切移入设备。

TensorFlow设备管理唯一的缺点是,默认情况下,它会占用所有的GPU显存。简单的解决办法是指定CUDA_VISIBLE_DEVICES。有时候大家会忘了这一点,所以GPU在空闲的时候,也会显得很忙。

在PyTorch中,我发现代码需要更频繁的检查CUDA是否可用,以及更明确的设备管理。在编写能够同时在CPU和GPU上运行的代码时尤其如此。以及得把GPU上的PyTorch变量转换为Numpy数组,这就显得有点冗长。

numpy_var = variable.cpu().data.numpy()

自定义扩展

赢家:PyTorch

两个框架都可以构建和绑定用C、C++、CUDA编写的自定义扩展。TensorFlow仍然需要更多的样板代码,尽管这对于支持多类型和设备可能更好。在PyTorch中,你只需为每个CPU和GPU编写一个接口和相应的实现。两个框架中编译扩展也是直接记性,并不需要在pip安装的内容之外下载任何头文件或者源代码。

- 完 -

最后,了解更多前沿科技,请关注我们的知乎号:量子位​www.zhihu.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装pytorch-lightning时需要注意安装的torch版本要与pytorch-lightning兼容。如果你使用的是pip安装的torch,那么你也应该使用pip来安装pytorch-lightning。同样地,如果你使用的是conda安装的torch,那么你应该使用conda来安装pytorch-lightning。保持两者一致可以避免torch版本被替换的问题。 如果你通过pip直接安装pytorch-lightning,可能会导致torch被卸载并安装cpu版本的torch。为了避免这种情况,你可以使用以下命令安装pytorch-lightning: pip install pytorch-lightning 总结起来,安装pytorch-lightning的最简单方法是使用pip: pip install pytorch-lightning<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [关于安装 PyTorch-Lightning 的一些问题(GPU版)](https://blog.csdn.net/qq_60592939/article/details/129177520)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [pytorch lightning最简上手](https://blog.csdn.net/weixin_44966641/article/details/127827124)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值