刚刚,Facebook 通过 PyTorch 官方博客宣布:PyTorch 1.6 正式发布!新版本增加了一个 amp 子模块,支持本地自动混合精度训练。Facebook 还表示,微软已扩大了对 PyTorch 社区的参与,现在拥有 PyTorch 在 Windows 上的开发和维护所有权。
相比于以往的 PyTorch 版本,本次即将发布的 PyTorch 1.6 有哪些吸引人的地方呢?
总的来说,PyTorch 1.6 版本包括许多新的 API、用于性能改进和性能分析的工具,以及对基于分布式数据并行(DDP)和远程过程调用(RPC)的分布式训练的重大更新。一些亮点包括:
在英伟达的帮助下增加了对自动混合精度(AMP)训练的本地支持,并且具有稳定的功能;
增加了对 TensorPipe 的本地支持;
在前端 API 增加了对复杂张量的支持;
提供张量级内存消耗信息的新分析工具;
分布式数据并行(DDP)训练和远程过程调用(RPC)包的大量改进和新功能。
PyTorch 官方博客表示,从此版本开始,PyTorch 的特性将分为 Stable(稳定版)、Beta(测试版)和 Prototype(原型版)。需要注意的是,Prototype 特性不包含在二进制包中,但可以通过使用 Nightly 从源代码构建或通过编译器标志(compiler flag)来使用。
此外,Facebook 还宣布,他们将把 Windows 版 PyTorch 的开发维护权移交给微软。
在 Windows 系统上运行 PyTorch 一直都是一种不愉快的体验,显然微软也看到了这一点。他们在 Pytorch 的博客中表示:
「在 PyTorch 1.6 中,我们为核心 PyTorch 及其域库提供了与 Linux 相同的测试覆盖率,同时将教程测试自动化,以此来改进 Windows 的核心质量。在 PyTorch 社区的帮助下,我们将测试覆盖范围添加到三个域库中:TorchVision、TorchText 和 TorchAudio。在 PyTorch 的后续版本中,我们将继续改进。根据收到的社区反馈,下一步的改进方向应该会聚焦于分布式训练支持和更好的 pip 安装体验。」
除了本地 Windows 体验,在今年的 Build 2020 大会上,微软还宣布了一个为 WSL 提供 GPU 计算支持的计划,PyTorch 将在其中起到不小的作用。现阶段,WSL2 已获得对 GPU 的初始支持,其中就包含对 PyTorch 的支持,WSL 用户可以直接运行本地 PyTorch 程序,进行机器学习,不需要传统的虚拟机或双引导设置。
性能与分析
[STABLE] 自动混合精度(AMP)训练
AMP 使用户可以轻松启用自动混合精度训练,从而在 Tensor Core GPU 上实现更高的性能并节省多达 50%的内存。使用本地支持的 torch.cuda.amp API,AMP 为混合精度提供了方便的方法,其中某些运算使用 torch.float32 (float)。其他运算使用 torch.float16(half)。有些运算,如线性层和卷积,在 float16 中要快得多。而另一些运算,比如缩减,通常需要 float32 的动态范围。混合精度尝试将每个运算与其相应的数据类型相匹配。
[BETA] FORK/JOIN 并行
新版本增加了对语言级构造的支持,以及对 TorchScript 代码中粗粒度并行的运行时的支持。这种支持对于一些情况非常有用,比如在集成中并行运行模型,或者并行运行循环网络的双向组件,它还允许为任务级并行释放并行架构(例如多核 CPU)的计算能力。
TorchScript 程序的并行执行是通过 torch.jit.fork 和 torch.jit.wait 两个 primitive 实现的。下面的例子展示了 foo 的并行执行:
[BETA] 内存分析器
「torch.autograd.profiler」API 现在包含一个可以让你检查 CPU 和 GPU 模型内不同算子的张量内存开销的内存分析器。
该 API 的用法如下所示:
分布式训练 & RPC
[BETA] 用于 RPC 的 TENSORPIPE 后端
PyTorch 1.6 为 RPC 模块引入了一个新的后端,它利用了 TensorPipe 库(一个针对机器学习的 tensor-aware 点对点通信 primitive,旨在补充 PyTorch 中分布式训练的现有 primitive)。TensorPipe 的成对和异步特性使其能够应用于数据并行之外的新的网络范式:客户端 - 服务器方法以及和模型和 pipeline 并行训练。
[BETA] DDP+RPC
PyTorch Distributed 支持两种强大的范式:用于对模型进行完全同步数据并行训练的 DDP 和支持分布式模型并行的 RPC 框架。在此之前,这两个特性是独立工作的,用户不能混用它们来尝试混合并行范式。
从 PyTorch 1.6 开始,该框架允许 DDP 和 RPC 无缝协作,这样用户就可以结合这两种技术来实现数据并行和模型并行。
[BETA] RPC - 异步用户函数
RPC 异步用户函数( Asynchronous User Function)支持执行用户定义函数时在服务器端生成和恢复的能力。在此特性之前,当被调用方处理请求时,一个 RPC 线程将一直等待,直到用户函数返回。
前端 API 更新
[BETA] 复数
Pythorch1.6 版本提供了对复杂张量的 beta 级支持。包括 torch.complex64 和 torch.complex128 dtypes。
复数在数学和工程中经常出现,特别是在信号处理中,复值神经网络是一个活跃的研究领域。复张量的 beta 版将支持通用的 PyTorch 和复张量功能,以及 Torchaudio、ESPne 等所需的功能。
更新的域库
TORCHVISION 0.7
torchvision 0.7 引入了两个新的预训练语义分割模型,即 FCN ResNet50 和 DeepLabV3 ResNet50,它们都在 COCO 上进行了训练,并且使用的内存占用空间小于 ResNet101。此外还引入了 AMP(自动混合精度),该功能可为不同的 GPU 运算自动选择浮点精度,从而在保持精度的同时提高性能。
TORCHAUDIO 0.6
torchaudio 现在正式支持 Windows,微软负责 Windows 版本。此版本还引入了一个新模块(包含 wav2letter)、若干新功能(contrast, cvm, dcshift, overdrive, vad, phaser, flanger, biquad)、新数据集(GTZAN,CMU)和一个新的可选 sox 后端,支持 TorchScript。