原标题:PyTorch 1.7发布:支持CUDA 11、Windows分布式训练 来源:量子位
关注前沿科技
木易 发自 凹非寺
量子位 报道 | 公众号 QbitAI
自从7月份CUDA 11发布以来,就陆陆续续听到了网友类似的吐槽:
这正说着,10月27日,PyTorch团队发布了PyTorch 1.7,终于能支持CUDA 11了,可喜可贺(狗头)。
除此之外,这次1.7的版本,也带来了许多功能的更新和稳定。
在更新上,有了许多新的应用编程接口,如支持与NumPy兼容的快速傅立叶变换的操作及性能分析工具。
此外,分布式数据并行(DDP)和基于远程过程调用(RPC)的分布式训练也有了重大的更新,在Windows平台上的分布式训练提供支持。
最后,一些功能也稳定了下来,包括torchvision中的本机图像IO,torchaudio中的语音识别、文字转语音等许多功能。
自从PyTorch 1.6开始,PyTorch的功能便分为稳定版(stable),测试版(Beta)和原型版(prototype)。
那么,这次PyTorch 1.7又具体从哪些方面带来了新的功能,这些功能又进展到哪一版本呢?
接下来让我们来快速盘点一下。
前端API
前端API共有3项更新,都是处于测试版状态。
NUMPY兼容的TORCH.FFT模块 [BETA]
PyTorch 1.7版本增加了一个新的torch.fft模块,该模块使用与NumPy相同的API来实现与FFT相关的功能。
对变压器神经网络模块的C++支持 [BETA]
1.7版本更新后,开发人员可以从C++前端直接使用nn.transformer模块抽象。
TORCH.SET_DETERMINISTIC [BETA]
PyTorch 1.7增加了torch.set_determinative(bool)函数,该函数可以指导PyTorch操作者在可用时选择确定性算法,并在操作可能导致不确定性行为时引发运行时错误。
性能&分析
堆栈跟踪添加至探查器 [BETA]
探查器可以帮助操作者追踪操作符的名称及输入等信息,而在1.7版本更新后,他们还可以追踪操作符在代码中的位置。
分布式训练&RPC
分布式训练和RPC有着最多的更新数目——7项,这其中有1项稳定版、5项测试版及1项原型版。
Torchelastic捆绑进PYTORCH DOCKER镜像 [STABLE]
Torchelastic提供了当前torch.distributed.launch命令行界面的严格超集,并增加了容错和弹性功能。
通过将Torchelastic捆绑在与PyTorch相同的docker镜像中,用户可以立即开始试用TorchElastic而不必单独安装。
支持DDP中不均匀的数据集输入 [BETA]
PyTorch 1.7引入了一个新的上下文管理器,该管理器将与使用torch.nn.parallel.DistributedDataParallel训练的模型结合使用,以便能够在不同的过程中使用不均匀的数据集大小进行训练。
NCCL可靠性-异步错误/超时处理 [BETA]
过去由于集合体拥挤,NCCL训练可能会死机。如果检测到潜在的死机,此功能将中止卡住的集合体,并抛离异常或崩溃的程序。
TORCHSCRIPT RPC_REMOTE & RPC_SYNC [BETA]
PyTorch 1.7将功能将扩展到其余两个核心RPC API,完成针对TorchScript支持的主要RPC API,它允许用户使用TorchScript中的现有python RPC API。
分布式优化器的TORCHSCRIPT支持 [BETA]
在PyTorch 1.7中,启用分布式优化器中的TorchScript支持来删除GIL,并使在多线程应用程序中运行优化器成为可能。新的分布式优化器与以前有完全相同的接口,但是它自动将每个工作器中的优化器转换成TorchScript,使每个GIL空闲。
增强基于RPC的分析 [BETA]
PyTorch 1.6首次引入了对将PyTorch分析器与RPC框架结合使用的支持。在PyTorch 1.7中,进行了以下增强:
实现了对通过RPC分析TorchScript函数的更好支持
在与RPC配合使用的探查器功能方面实现了均等
在服务器端增加了对异步RPC函数的支持
分布式训练的WINDOWS支持 [PROTOTYPE]
PyTorch 1.7为Windows平台上的分布式数据并行和集合通信带来了原型支持。
移动支持
PyTorch Mobile通过Cocoapods和JCenter中提供的二进制软件包同时支持iOS和Android。
提高性能的PYTORCH移动缓存分配器 [BETA]
为了减少性能损失,PyTorch 1.7为CPU提供了一个简单的缓存分配器。分配器根据张量大小缓存分配,目前只能通过PyTorch C++ API获得。
视觉工具包torchvision
变换现在支持张量输入、批量计算、图形处理器和TORCHSCRIPT [STABLE]
PyTorch 1.7 实现了以下新功能:
支持图形处理器加速
批量转换,如视频所需
变换多波段torch张量图像(多于3-4个通道)
torchscript将与用户部署的模型一起转换
JPEG和PNG格式的本机图像IO [STABLE]
torchvision 0.8.0引入了针对JPEG和PNG格式的本机图像读取和写入操作。
RETINANET检测模型 [STABLE]
该版本为RetinaNet增加了预处理模型。
新的视频读取API [BETA]
这个版本引入了一个新的视频阅读抽象,它提供了对视频迭代的更细粒度的控制。
它支持图像和音频,并实现了一个迭代器接口,因此它可以与其他python库之间互操作。
音频工具包torchaudio
在此版本中,torchaudio扩展了对模型和端到端应用程序的支持,增加了wav2letter训练管道、端到端文本到语音和源分离管道。
语音识别 [STABLE]
在wav2letter模型的基础上,新版本现在添加了一个带有LibriSpeech数据集的wav2letter训练管道示例。
文字转语音 [STABLE]
新版本添加了一个基于WaveRNN模型的声码器,此外还提供了一个WaveRNN训练管道的例子。
声源分离 [STABLE]
在论文“Conv-TasNet: Surpassing Ideal Time-Frequency Magnitude Masking for Speech Separation”的基础上,增加了ConvTasNet模型,支持声源分离。
网友讨论:PyTorch更直观易懂、更新比TF快
对于PyTorch的更新,在reddit引起了网友其与Tensorflow的讨论。
从网友的讨论来看,直观、易懂似乎是PyTorch胜过Tensorflow的一大优势。
然而,也有网友指出了PyTorch的不足:PyTorch在边缘计算并没有Tensorflow成熟。
最后,还有网友发出了灵魂拷问:
PyTorch更新它的官方支持好像比TF更快?稳定性和更新率,你们更喜欢其中哪一种呢?
如果是你的话,会更喜欢哪一种呢?
参考链接:
https://pytorch.org/blog/pytorch-1.7-released/
https://github.com/pytorch/pytorch/releases
https://www.reddit.com/r/MachineLearning/comments/jj4sr7/d_pytorch_17_released_w_cuda_11_new_apis_for_ffts/?sort=new
(声明:本文仅代表作者观点,不代表新浪网立场。)