共计 3568 个字符,预计需要花费 9 分钟才能阅读完成。
内容导读:近日,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 model
model = 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 中文教程,拜访以下链接:https://openbayes.com/console…