我们很高兴地宣布 PyTorch 1.10 发布。自 1.9 版本以来,此版本包含 426 位贡献者的 3,400 多次提交。我们衷心感谢社区不断改进 PyTorch。
PyTorch 1.10 更新重点关注改进 PyTorch 的训练和性能,以及开发人员可用性。完整的发布说明可在此处获取:此处。主要亮点包括:
- CUDA Graphs API 已集成,以减少 CUDA 工作负载的 CPU 开销。
- FX、torch.special 和 nn.Module Parametrization 等多个前端 API 已从 Beta 版升级为稳定版。
- JIT 编译器中对自动融合的支持已扩展到 CPU,除 GPU 之外。
- Android NNAPI 支持现已推出 Beta 版。
除了 1.10 版本,我们还将发布 PyTorch 库的重大更新,您可以在这篇博客文章中阅读相关内容。
前端 API
(稳定版)使用 FX 进行 Python 代码转换
FX 提供了一个 Pythonic 平台,用于转换和降低 PyTorch 程序。它是一个工具包,供通道编写者促进函数和 nn.Module 实例的 Python 到 Python 转换。此工具包旨在支持 Python 语言语义的一个子集(而不是整个 Python 语言),以方便实现转换。在 1.10 版本中,FX 正在升级为稳定版。
您可以在官方文档和GitHub 示例中了解更多关于 FX 的信息,这些示例演示了使用 `torch.fx` 实现的程序转换。
(稳定版)*torch.special*
一个 `torch.special` 模块,类似于 SciPy 的 special 模块,现在已在稳定版中提供。该模块包含 30 个操作,包括 gamma、Bessel 和(高斯)误差函数。
有关更多详细信息,请参阅此文档。
(稳定版)nn.Module 参数化
`nn.Module` 参数化,一个允许用户参数化 `nn.Module` 的任何参数或缓冲区而无需修改 `nn.Module` 本身的功能,已在稳定版中提供。此版本增加了权重归一化 (`weight_norm`)、正交参数化(矩阵约束和剪枝的一部分)以及在创建自己的参数化时更大的灵活性。
(Beta 版)CUDA Graphs API 集成
PyTorch 现在集成了 CUDA Graphs API,以减少 CUDA 工作负载的 CPU 开销。
CUDA Graphs 大大减少了 CPU 密集型 CUDA 工作负载的 CPU 开销,从而通过提高 GPU 利用率来提高性能。对于分布式工作负载,CUDA Graphs 也减少了抖动,由于并行工作负载必须等待最慢的 worker,因此减少抖动可以提高整体并行效率。
集成允许 CUDA Graph 捕获的网络部分与由于 Graph 限制而无法捕获的网络部分之间无缝互操作。
阅读注释以获取更多详细信息和示例,并参阅一般文档以获取更多信息。
[Beta 版] 共轭视图
PyTorch 对复数张量的共轭 (torch.conj()) 现在是一个常数时间操作,并通过调用 torch.is_conj() 返回输入张量的视图,并设置共轭位。这已在各种其他 PyTorch 操作(如矩阵乘法、点积等)中得到利用,以将共轭与操作融合,从而在 CPU 和 CUDA 上显着提高性能并节省内存。
分布式训练
分布式训练发布现在稳定
在 1.10 版本中,分布式包中有许多功能正在从 Beta 版升级为稳定版
- (稳定版)远程模块:此功能允许用户像使用本地模块一样在远程 worker 上操作模块,其中 RPC 对用户透明。有关更多详细信息,请参阅此文档。
- (稳定版)DDP 通信钩子:此功能允许用户覆盖 DDP 如何跨进程同步梯度。有关更多详细信息,请参阅此文档。
- (稳定版)ZeroRedundancyOptimizer:此功能可与 DistributedDataParallel 结合使用,以减少每个进程优化器状态的大小。借助此稳定版本,它现在可以处理不同数据并行 worker 的不均匀输入。请查看此教程。我们还改进了参数分区算法,以更好地平衡跨进程的内存和计算开销。有关更多信息,请参阅此文档和此教程。
性能优化和工具
[Beta 版] 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 标记的支持。
- 支持在移动设备上进行分析:PyTorch 分析器现在与 TorchScript 和移动后端更好地集成,从而能够收集移动工作负载的跟踪。
有关详细信息,请参阅此文档。查看此教程,了解如何开始使用此功能。
PyTorch 移动版
(Beta 版)Android NNAPI 支持处于 Beta 版
去年我们发布了 Android 神经网络 API (NNAPI) 的原型支持。NNAPI 允许 Android 应用程序在驱动手机芯片最强大、最高效的部分运行计算密集型神经网络,包括 GPU(图形处理单元)和 NPU(专用神经网络处理单元)。
自原型以来,我们增加了更多的操作覆盖范围,增加了对加载时灵活形状的支持以及在主机上运行模型进行测试的能力。请使用教程试用此功能。
此外,目标检测示例中添加了迁移学习步骤。请查看此 GitHub 页面 以了解更多信息。请在 论坛 上提供您的反馈或提问。您还可以观看 此演示文稿 以获取概述。
感谢您的阅读。如果您对这些更新感兴趣并希望加入 PyTorch 社区,我们鼓励您加入讨论论坛和GitHub 问题。要获取 PyTorch 的最新消息,请在 Twitter、Medium、YouTube 和 LinkedIn 上关注我们。
祝好!PyTorch 团队