木易发自凹非寺
量子位报道公众号 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
共有 0 条评论