内容导读:近来,PyTorch 团队在官方博客宣布 Pytorch 1.13 发布。本文将具体围绕新版别的 4 大亮点打开介绍。
据官方介绍,PyTorch 1.13 中包含了 BetterTransformer 的安稳版,且不再支撑 CUDA 10.2 及 11.3,并完成了向 CUDA 11.6 及 11.7 的迁移。此外 Beta 版还添加了对 Apple M1 芯片及 functorch 的支撑。
PyTorch 1.13 不行错失的亮点汇总:
1.BetterTransformer 功能集 (feature set) 支撑一般的 Transformer 模型在推理过程中,无需修正模型即可进行 fastpath 履行。
此外改善还包含对 Transformer 模型中常用 size 进行加快的 add+matmul 线性代数内核,现已默认启用嵌套 Tensor。
2.不再支撑旧的 CUDA 版别,引进 Nvidia 推出的最新 CUDA 版别。这使得 PyTorch 和新的 NVIDIA Open GPU 内核模块得以支撑 C++17 。
3.functorch 从独自软件包变为可直接经过 import functorch
导入 PyTorch 运用,无需再独自装置。
4.测验为 M1 芯片 Mac 供给本地构建,并供给更好的 PyTorch API 支撑。
Stable Features
1. BetterTransformer API
BetterTransformer 功能集 (feature set) 支撑一般的 Transformer 模型在推理过程中,无需修正模型即可进行 fastpath 履行。
作为弥补,PyTorch 1.13 中还针对 Transformer 模型中常用的 size,加快了 add+matmul 线性代数内核。
为了提高 NLP 模型功能,PyTorch 1.13 中的 BetterTransformer 默认启用嵌套 Tensor (Nested Tensor)。 在兼容性方面,履行 mask check 保证能供给接连 mask。
Transformer Encoder 中 src_key_padding_mask 的 mask check 能够经过设置 mask_check=False 屏蔽。该设置能够加快处理速度,而非仅供给对齐的 mask。
最终,供给了更好的报错信息,简化过错输入的确诊,一同为 fastpath execution 过错供给了更佳的确诊办法。
Better Transformer 直接集成到 PyTorch TorchText 库中 , 这使得 TorchText 用户能够更轻松地利用 BetterTransformer 的速度及功率功能。
2. 引进 CUDA 11.6 和 11.7,不再支撑 CUDA 10.2 和 11.3
CUDA 11 是第一个支撑 C++17 的 CUDA 版别,不再支撑 CUDA 10.2 是推动 PyTorch 支撑 C++17 的重要一步,还能经过消除遗留的 CUDA 10.2 特定指令,来改善 PyTorch 代码。
CUDA 11.3 的退出和 11.7 的引进,使得 PyTorch 对 NVIDIA Open GPU 内核模块的兼容性更好,另一个重要的亮点是对推迟加载 (lazy loading) 的支撑。
CUDA 11.7 自带 cuDNN 8.5.0,包含很多优化,可加快基于 Transformer 的模型,库的 size 削减 30% ,并对 runtime fusion engine 进行了各种改善。
Beta Features
1. functorch
与 Google JAX 相似,functorch 是 PyTorch 中的一个库,供给可组合的 vmap(矢量化)和 autodiff 转换。 它支撑高级的 autodiff 用例(在 PyTorch 中难以表达),包含:
-
模型集成 model ensembling
-
高效核算Jacobian 和 Hessians
-
核算 per-sample-gradients 或其他 per-sample quantities
PyTorch 1.13 内置 functorch 库,无需独自装置。 经过 conda 或 pip 装置 PyTorch 后,就能够在程序中 import functorch
了。
2. 集成英特尔 VTune™ Profiler 及 ITT
PyTorch 用户如果期望在英特尔平台上用底层功能指标来分析每个算子的功能时,能够在英特尔 VTune™ Profiler 中可视化 PyTorch 脚本履行的算子级 timeline。
with torch.autograd.profiler.emit_itt():
for i in range(10):
torch.itt.range_push('step_{}'.format(i))
model(input)
torch.itt.range_pop()
3. NNC:添加 BF16 和 Channels last 支撑
经过在 NNC 中添加 Channels last 和 BF16 的支撑,TorchScript 在 x86 CPU 上的 graph-mode 推理功能得到了显著提高。
在英特尔 Cooper Lake 处理器上,经过这两项优化,能够使得视觉模型功能达到 2 倍以上的提高。
经过现有的 TorchScript、Channels last 以及 BF16 Autocast API, 能够完成功能提高。如下所示,NNC 中的优化将迁移到新的 PyTorch DL Compiler 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 modelmodel = torch.jit.trace(model, torch.rand(1, 3, 224, 224))
model = torch.jit.freeze(model)
# Run the traced model
model(data)
4. 添加对 M1 芯片苹果设备的支撑
自 1.12 版别以来,PyTorch 一直致力于为苹果 M1 芯片供给原生构建。PyTorch 1.13 进一步改善了相关 API。
PyTorch 1.13 在 M1 macOS 12.6 实例上进行了除 torch.distribution 之外的所有子模块测验。这些改善后的测验,能够修正 cpp 扩展以及某些输入的 convolution correctnes 等功能。
留意: 该功能要求 M1 芯片的 macOS 12 或更高版别,并运用原生 Python (arm64) 。
Prototype Features
1. 针对AWS Graviton 的 ACL 后端支撑
PyTorch 1.13 经过 Arm Compute Library (ACL) 在 aarch64 CPU 上完成了 CV 和 NLP 推理的实质性提高 , 这使得 ACL 后端得以支撑 PyTorch 及 torch-xla 模块。亮点包含:
-
启用 mkldnn+acl 作为 aarch64 torch wheel 的默认后端
-
为 arch64 BF16 设备启用 mkldnn matmul operator
-
将 TensorFlow xla+acl 功能引进 torch-xla。
2. CUDA Sanitizer
启用后,Sanitizer 将开始分析因用户的 PyTorch 代码而调用的底层 CUDA operation,以检测数据争用报错 (data race error)。
注: 这些报错是由源自不同 CUDA Stream 的不同步数据拜访而导致的。
与 Thread Sanitizer 相似,定位到的报错会与过错拜访的仓库 trace 一同打印出来。
机器学习应用中损坏的数据很容易被忽略,报错有时候也并不闪现,因而用于检测并定位过错的 CUDA Sanitizer 就分外重要了。
3. 部分支撑Python 3.11
用户可经过 pip 下载支撑 Python 3.11 的 Linux 二进制文件。不过这个功能只是一个 preview 版,Distributed、Profiler、FX 和 JIT 等功能并未完全支撑。
从 0 到 1,学习 PyTorch 官方教程
OpenBayes.com 现已上线多个中文 PyTorch 官方教程,包含但不限于 NLP,CV,DL 等多个实例,您能够拜访控制台,在公开资源中查找查看。
运行 PyTorch 中文教程,点击文末阅读原文,或拜访以下链接:
openbayes.com/console/pub…