PyTorch框架历史和特性更迭
为了方便理解后续章节中对PyTorch的详细阐述,这里首先介绍一下PyTorch的发展历史和一些特性的变化过程。截至本书写作的时候,PyTorch的最新版本为1.3.0,所以本书叙述的历史为PyTorch1.3.0之前的特性更迭,本书后面的代码将主要基于PyTorch1.3.0。
PyTorch是由Facebook公司开发的深度学习框架,其起源应该是Torch这个深度学习框架。Torch深度学习框架最初的开发可以追溯到年。相比使用Python语言作为深度学习框架前端的PyTorch,Torch使用了Lua语言作为深度学习框架的前端。由于机器学习的主流语言是Python,相比之下,Lua语言比较小众。Facebook在年发表了PyTorch最初的版本0.1.1(alpha-1版本),作为Torch向Python迁移的一个项目。在最初的版本中,PyTorch和Torch共享的是底层的C语言API库,现在还可以在PyTorch源代码里看到TH、THC、THNN、THCUNN这些目录,即来源于Torch的代码。同时,在前端代码的组织上,PyTorch也借鉴了Torch的一些概念(比如张量和模块等)。
在最初的版本中,PyTorch支持的深度学习计算操作很少,而且在并行计算和异构计算(CPU/GPU混合)方面的支持不是很完善。在后续版本中,PyTorch逐渐引入了多进程计算的功能,而且逐渐集成了CuDNN的GPU深度学习计算库,引入了越来越多的张量运算操作和深度学习模块。在PyTorch0.2.0中已经实现了高阶导数、分布式计算、张量广播等功能。同时,在重要的并行计算的支持方面,也得到了很大的完善。到了PyTorch0.3.0,PyTorch支持更多的损失函数和优化器,同时在框架的计算性能的表现上有了长足的进步。另外,PyTorch开始支持导出神经网络为开放神经网络交换格式(OpenNeuralNetworkExchangeFormat,ONNX),这个格式用于存储神经网络的连接方式和权重,也用于和其他深度学习框架(如Caffe2和MXNet等)交换构建神经网络的权重。
PyTorch0.4是在PyTorch1.0之前的最后一个大版本,在PyTorch0.4.0中,相对前一个版本而言,对分布式计算的支持更加完善,方便了用户的使用。同时,ONNX也增加了对循环神经网络(RecurrentNeuralNetwork,RNN)的支持。另外,在这个版本中,也增加了对Windows操作系统的支持,实现了张量(Tensor)和变量(Variable)的合并,而在之前的版本中,这两个概念是相互独立的,变量是可以构建计算图且能够进行自动求导的张量。在PyTorch0.4.0中,通过指定张量支持导数的选项,就不再需要用到变量。因此,这两个概念合并为张量。
到了PyTorch1.0,深度学习框架本身又有了几个重大的变化。首先是分布式训练方式的更改,PyTorch在分布式计算方面开始对不同的后端有了完善的支持,包括MPI和NCCL等。在即时编译器(Just-In-TimeCompiler,JIT)方面,PyTorch1.0新增了许多功能,使得之前的深度学习模型追踪(trace)的功能有了很大提高。通过使用改进的JIT,可以把PyTorch的动态计算图编译成静态计算图,方便模型的部署。为了减少Python前端在运行深度学习模型的时间损耗,PyTorch也加强了对C++前端的支持,这样一个Python训练和保存的模型就能通过C++前端运行,有效地提高了模型的运行效率。
PyTorchHub的开发也是1.0版本的亮点之一,通过PyTorchHub,用户可以获得一系列预训练的深度学习模型,主要包括计算机视觉、自然语言处理、生成式模型和音频模型等,这些预训练模型的出现能有效地加快用户开发新型的深度学习模型,方便用户构建基线模型和复现深度学习模型的效果。到了PyTorch1.1,PyTorch开始支持TensorBoard对于张量的可视化,并且加强了JIT的功能。PyTorch1.2增强了TorchScript的功能,同时增加了Transformer模块,也增加了对视频、文本和音频的训练数据载入的支持。到了PyTorch1.3,增加了移动端的处理,而且增加了对模型的量化功能(Quantization)的支持。
综上所述,PyTorch从年发布以来,迭代非常迅速,经历了从0.1.0到1.3.0一共8个大版本的更新,同时在大版本之间各有一个小版本的更新。在保持快速更新的同时,PyTorch保持了API的稳定性,而且作为一个飞速迭代的深度学习框架,PyTorch在构建和运行深度学习模型方面也非常稳定,并没有因为迭代速度太快而导致代码运行不稳定。得益于迭代速度,PyTorch现阶段支持非常多的神经网络类型和张量的运算类型。可以预见,PyTorch在未来能够兼顾更新速度和代码质量,支持更多的神经网络类型,并拥有更高的计算效率。
PyTorch的安装过程
PyTorch是一个基于Python的深度学习框架,支持Linux、macOS、Windows平台。为了能够使用PyTorch,首先需要有Python的运行环境,一般来说,推荐选择Anaconda的Python环境。进入Anaconda的网站可以看到,Anaconda可以针对操作系统和Python的版本选择不同的Anaconda安装包(截至本书写作的时候,最流行的Python版本为3.7,因此,这里使用基于Python3.7的Anaconda安装包)。下载和安装Anaconda安装包之后,就可以开始使用conda命令了,这也是Anaconda的Python环境管理命令。如果是Windows操作系统,可以打开AnacondaPrompt;如果是Linux/macOS操作系统,可以在安装完毕之后直接在命令行(Terminal)运行conda命令来测试是否成功安装了Anaconda环境(见图2.1)。我们可以在对应的命令行界面运行conda--help,就可以看到Anaconda的帮助文件。
在安装Anaconda以后,我们可以使用Anaconda创建一个虚拟环境,具体的命令为condacreate-npytorchpython=3.7。可以看到这里有两个参数,第一个参数是-n,后面紧接着虚拟环境的名字,这里直接使用pytorch作为虚拟环境的名字(读者可以使用任意的字符作为虚拟环境的名字),另外一个参数则用于指定Python的版本(这里使用3.7版本)。Anaconda会自动安装好初始的依赖并设置好具体的环境变量。创建好环境之后,可以使用condaactivatepytorch来激活刚刚创建的虚拟环境,其中pytorch是创建的虚拟环境的名字。如果要退出虚拟环境,可以使用condadeactivate命令。
图2.1Windows的Anaconda环境(左)和Linux/macOS的Anaconda命令(右)
在激活虚拟环境之后,接下来需要安装PyTorch包,具体的安装过程可以参考PyTorch