PyTorch 团队发布了 PyTorch 1.9 版本。该版本整合了 1.8 版本发布以来的 3,400 多次 commit,398 名贡献者参与更新。提供了包括支持科学计算、前端 API、大规模分布式训练等主要改进和新特性。
近年来,深度学习框架 PyTorch 凭借着其对初学者的友好性和灵活性,发展迅猛。不久之前,PyTorch 官方博客发布 1.8 版本,此版本由 1.7 发布以来的 3000 多个 commit 组成,重要更新内容包括在编译、代码优化和科学计算前端 API 方面的优化和改进,以及通过 pytorch.org 提供的二进制文件来支持 AMD ROCm。现在 PyTorch 官方宣布 PyTorch 1.9 发布了!自 PyTorch 1.8 版本发布以来,本次新版本的发布包含了 3,400 多个 commit,398 名贡献者参与更新。本次新版的更新,主要包含以下亮点:支持科学计算方面的重大改进,现已支持 torch.linalg、torch.special 以及 Complex Autograd;
使用 Mobile Interpreter 对设备上的二进制大小进行重大改进;
通过 TorchElastic 向 PyTorch Core 上游提供对弹性容错训练的本地支持;
PyTorch RPC 框架的更新,以支持 GPU 的大规模分布式训练;
为模型推理部署优化性能和封装的新 API;
支持 PyTorch Profiler 中的分布式训练、GPU 利用率和 SM efficiency。
(注:从 PyTorch 1.6 版本开始,PyTorch 特性分为 Stable(稳定版)、Beta(测试版)和 Prototype(原型版)。此外,除了 PyTorch 1.9 的发布,该团队还发布了 PyTorch 库的主要更新。PyTorch 库更新地址:https://pytorch.org/blog/pytorch-1.9-new-library-releases/torch.linalg:在 PyTorch 1.9 中, torch.linalg 模块正在向稳定版本靠近。线性代数对深度学习和科学计算至关重要,torch.linalg 模块扩展了 PyTorch 对线性代数的支持,实现了 NumPy 的线性代数模块(现在支持 accelerators 和 autograd)中的每一个函数等等。为了帮助调试和编写程序,PyTorch 1.9 包含了 torch.use_determinstic_algorithms option。启用此设置后,如果可能,操作的行为将是确定性的;如果操作的行为不可确定,则抛出运行时错误。以下是几个例子:PyTorch 团队正在发布 Mobile Interpreter,一个 PyTorch 运行时的简化版本,beta 版。Interpreter 将在边缘设备中执行 PyTorch 程序,减少二进制大小的占用。TorchVision 库:从 PyTorch 1.9 开始,用户可以在 iOS/Android 应用程序上使用 TorchVision 库。Torchvision 库包含了 C++ 的 Torchvision 操作,需要与 iOS 的主 PyTorch 库链接在一起,对于 Android,可以将其作为一个 gradle 依赖添加。这允许使用 TorchVision 预先构建的 MaskRCNN 操作符进行对象检测和分割。PyTorch 团队正在发布一个基于 PyTorch Video 库的新视频应用程序和一个基于最新 torchaudio、wave2vec 模型的更新语音识别应用程序。这两个版本都可以在 iOS 和 Android 上使用。此外,研究团队还更新了 7 个计算机视觉和 3 个自然语言处理演示应用程序,包括 HuggingFace DistilBERT 和 DeiT Vision transformer 模型,以及 PyTorch Mobile v1.9。随着这两个应用程序的加入,现在提供了一整套演示应用程序,包括图像、文本、音频和视频。TorchElastic 现在是 PyTorch 核心的一部分。可以让 PyTorch 分布式训练具备弹性伸缩与自动容错的能力。当分布式训练中某个 worker 发生异常错误 (如机器宕机)、高优先级任务抢占资源等情况时,支持 worker 重启或转移而不需要停止训练。可以先运行在最小资源集合下,当有更多空闲资源时,可以动态扩容 worker 数运行在更多的资源上以便提升训练效率;当部分资源因某些原因要释放时,也可以动态缩容 worker 数释放占用的部分资源。弹性 (Elastic): 可以先运行在最小资源集合下,当有更多空闲资源时,可以动态扩容 worker 数运行在更多的资源上以便提升训练效率;当部分资源因某些原因要释放时,也可以动态缩容 worker 数释放占用的部分资源。Freezing API:模块冻结是将模块参数和属性值作为常量内联到 TorchScript 内部表示中的过程。这允许进一步优化和专门化程序,包括 TorchScript 优化,optimize_for_mobile API 、ONNX 和其他工具都使用它。在模型部署时推荐 Freezing。这是训练、调优或调试 PyTorch 模型所必需的。它支持在非冻结图形上语义无效的图形融合,例如 fusing Conv-BN。PyToch 1.9 对 torch.profiler API 的支持扩展到更多版本,包括 Windows 和 Mac,而不是以前的 torch.autograd.profiler API。新 API 支持现有的 profiler 功能,与 CUPTI 库(仅限 Linux)集成,跟踪设备 CUDA 内核,并支持长期运行作业,例如:推理模式 API 可以显着提高推理工作负载的速度,同时保持安全并确保永远不会计算出不正确的梯度。