PyTorch是一个用于机器学习和深度学习的开源深度学习框架,由Facebook于2016年发布,其主要实现了自动微分功能,并引入动态计算图使模型建立更加灵活。Pytorch可分为前后端两个部分,前端是与用户直接交互的python API,后端是框架内部实现的部分,包括Autograd,它是一个自动微分引擎。

Pytorch基于已有的张量库Torch开发,在PyTorch的早期版本中,使用的是Torch7,后来随着PyTorch的发展,逐渐演变成了PyTorch所使用的张量库。

现如今,Pytorch已经成为开源机器学习系统中,在科研领域市场占有率最高的框架,其在AI顶会上的占比在2022年已达80%1。

发展历史

PyTorch,作为Torch的继承者,以其卓越的灵活性和对动态图的支持而闻名。它提供了一个以Python为核心的前端接口,使得深度学习模型的构建和训练更加便捷。PyTorch的诞生,可以追溯到2016年9月,由Adam Paszke、Sam Gross和Soumith Chintala等人共同开发出这一框架的初始版本。

紧接着在2017年1月,Facebook的人工智能研究院(FAIR)向世界推出了PyTorch。这个基于Torch的框架,以其Python语言作为前端,同时为深度学习研究者和开发者提供了两大核心优势:一是强大的GPU加速张量计算能力,其并行计算能力在当时与NumPy相媲美;二是内置的自动微分系统,使得构建深度神经网络变得更加直观和高效。

2018年10月,在NeurIPS 2018会议上,Facebook宣布了PyTorch 1.0的发布。这个版本的推出,标志着PyTorch在商业化进程中取得了重要进展。

随后在2022年9月,Facebook的创始人马克·扎克伯格宣布成立了PyTorch基金会2,并将该基金会纳入Linux基金会的管理之下。这一决定有助于加强PyTorch在开源社区中的影响力,并为其未来的持续发展提供了支持。

版本更新

Torch

Torch3是最早的Torch框架,最初由Ronan Collobert、Clement Farabet等人开发。它是一个科学计算框架,提供了多维张量操作和科学计算工具。

Torch7

Torch7是Torch的一个后续版本,引入了Lua编程语言,并在深度学习领域取得了一定的成功。遗憾的是,随着pytorch的普及,Torch便不再维护,Torch7也就成为了Torch的最后一个版本。

Pytorch 0.1.0

在Torch的基础上,Facebook人工智能研究院(FAIR)于2016年发布了PyTorch的第一个版本,标志着PyTorch的正式诞生。

初始版本的PyTorch主要基于Torch7,但引入了更加Pythonic的设计风格,使得深度学习模型的定义和调试更加直观和灵活。

Pytorch 0.2.0

该版本首次引入了动态图机制,使得用户能够在构建神经网络时更加灵活。作为Pytorch后期制胜tensorflow的关键机制,该版本象征着Pytorch进入了一个新的阶段。

Pytorch 1.0.0

这是Pytorch的首个稳定版本,引入了Eager模式简化了模型的构建和训练过程。

Pytorch 2.0

Pytorch2.0引入了torch.compile,可以支持对训练过程的加速,同时引入了TorchDynamo,主要替换torch.jit.trace和torch.jit.script。另外在这个版本中编译器性能大幅提升,分布式运行方面也做了一定的优化。

版本依赖

Pytorch在安装的过程中,不同版本依赖不同的底层环境,这些包括cuda、cudnn等,用户在安装时,主要考虑cuda版本和pytorch版本的对应关系即可。

1. cuda12.1 - pytorch 2.2.x, 2.1.x

2. cuda11.8 - pytorch 2.2.x, 2.1.x, 2.0.x

3. cuda11.3 - pytorch 1.10.x, 1.9.x, 1.8.1

4. cuda11.1 - pytorch 1.10.0, 1.9.x, 1.8.x

5. cuda11.0 - pytorch 1.7.x

6. cuda10.2 - pytorch 1.10.x, 1.9.x, 1.8.x, 1.7.x,

7. cuda10.1 - pytorch 1.7.x, 1.6.0, 1.5.x, 1.4.0

8. cuda10.0 - pytorch 1.2.0, 1.1.0, 1.0.x

9. cuda9.2 - pytorch 1.7.x, 1.6.0, 1.5.x, 1.4.0, 1.2.0

10. cuda9.0 - pytorch 1.1.0, 1.0.x

11. cuda8.0 - pytorch 1.0.0

核心组件

Pytorch源码中所涉及的组件非常多,以下介绍部分常见的核心组件:

Tensor

张量是PyTorch中的基本数据结构,类似于NumPy数组。PyTorch的大部分计算和数据操作都是基于张量进行的。

Storage

Storage是一个底层的数据结构,它是Tensor的基础,与Tensor相比,Storage更底层,其直接负责了一个Tensor对象的内存管理。

Autograd

Autograd是PyTorch的自动微分引擎,用于自动计算张量的梯度,并在反向传播的过程中更新计算图中张量的值,它是Pytorch中所有神经网络优化的基础。

Module

nn.Module是PyTorch中构建神经网络的基类。通过继承nn.Module基类,可以定义自己的神经网络层、模型,并使用模块化的方式构建复杂的深度学习模型。

Optimizer

PyTorch提供了多种优化器,用于在深度学习模型中更新和调整参数以最小化损失函数。通过将需要优化的网络参数传入优化器,便可以在每一次反向传播过后利用得到的梯度优化网络参数。

DataLoader

在PyTorch中,DataLoader是一个用于加载数据集的实用工具,它能够自动进行数据的批处理、随机打乱数据、并行加载数据等操作,使得数据的预处理和加载变得更加高效和简单,它一般和Dataset类一起使用。

生态

在2019年前,tensorflow一直作为深度学习系统中的领头存在,而以2019年为分界线,Pytorch异军突起,逐渐成为了开发者和研究人员最为喜爱的框架。随着Pytorch的不断普及和完善,其生态也越发蓬勃。

在NLP领域,huggingface社区的开源的transformers库使用pytorch实现了市面上绝大多数开源的预训练模型;微软的分布式训练框架deepspeed也支持Pytorch;由于Pytorch备受研究人员的青睐,近年来绝大多数开源神经网络架构都采用Pytorch实现。

来源: 百度百科

内容资源由项目单位提供