我们很高兴地宣布 PyTorch® 1.13 发布(发行说明)!本次发布包括 BetterTransformer 的稳定版本。我们已弃用 CUDA 10.2 和 11.3,并完成了 CUDA 11.6 和 11.7 的迁移。Beta 版本包括对 Apple M1 芯片和 functorch 的改进支持,functorch 是一个提供可组合 vmap(向量化)和自动微分转换的库,已包含在 PyTorch 发行版中。自 1.12.1 以来,此版本包含超过 3,749 次提交和 467 位贡献者。我们要衷心感谢我们敬业的社区所做的贡献。
摘要
-
BetterTransformer 功能集支持常见 Transformer 模型在推理期间开箱即用的快速路径执行,无需修改模型。其他改进包括加速用于 Transformer 模型中常见尺寸的 add+matmul 线性代数内核,并且 Nested Tensors 现在默认启用。
-
及时弃用旧的 CUDA 版本使我们能够随着 Nvidia® 推出最新的 CUDA 版本而继续引入,从而允许在 PyTorch 中支持 C++17 和新的 NVIDIA Open GPU Kernel Modules。
-
以前,functorch 在单独的软件包中以树外方式发布。安装 PyTorch 后,用户将能够
import functorch
并使用 functorch,而无需安装另一个软件包。 -
PyTorch 正在为使用 Apple 全新 M1 芯片的 Apple® silicon 机器提供原生构建版本作为 Beta 功能,从而在 PyTorch 的 API 中提供改进的支持。
除了 1.13 之外,我们还发布了 PyTorch 库的重大更新,更多详细信息请参阅此博客。
稳定版功能
(稳定版)BetterTransformer API
BetterTransformer 功能集,首次在 PyTorch 1.12 中发布,现已稳定。PyTorch BetterTransformer 支持常见 Transformer 模型在推理期间开箱即用的快速路径执行,无需修改模型。为了补充 Better Transformer 的改进,我们还加速了用于 Transformer 模型中常用尺寸的 add+matmul 线性代数内核。
为了反映出对许多 NLP 用户的性能优势,Nested Tensors 用于 Better Transformer 现在默认启用。为了确保兼容性,将执行掩码检查以确保提供连续掩码。在 Transformer Encoder 中,可以通过设置 mask_check=False 来禁止对 src_key_padding_mask 进行掩码检查。这加快了可以保证仅提供对齐掩码的用户的处理速度。最后,提供了更好的错误消息来诊断不正确的输入,以及改进的诊断,以说明为什么无法使用快速路径执行。
Better Transformer 直接集成到 PyTorch TorchText 库中,使 TorchText 用户能够透明地、自动地利用 BetterTransformer 的速度和效率性能。(教程)
图:BetterTransformer 快速路径执行现在已稳定,并支持使用 Nested Tensor 表示作为默认值的稀疏性优化
引入 CUDA 11.6 和 11.7 并弃用 CUDA 10.2 和 11.3
及时弃用旧的 CUDA 版本使我们能够随着 Nvidia® 推出最新的 CUDA 版本而继续引入,从而使开发人员能够使用 CUDA 的最新功能并从最新版本提供的正确性修复中受益。
CUDA 10.2 的退役。CUDA 11 是第一个支持 C++17 的 CUDA 版本。因此,退役旧版 CUDA 10.2 是在 PyTorch 中添加对 C++17 支持的重要一步。它还有助于通过消除旧版 CUDA 10.2 特定指令来改进 PyTorch 代码。
CUDA 11.3 的退役和 CUDA 11.7 的引入为新的 NVIDIA Open GPU Kernel Modules 带来了兼容性支持,另一个重要的亮点是延迟加载支持。CUDA 11.7 随附 cuDNN 8.5.0,其中包含许多优化,可加速基于 Transformer 的模型,库大小减少 30%,以及运行时融合引擎的各种改进。通过我们的发行说明了解更多关于 CUDA 11.7 的信息。
Beta 版功能
(Beta 版)functorch
受 Google® JAX 的启发,functorch 是一个提供可组合 vmap(向量化)和自动微分转换的库。它支持高级自动微分用例,否则这些用例在 PyTorch 中很难表达。示例包括
我们很高兴地宣布,作为与 PyTorch 更紧密集成迈出的第一步,functorch 已移至 PyTorch 库内部,不再需要安装单独的 functorch 软件包。通过 conda 或 pip 安装 PyTorch 后,您将能够在程序中 import functorch
。通过我们的详细说明、每日构建版和发行说明了解更多信息。
(Beta 版)Intel® VTune™ Profiler 的 Instrumentation and Tracing Technology API (ITT) 集成
当 PyTorch 用户需要在 Intel 平台上使用底层性能指标分析每个操作的性能时,他们能够在 Intel® VTune™ Profiler 中可视化 PyTorch 脚本执行的操作级时间线。
with torch.autograd.profiler.emit_itt():
for i in range(10):
torch.itt.range_push('step_{}'.format(i))
model(input)
torch.itt.range_pop()
通过我们的教程了解更多信息。
(Beta 版)NNC:添加 BF16 和 Channels last 支持
通过向 NNC 添加 channels last 和 BF16 支持,提高了 x86 CPU 上 TorchScript 图模式推理的性能。PyTorch 用户可以在最流行的 x86 CPU 上受益于 channels last 优化,并在 Intel Cooper Lake 处理器和 Sapphire Rapids 处理器上受益于 BF16 优化。在 Intel Cooper Lake 处理器上使用这两种优化,在广泛的视觉模型上观察到 >2 倍的几何平均性能提升。
可以使用现有的 TorchScript、channels last 和 BF16 Autocast API 获得性能优势。请参阅下面的代码片段。我们将把 NNC 中的优化迁移到新的 PyTorch DL 编译器 TorchInductor 中。
import torch
import torchvision.models as models
model = models.resnet50(pretrained=True)
# Convert the model to channels-last
model = model.to(memory_format=torch.channels_last)
model.eval()
data = torch.rand(1, 3, 224, 224)
# Convert the data to channels-lastdata = data.to(memory_format=torch.channels_last)
# Enable autocast to run with BF16
with torch.cpu.amp.autocast(), torch.no_grad():
# Trace the model
model = torch.jit.trace(model, torch.rand(1, 3, 224, 224))
model = torch.jit.freeze(model)
# Run the traced model
model(data)
(Beta 版)M1 设备支持
自 v1.12 以来,PyTorch 一直在为使用 Apple 全新 M1 芯片的 Apple® silicon 机器提供原生构建版本作为原型功能。在此版本中,我们将此功能升级为 Beta 版,从而在 PyTorch 的 API 中提供改进的支持。
我们现在在 M1 macOS 12.6 实例上运行除 torch.distributed
之外的所有子模块的测试。通过这种改进的测试,我们能够修复 cpp 扩展和某些输入的卷积正确性等功能。
要开始使用,只需在运行 macOS 12 或更高版本的 Apple silicon Mac 上使用 Python 的原生版本 (arm64) 安装 PyTorch v1.13 即可。通过我们的发行说明了解更多信息。
原型版功能
(原型版)Arm® Compute Library (ACL) 后端支持 AWS Graviton
我们通过 Arm Compute Library (acl) 为 pytorch 和 torch-xla 模块启用 acl 后端,从而在 aarch64 cpu 上实现了 CV 和 NLP 推理的实质性改进。亮点包括:
- 为 aarch64 torch wheel 启用了 mkldnn + acl 作为默认后端。
- 为 aarch64 bf16 设备启用了 mkldnn matmul 运算符。
- 将 TensorFlow xla+acl 功能引入 torch-xla。我们使用 Arm Compute Library 运行时增强了 aarch64 cpu 的 TensorFlow xla。这些更改包含在 TensorFlow master 和即将推出的 TF 2.10 中。一旦 torch-xla repo 针对 tensorflow 提交进行了更新,它将具有对 torch-xla 的编译支持。与 Graviton3 上 torch 1.12 wheel 相比,我们观察到 MLPerf Bert 推理性能提高了约 2.5-3 倍。
(原型版)CUDA Sanitizer
启用后,sanitizer 开始分析作为用户 PyTorch 代码结果调用的底层 CUDA 操作,以检测由来自不同 CUDA 流的未同步数据访问引起的数据竞争错误。然后,将打印找到的错误以及错误访问的堆栈跟踪,非常类似于 Thread Sanitizer 的工作方式。可以在此处查看简单错误示例和 sanitizer 生成的输出。它对于机器学习应用程序尤其有用,在这些应用程序中,损坏的数据可能很容易被人忽略,并且错误可能并不总是显现出来;sanitizer 将始终能够检测到它们。
(原型版)有限的 Python 3.11 支持
适用于 Linux 且支持 Python 3.11 的二进制文件可通过 pip 下载。请按照入门页面上的说明进行操作。请注意,Python 3.11 支持仅为预览版。特别是,包括 Distributed、Profiler、FX 和 JIT 在内的功能可能尚未完全正常运行。