我们非常高兴地宣布 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 模型执行 fastpath,无需修改模型。其他改进还包括加速了在 Transformer 模型中常用大小的线性代数内核(add+matmul),并且默认启用了嵌套张量。
-
及时弃用较旧的 CUDA 版本,使我们能够随着 Nvidia®推出的最新 CUDA 版本而引入,从而允许 PyTorch 支持 C++17 以及新的 NVIDIA Open GPU 内核模块。
-
之前,functorch 以树外形式作为单独的包发布。安装 PyTorch 后,用户将能够使用
import functorch
并无需安装其他包即可使用 functorch。 -
PyTorch 正为使用苹果公司新 M1 芯片的苹果®硅机器提供原生构建,作为测试功能,为 PyTorch 的 API 提供改进的支持。
稳定 | 测试版 | 原型 |
---|---|---|
更好的 Transformer | 启用 Intel® VTune™ Profiler 的仪器和跟踪技术 API | 支持 AWS Graviton 的 Arm®计算库后端 |
CUDA 10.2 和 11.3 CI/CD 弃用 | 将 NNC 扩展以支持通道最后和 bf16 | CUDA 清理器 |
Functorch 现已纳入 PyTorch 核心库 | ||
M1 设备 Beta 支持 |
随着版本 1.13 的发布,我们还发布了 PyTorch 库的重大更新,更多详情请查看本博客。
稳定功能
(稳定) 更好的 BetterTransformer API
BetterTransformer 功能集,首次在 PyTorch 1.12 版本中发布,已稳定。PyTorch BetterTransformer 支持在推理过程中直接进行常见 Transformer 模型的 fastpath 执行,无需修改模型。为了补充 Better Transformer 的改进,我们还加速了在 Transformer 模型中常用大小的 add+matmul 线性代数内核。
反映了许多 NLP 用户的性能优势,Nested Tensors 在 Better Transformer 中的使用现在默认启用。为确保兼容性,将执行掩码检查以确保提供连续的掩码。在 Transformer 编码器中,可以通过设置 mask_check=False 来抑制 src_key_padding_mask 的掩码检查。这加速了可以保证只提供对齐掩码的用户处理。最后,提供了更好的错误消息来诊断不正确的输入,以及改进了为什么不能使用 fastpath 执行的诊断。
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 的更多信息,请参阅我们的发布说明。
测试功能
(测试版) functorch
受 Google® JAX 启发,functorch 是一个提供可组合的 vmap(向量化)和自动微分转换的库。它使原本在 PyTorch 中难以表达的高级自动微分用例成为可能。例如包括:
我们很高兴地宣布,作为与 PyTorch 更紧密集成的一步,functorch 已移至 PyTorch 库内部,不再需要安装单独的 functorch 包。通过 conda 或 pip 安装 PyTorch 后,您可以在程序中`导入 functorch`。请参阅我们的详细说明、夜间和发布说明了解更多信息。
(Beta) Intel® VTune™ Profiler 的仪器和跟踪技术 API(ITT)集成
PyTorch 用户可以在需要分析每操作性能的底层性能指标时,在 Intel® VTune™ Profiler 中可视化 PyTorch 脚本的 op 级时间线。
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 支持,提高了 x86 CPU 上 TorchScript 图模式推理的性能。PyTorch 用户可以从大多数流行的 x86 CPU 上的通道最后优化中受益,并从 Intel Cooper Lake 处理器和 Sapphire Rapids 处理器上的 BF16 优化中受益。在 Intel Cooper Lake 处理器上,这两种优化使得在广泛视觉模型上观察到 2X 的几何平均性能提升。
可以通过现有的 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 为使用苹果公司新 M1 芯片的苹果硅机器提供原生构建,作为原型功能。在这个版本中,我们将此功能提升到 Beta 版本,提供对 PyTorch API 的改进支持。
我们现在在 M1 macOS 12.6 实例上对所有子模块进行测试,除了 torch.distributed
。通过这次改进的测试,我们修复了 cpp 扩展和某些输入的卷积正确性等功能。
要开始使用,只需在运行 macOS 12 或更高版本的 Apple 硅 Mac 上安装 PyTorch v1.13,并使用原生的 arm64 版本 Python。通过我们的发布说明了解更多信息。
原型功能
(原型)Arm®计算库(ACL)后端支持 AWS Graviton
我们在 aarch64 cpu 上使用 Arm Compute Library(acl)实现了 CV 和 NLP 推理的显著改进,以启用 acl 后端对 pytorch 和 torch-xla 模块的支持。亮点包括:
- 将 mkldnn + acl 设置为 aarch64 torch wheel 的默认后端。
- 为 aarch64 bf16 设备启用了 mkldnn 矩阵乘法运算符。
- 将 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
当启用时,该清理器开始分析由用户 PyTorch 代码引发的底层 CUDA 操作,以检测由不同 CUDA 流引起的未同步数据访问导致的数据竞争错误。找到的错误将连同故障访问的堆栈跟踪一起打印出来,类似于 Thread Sanitizer。可以在此处查看一个简单的错误和清理器产生的输出示例。对于机器学习应用来说,特别有用,因为损坏的数据可能很容易被人类忽略,并且错误可能并不总是表现出来;清理器总能检测到它们。
(原型) Python 3.11 支持有限
可通过 pip 下载支持 Python 3.11 的 Linux 二进制文件。请按照“入门”页面上的说明操作。请注意,Python 3.11 支持仅为预览版。特别是,包括 Distributed、Profiler、FX 和 JIT 在内的功能可能尚不完全可用。