我们很高兴地宣布发布 PyTorch® 1.13(发布说明)!其中包括 BetterTransformer 的稳定版本。我们已弃用 CUDA 10.2 和 11.3,并完成了 CUDA 11.6 和 11.7 的迁移。Beta 版包括对 Apple M1 芯片的改进支持和 functorch,这是一个提供可组合 vmap(矢量化)和自动微分转换的库,已随 PyTorch 发布一起包含在源码树中。自 1.12.1 以来,此版本包含超过 3,749 次提交和 467 位贡献者。我们衷心感谢我们敬业的社区所做的贡献。
总结
- 借助 BetterTransformer 功能集,在推理过程中,通用 Transformer 模型可以直接支持快速路径执行,而无需修改模型。其他改进包括加速 add+matmul 线性代数内核,以适应 Transformer 模型中常用的尺寸,并且嵌套张量现在默认启用。
- 及时弃用旧版 CUDA 使我们能够继续引入 Nvidia® 推出的最新 CUDA 版本,从而支持 PyTorch 中的 C++17 和新的 NVIDIA 开放 GPU 内核模块。
- 此前,functorch 是作为单独的包在源码树外发布的。安装 PyTorch 后,用户将能够 `import functorch` 并使用 functorch,而无需安装其他包。
- PyTorch 为使用 Apple 新 M1 芯片 的 Apple® 芯片机器提供原生构建,作为 Beta 功能,从而在 PyTorch 的 API 中提供改进的支持。
除了 1.13 版,我们还发布了 PyTorch 库的重大更新,更多详细信息可在此博客中找到。
稳定版功能
(稳定版)BetterTransformer API
BetterTransformer 功能集于 PyTorch 1.12 版首次发布,现已稳定。PyTorch BetterTransformer 支持通用 Transformer 模型在推理过程中开箱即用的快速路径执行,无需修改模型。为了补充 Better Transformer 的改进,我们还加速了 add+matmul 线性代数内核,以适应 Transformer 模型中常用的尺寸。
为了体现对许多 NLP 用户的性能优势,Better Transformer 使用嵌套张量现在默认启用。为确保兼容性,会执行掩码检查以确保提供连续的掩码。在 Transformer Encoder 中,可以通过设置 mask_check=False 来抑制 src_key_padding_mask 的掩码检查。这加速了那些可以保证仅提供对齐掩码的用户的处理。最后,提供了更好的错误消息来诊断不正确的输入,以及改进了无法使用快速路径执行的原因的诊断。
Better Transformer 直接集成到 PyTorch TorchText 库中,使 TorchText 用户可以透明地自动利用 BetterTransformer 的速度和效率性能。(教程)

图:BetterTransformer 快速路径执行现在已稳定,并默认使用嵌套张量表示启用稀疏优化
引入 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 开放 GPU 内核模块的兼容性支持,另一个重要的亮点是惰性加载支持。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 和通道优先支持
通过在 NNC 中添加通道优先和 BF16 支持,TorchScript 图模式推理在 x86 CPU 上的性能得到提升。PyTorch 用户可以从最流行的 x86 CPU 上的通道优先优化中受益,并从 Intel Cooper Lake 处理器和 Sapphire Rapids 处理器上的 BF16 优化中受益。在 Intel Cooper Lake 处理器上,通过这两个优化,在广泛的视觉模型上观察到 >2 倍的几何平均性能提升。
现有 TorchScript、通道优先和 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® 芯片机器的原生构建作为原型功能提供。在此版本中,我们将此功能提升到测试版,从而在 PyTorch 的 API 中提供改进的支持。
我们现在在 M1 macOS 12.6 实例上运行除 `torch.distributed` 之外的所有子模块的测试。通过这种改进的测试,我们能够修复诸如 cpp 扩展和某些输入的卷积正确性等功能。
要开始使用,只需在您的 Apple 芯片 Mac 上安装 PyTorch v1.13,该 Mac 运行 macOS 12 或更高版本,并使用原生版本 (arm64) 的 Python。通过我们的发布说明了解更多信息。
原型功能
(原型)AWS Graviton 对 Arm® Compute Library (ACL) 后端的支持
我们通过 Arm Compute Library (ACL) 在 aarch64 CPU 上实现了 CV 和 NLP 推理的显著改进,以支持 pytorch 和 torch-xla 模块的 ACL 后端。亮点包括:
- 启用 mkldnn + acl 作为 aarch64 torch wheel 的默认后端。
- 为 aarch64 bf16 设备启用 mkldnn matmul 操作符。
- 将 TensorFlow xla+acl 功能引入 torch-xla。我们增强了 TensorFlow xla,使其支持 aarch64 cpu 的 Arm Compute Library 运行时。这些更改已包含在 TensorFlow master 中,并将包含在即将发布的 TF 2.10 中。一旦 torch-xla 仓库针对 TensorFlow 提交进行更新,它将支持 torch-xla 的编译。与 Graviton3 上的 torch 1.12 wheel 相比,MLPerf Bert 推理观察到约 2.5-3 倍的改进。
(原型)CUDA Sanitizer
启用后,sanitizer 将开始分析用户 PyTorch 代码导致的低级 CUDA 操作,以检测由不同 CUDA 流的未同步数据访问引起的数据竞争错误。然后会打印发现的错误以及错误的访问堆栈跟踪,就像线程 Sanitizer 所做的那样。一个简单错误和 sanitizer 产生的输出示例可以在此处查看。它对机器学习应用程序特别有用,因为对于人类来说,损坏的数据很容易被遗漏,而且错误可能并不总是显现出来;sanitizer 将始终能够检测到它们。
(原型)有限的 Python 3.11 支持
支持 Python 3.11 的 Linux 二进制文件可通过 pip 下载。请按照入门页面上的说明进行操作。请注意,Python 3.11 支持仅为预览版。特别是,分布式、性能分析器、FX 和 JIT 等功能可能尚未完全正常运行。