PyTorch 1.13 正式发布:CUDA 升级、集成多个库、M1 芯片支持
创始人
2024-01-19 13:33:35
0

内容导读:近日,PyTorch 团队在官方博客宣布 Pytorch 1.13 发布。本文将详细围绕新版本的 4 大亮点展开介绍。

据官方介绍,PyTorch 1.13 中包括了 BetterTransformer 的稳定版,且不再支持 CUDA 10.2 及 11.3,并完成了向 CUDA 11.6 及 11.7 的迁移。此外 Beta 版还增加了对 Apple M1 芯片及 functorch 的支持。fuctorch 是 PyTorch 中的一个库 提供可组合的 vmap(向量化)和 autodiff 转换

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 的速度及效率性能。

Betterformfast 的 fastpath 执行现已稳定可用 并默认启用嵌套张量表示的稀疏优化

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。

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 modelmodel(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/public/tutorials

在这里插入图片描述

相关内容

热门资讯

样式声明——文本属性 系列文章目录 前端系列文章——传送门 CSS系列文章——传送门 文章目录系列文章目录1.文本的颜色...
springcloud3 Se... 一 分布式事务 1.1 分布式事务 一次业务操作需要跨多个数据源或者需要跨多个系统进行远程调用&#x...
Hadoop--万恶NameN... 每次用到Hadoop集群时NameNode总有各种各样奇奇怪怪的问题启动不了或者hdfs用9870端...
小学安全工作计划 【精选】小学安全工作计划汇编8篇  日子如同白驹过隙,我们又将迎来新一轮的努力,为此需要好好地写一份...
小学综合实践工作计划 小学综合实践工作计划(精选20篇)  光阴迅速,一眨眼就过去了,我们又有了新的工作,是时候认真思考工...
机器人误差动力学与PID控制 #机器人 #控制 #误差动力学 #设定点控制 #计算力矩控制器 #PID控制 详细可参考书本:《现代...
3.19百度移动端 一连三... 记录一下第一次面试过程,积德求offer😭 预约的3.19上午九点的面...
如何学习深度学习 深度学习是机器学习领域中的一个分支,它通过多层神经网络来建模和解决各种问题。深度学习已...
秋季学期幼儿园教师的工作计划 2021年秋季学期幼儿园教师的工作计划(精选5篇)  时间过得真快,总在不经意间流逝,我们的工作又迈...
小学班级工作计划 小学班级工作计划(通用17篇)  时间过得飞快,我们的工作又进入新的阶段,为了今后更好的工作发展,此...
0-1背包问题dp[][]/d... 先推荐个视频b站算法训练营一、类型1,重量限制题目:给定N个物品,每个物...
教学工作计划 精选教学工作计划范文集锦5篇  时间的脚步是无声的,它在不经意间流逝,成绩已属于过去,新一轮的工作即...
幼儿园秋季园务工作计划 幼儿园2020秋季园务工作计划  一、指导思想:  本学期我们根据园务计划,为幼儿提供安全、健康、丰...
小学上学期学校语文教研工作计... 小学上学期学校语文教研工作计划范文(精选4篇)  时光在流逝,从不停歇,迎接我们的将是新的生活,新的...
【蓝桥杯集训25】背包DP(5... 目录 01背包板子 完全背包板子 多重背包板子 分组背包板子 2. 01背包问题 - 每种物品只有一...
基于samba源码的ubunt... 本节在ubuntu18.4的系统上实现samba服务器的安装,并利用samba服务器搭...
记录docker compos... docker-compose简介 在本专栏的第一篇文章中传送门,我们已经了解到了doc...
物业年度工作计划 【推荐】物业年度工作计划范文合集10篇  时间过得太快,让人猝不及防,我们又将接触新的知识,学习新的...
我终于搞懂了浏览器缓存机制 一、什么是缓存 网上讲了一大堆官方的说辞,看绕了反而,我这里通俗的理解就...
最新九年级化学上学期教学工作... 最新九年级化学上学期教学工作计划  一、学生基本情况分析:  化学是一门九年级刚开设的新课程,与生活...