由 PyTorch 团队

我们非常高兴地宣布 PyTorch 1.10 的发布。这次发布自 1.9 版本以来,共有 426 位贡献者提交了超过 3,400 次提交。我们衷心感谢我们的社区不断改进 PyTorch。

PyTorch 1.10 的更新主要集中在提升 PyTorch 的训练和性能,以及开发者易用性。完整的发布说明请在此处查看。亮点包括:

  1. 集成了 CUDA Graphs API,以减少 CUDA 工作负载的 CPU 开销。
  2. 几个前端 API,如 FX、torch.special 和 nn.Module 参数化,已从测试版升级到稳定版。
  3. JIT 编译器中自动融合的支持扩展到 CPU 和 GPU。
  4. 现在 Android NNAPI 支持已进入测试版。

除了 1.10 版本外,我们还发布了 PyTorch 库的重大更新,您可以在本博客文章中了解详情。

前端 API

(稳定) 使用 FX 进行 Python 代码转换

FX 提供了一个 Pythonic 的平台,用于转换和降低 PyTorch 程序。它是一个工具包,用于帮助 pass writers 简化函数和 nn.Module 实例的 Python 到 Python 转换。此工具包旨在支持 Python 语言语义的子集——而不是整个 Python 语言——以简化转换的实现。在 1.10 版本中,FX 正在转向稳定。

您可以在官方文档和 GitHub 上找到使用 torch.fx 实现的程序转换示例,了解更多关于 FX 的信息。

(稳定) torch.special

类似于 SciPy 的专用模块,现在已稳定提供。该模块包含 30 个操作,包括伽马、贝塞尔和(高斯)误差函数。

请参阅此文档以获取更多详细信息。

(稳定)nn.Module 参数化

nn.Module 参数化,一个允许用户对 nn.Module 的任何参数或缓冲区进行参数化而无需修改 nn.Module 本身的功能,现在已稳定提供。此版本增加了权重归一化( weight_norm )、正交参数化(矩阵约束和部分剪枝)以及创建自己的参数化时的更多灵活性。

请参阅本教程和一般文档以获取更多详细信息。

(Beta) CUDA 图形 API 集成

PyTorch 现在集成了 CUDA 图形 API,以减少 CUDA 工作负载的 CPU 开销。

CUDA 图形大大减少了 CPU 开销,对于 CPU 密集型的 cuda 工作负载,从而通过提高 GPU 利用率来提升性能。对于分布式工作负载,CUDA 图形还可以减少抖动,因为并行工作负载必须等待最慢的工人,减少抖动可以提高整体并行效率。

集成允许在由 cuda 图捕获的网络部分与由于图限制无法捕获的网络部分之间实现无缝互操作。

读取注释以获取更多详细信息,并参考通用文档以获取更多信息。

[测试版] 共轭视图

PyTorch 对复数张量的共轭操作(torch.conj())现在是一个常数时间操作,并返回一个设置共轭位的输入张量视图,如通过调用 torch.is_conj()所见。这已经在各种其他 PyTorch 操作中得到了利用,如矩阵乘法、点积等,将共轭与操作融合,从而在 CPU 和 CUDA 上实现了显著的性能提升和内存节省。

分布式训练

分布式训练版本现已稳定发布

在 1.10 版本中,分布式包中有许多功能将从测试版迁移到稳定版:

  • (稳定版)远程模块:此功能允许用户像使用本地模块一样在远程工作器上操作模块,其中 RPC 对用户是透明的。请参阅此文档以获取更多详细信息。
  • (稳定版)DDP 通信钩子:此功能允许用户覆盖 DDP 如何在进程间同步梯度。请参阅此文档以获取更多详细信息。
  • (稳定版) ZeroRedundancyOptimizer:该功能可以与 DistributedDataParallel 结合使用,以减少每个进程优化器状态的大小。在这个稳定版本中,它现在可以处理不同数据并行工作者的不均匀输入。查看这篇教程。我们还改进了参数分区算法,以更好地平衡进程间的内存和计算开销。请参阅此文档和这篇教程以了解更多信息。

性能优化和工具

[测试版] TorchScript 中的基于配置文件的类型推导

TorchScript 对源代码有硬性要求,必须包含类型注解才能成功编译。长期以来,只能通过试错(即逐个修复由 torch.jit.script 生成的类型检查错误)来添加缺失或错误的类型注解,这既低效又耗时。

现在,我们已经通过利用现有的工具如 MonkeyType,为 torch.jit.script 启用了基于配置的自动类型推导,这使得整个过程变得更加简单、快速和高效。更多详情请参阅文档。

(Beta) CPU 融合

在 PyTorch 1.10 版本中,我们为 CPU 添加了一个基于 LLVM 的 JIT 编译器,它可以融合一系列 torch 库调用以提升性能。虽然我们已经在 GPU 上拥有这项能力一段时间了,但这次发布是我们首次将编译功能引入 CPU。
您可以在本 Colab 笔记本中查看一些性能结果。

(Beta) PyTorch 性能分析器

PyTorch 性能分析器的目标是针对耗时最长和/或占用内存最多的执行步骤,并可视化 GPU 和 CPU 之间的工作负载分布。PyTorch 1.10 包含以下关键特性:

  • 增强内存视图:这有助于您更好地理解内存使用情况。此工具将帮助您通过显示程序运行过程中的活动内存分配来避免内存不足错误。
  • 增强自动推荐:这有助于提供自动性能推荐,以帮助优化您的模型。这些工具推荐对批量大小、TensorCore、内存减少技术等进行更改。
  • 增强内核视图:额外列显示网格和块大小,以及每个线程的共享内存使用量和寄存器。
  • 分布式训练:现在支持 Gloo 进行分布式训练作业。
  • 前向和反向传播中的关联算子:这有助于将前向传播中找到的算子映射到反向传播,反之亦然,在跟踪视图中。
  • TensorCore:此工具显示 Tensor Core(TC)的使用情况,并为数据科学家和框架开发者提供建议。
  • NVTX:将 NVTX 标记的支持从旧版 autograd 分析器移植过来。
  • 支持在移动设备上分析:PyTorch 分析器现在与 TorchScript 和移动后端有更好的集成,能够为移动工作负载收集跟踪信息。

请参阅此文档以获取详细信息。查看此教程以了解如何开始使用此功能。

PyTorch 移动

(Beta) Android NNAPI 支持测试版

去年我们发布了针对 Android 神经网络 API (NNAPI) 的原型支持。NNAPI 允许 Android 应用在手机芯片最强大和高效的部件上运行计算密集型神经网络,包括 GPU(图形处理单元)和 NPU(专用神经网络单元)。

自从原型以来,我们增加了更多操作覆盖范围,添加了支持动态形状和能够在主机上运行模型进行测试的能力。请使用教程尝试此功能。

此外,在目标检测示例中添加了迁移学习步骤。请查看此 GitHub 页面了解更多信息。请在论坛上提供反馈或提问。您还可以查看此演示文稿以获取概述。

感谢阅读。如果您对这些更新感兴趣并想加入 PyTorch 社区,我们鼓励您加入讨论论坛和 GitHub 问题。要获取 PyTorch 的最新消息,请关注我们的 Twitter、Medium、YouTube 和 LinkedIn。

干杯!PyTorch 团队