PyTorch
开源的Python机器学习库
PyTorch是一个用于机器学习和深度学习的开源深度学习框架,由Facebook于2016年发布,其主要实现了自动微分功能,并引入动态计算图使模型建立更加灵活。Pytorch可分为前后端两个部分,前端是与用户直接交互的python API,后端是框架内部实现的部分,包括Autograd,它是一个自动微分引擎。
发展历史
PyTorch,作为Torch的继承者,以其卓越的灵活性和对动态图的支持而闻名。它提供了一个以Python为核心的前端接口,使得深度学习模型的构建和训练更加便捷。PyTorch的诞生,可以追溯到2016年9月,由Adam Paszke、Sam Gross和Soumith Chintala等人共同开发出这一框架的初始版本。
紧接着在2017年1月,Facebook的人工智能研究院(FAIR)向世界推出了PyTorch。这个基于Torch的框架,以其Python语言作为前端,同时为深度学习研究者和开发者提供了两大核心优势:一是强大的GPU加速张量计算能力,其并行计算能力在当时与NumPy相媲美;二是内置的自动微分系统,使得构建深度神经网络变得更加直观和高效。
随后在2022年9月,Facebook的创始人马克·扎克伯格宣布成立了PyTorch基金会,并将该基金会纳入Linux基金会的管理之下。这一决定有助于加强PyTorch在开源社区中的影响力,并为其未来的持续发展提供了支持。
版本更新
Torch
Torch是最早的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实现。
参考资料
2022年斯坦福AI指数报告.斯坦福AI指数网.
PyTorch Foundation | PyTorch.Pytorch基金会官网.
最新修订时间:2024-10-11 21:21
目录
概述
发展历史
参考资料