跳转到主要内容
博客

PyTorch 1.10 发布,包括 CUDA Graphs API、前端和编译器改进

作者: 2021 年 10 月 21 日2024 年 11 月 15 日暂无评论

我们很高兴地宣布 PyTorch 1.10 发布。自 1.9 版本以来,此版本包含 426 位贡献者提交的 3,400 多个更改。我们衷心感谢社区不断改进 PyTorch。

PyTorch 1.10 的更新主要集中于改进 PyTorch 的训练和性能,以及开发人员的可用性。完整的发布说明可在此处获取:链接。亮点包括:

  1. 集成了 CUDA 图形 API,以减少 CUDA 工作负载的 CPU 开销。
  2. FX、torch.special 和 nn.Module Parametrization 等多个前端 API 已从 Beta 版升级为稳定版。
  3. JIT 编译器中对自动融合的支持扩展到 CPU,除了 GPU。
  4. Android NNAPI 支持现已提供 Beta 版。

除了 1.10,我们还发布了 PyTorch 库的重大更新,您可以在此博客文章中阅读相关内容。

前端 API

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

FX 提供了一个 Pythonic 平台,用于转换和降低 PyTorch 程序。它是一个工具包,供传递编写者使用,以促进函数和 nn.Module 实例的 Python 到 Python 转换。此工具包旨在支持 Python 语言语义的一个子集(而不是整个 Python 语言),以简化转换的实现。在 1.10 版本中,FX 升级为稳定版。

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

(稳定) torch.special

一个类似于 SciPy 的特殊模块torch.special 模块现已提供稳定版。该模块有 30 个操作,包括伽马函数、贝塞尔函数和(高斯)误差函数。

请参阅此文档了解更多详细信息。

(稳定)nn.Module Parametrization

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

请参阅此教程和通用文档了解更多详细信息。

(Beta)CUDA 图形 API 集成

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

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

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

阅读此说明了解更多详细信息和示例,并参阅通用文档了解更多信息。

[Beta] 共轭视图

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

分布式训练

分布式训练发布现在为稳定版

在 1.10 版本中,分布式包中有许多功能从 Beta 版升级为稳定版

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

性能优化和工具

[Beta] TorchScript 中的配置文件导向类型推断

TorchScript 对源代码具有严格要求,必须有类型注解才能成功编译。长期以来,只能通过试错法(即通过逐个修复 torch.jit.script 生成的类型检查错误)添加缺失或不正确的类型注解,这种方法效率低下且耗时。

现在,我们通过利用 MonkeyType 等现有工具为 torch.jit.script 启用了配置文件导向类型推断,这使得过程更简单、更快、更高效。有关更多详细信息,请参阅文档

(Beta)CPU 融合

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

(Beta)PyTorch Profiler

PyTorch Profiler 的目标是找出耗时和/或内存开销最大的执行步骤,并可视化 GPU 和 CPU 之间工作负载的分布。PyTorch 1.10 包含以下主要功能:

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

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

PyTorch Mobile

(Beta)Android NNAPI 支持处于 Beta 阶段

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

自原型发布以来,我们增加了更多操作覆盖范围,添加了对加载时灵活形状的支持以及在主机上运行模型进行测试的功能。使用此教程试用此功能。

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

感谢您的阅读。如果您对这些更新感兴趣并希望加入 PyTorch 社区,我们鼓励您加入讨论论坛开放 GitHub 问题。要获取 PyTorch 的最新消息,请在 TwitterMediumYouTubeLinkedIn 上关注我们。

祝好!PyTorch 团队