PyTorch 2.2 大更新,性能提升 2 倍!

scaled_dot_product_attention实现逻辑 【代码】scaled_dot_product_attention实现逻辑。 阅读详情

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。

如果我的分享对你有帮助,请关注我,一起向上进击。

免费领书

做开发别掉坑里还不知道

新的一年,PyTorch也迎来了重大更新!

继去年十月份的PyTorch大会发布了2.1版本之后,全世界各地的521位开发者贡献了3628个提交,由此形成了最新的PyTorch 2.2版本。

f5b0c2440b5af6ef755bd4fb6a6f1d3b.png

新的版本集成了FlashAttention-2,使得scaled_dot_product_attention (SDPA)相较于之前的版本有了约2倍的性能提升。

PyTorch 2.2还引入了一个新的TorchInductor提前扩展,称为 AOTInductor,旨在为非python服务器端编译和部署PyTorch程序。

PyTorch中的torch.distributed支持了一个叫做device_mesh的新抽象,用于初始化和表示ProcessGroups。

3bf9b3674a73ef56f0359645ce63519b.png

另外,PyTorch 2.2提供了一个标准化的、可配置的日志记录机制,——TORCH_LOGS。

PyTorch 2.2还对torch.compile做了许多改进,包括改进了对编译优化器的支持,以及TorchInductor融合和布局优化。

419be49eede162a3fa48fefa59da0d9b.png

最后值得注意的是,PyTorch将放弃对macOS x86的支持,PyTorch 2.2.x是支持macOS x64的最后一个版本。

PyTorch 2.2新特性

首先请注意,如果从源代码构建PyTorch 2.2,需要GCC 9.4或更高版本,PyTorch 代码库已从C++ 14迁移到C++ 17。

31d6055631588b2fbd798a0f5389e540.png

FlashAttention-2

FlashAttention-2通过优化GPU上不同线程块和warps之间的工作分区,来解决占用率低或不必要的共享内存读写。

48fe89dd07d634aed69eba28e9f325c5.png

FlashAttention-2调整了算法以减少非matmul的计算量,同时提升了Attention计算的并行性(即使是单个头,也可以跨不同的线程块,以增加占用率),在每个线程块中,优化warps之间的工作分配,以减少通过共享内存的通信。

PyTorch 2.2将FlashAttention内核更新到了v2版本,不过需要注意的是,之前的Flash Attention内核具有Windows实现,Windows用户可以强制使用sdp_kernel,仅启用Flash Attention的上下文管理器。

0a63e0f1f191e24e106d7c8595408fd4.png

而在2.2中,如果必须使用 sdp_kernel 上下文管理器,请使用memory efficient或math内核(在Windows上)。

b9f98856f150a9bb04fff9640fb31260.png

在FlashAttention-2的加持之下,torch.nn.functional.scaled_dot_product_attention的速度提升了大约2倍,在A100 GPU上达到了理论计算峰值的50%-73%。

AOTInductor

AOTInductor是TorchInductor的扩展,用于处理导出的PyTorch模型,对其进行优化,并生成共享库以及其他相关工件。

这些编译的工件可以部署在非Python环境中,经常用于服务器端的推理。

下面的示例演示了如何调用 aot_compile 将模型转换为共享库。

770dcf8b2089f3d97661b393557da77c.png

AOTInductor支持与Inductor相同的后端,包括CUDA、ROCm和CPU。

TORCH_LOGS

PyTorch 2.2提供了一个标准化的、可配置的日志记录机制,可用于分析各种子系统的状态,例如编译和分布式操作

可以通过TORCH_LOGS环境变量启用日志。比如通过在命令行中修改环境变量:

aba7f42325aa2dae81709070aac7506b.png

将TorchDynamo的日志级别设置为logging.ERROR,将TorchInductor的日志级别设置为logging.DEBUG。

当然也可以在代码中以API的形式使用:

6172e208708ed4ffd0e81572dd67dc40.png

torch.distributed.device_mesh

PyTorch 2.2引入了一个新的抽象,用于表示分布式并行中涉及的 ProcessGroups,称为torch.distributed.device_mesh。

为分布式训练设置分布式通信器(NCCL)是一件麻烦的事情。用户需要编写不同并行度的工作负载,并为每个并行度手动设置和管理NCCL通信器(ProcessGroup )。

这个过程可能很复杂,容易出错。而DeviceMesh 可以简化此过程,使其更易于管理。

DeviceMesh 是管理 ProcessGroup 的更高级别的抽象。它允许用户毫不费力地创建节点间和节点内进程组,而不必担心如何为不同的子进程组正确设置等级。

例如,数组的其中一个维度可以表示FSDP中的数据并行(data parallelism),而另一个维度可以表示FSDP中的张量并行(tensor parallelism)。

用户还可以通过 DeviceMesh 轻松管理底层process_groups,以实现多维并行。

770142de7e8b4d183b49e97f5cdd4629.png

DeviceMesh在处理多维并行性(如3D并行)时很有用。如上图所示,当你的并行解决方案需要跨主机和每个主机内部进行通信时,可以创建一个2D网格,用于连接每个主机中的设备,并以同构设置将每个设备与其他主机上的对应设备连接起来。

借助 init_device_mesh() ,我们可以在短短两行内完成上面这个2D设置:

e292919dcf299f71cb2977a161b6c33e.png

而如果不使用DeviceMesh,我们大概需要自己写下面这一堆代码:

954800858b2a3eb080a2bc22fe5fd3fd.png

当然,如果需要,我们仍然可以访问底层 ProcessGroup:

0c819d09f246be45e6daee605c4b9390.png

优化器的改进

大概有以下几点:

  • 编译优化器在所有基准测试中都提高了性能:HuggingFace +18%、TorchBench +19%、TIMM +8% E2E;

  • 编译的优化器增加对cudagraphs的支持;

  • 对测试套件中所有模型进行平均,每个测试套件的基准测试平均编译时间增加约40秒;正在进行的优化可能会将其降低到30秒以下。

用于多张量优化器编译的inductor中缺少的主要功能是foreach算子的高效编码生成。

在调度器内部,将所有在下放过程中注册的缓冲区列表凝聚到ForeachKernelSchedulerNodes中(FusedSchedulerNode的子类)。

为了检查融合是否合法,每个内部 SchedulerNode 执行的写操作必须与消费SchedulerNode在同一列表索引处的读操作相匹配。

57fa6d07a8358541f2e2505604d1c1a8.png

此外,正常的垂直融合规则必须允许在消费者和生产者SchedulerNode列表的每个索引处进行融合。

如果满足了这些条件,ForeachKernelSchedulerNode将垂直融合成一个 ForeachKernelSchedulerNode,其中每个列表上的相应点操作都将被融合。

通过实现这种融合,可以将一系列 foreach 运算融合到单个内核中,从而实现多张量优化器的完全融合。

性能改进

TorchInductor中添加了许多性能优化,包括对torch.concat的水平融合支持、改进的卷积布局优化、以及改进scaled_dot_product_attention模式匹配。

60fedcf967f4ea8270dd953702d1655a.png

PyTorch 2.2还包括aarch64的许多性能增强,包括对mkldnn权重预打包的支持、改进的ideep基元缓存,以及通过对OneDNN的固定格式内核改进,来提高推理速度。

参考资料:

https://pytorch.org/blog/pytorch2-2/

本文分享自新智元。

- EOF -

文章已经看到这了,别忘了在右下角点个“赞”和“在看”鼓励哦~

推荐阅读  点击标题可跳转

1、Python 项目工程化最佳实践

2、Python 可以比 C 还要快!

3、streamlit,一个超强的 Python 库

4、豆瓣8.9分的C++经典之作,免费送!

5、Python 3.12 版本有什么变化?

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,领取进击的Grey与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「书单02」,领取进击的Grey整理的 10 本 Python 入门书的电子版

👇关注我的公众号👇

告诉你更多细节干货

5f3437fa97f0ca9cc40e38ceb8cf0eca.jpeg

欢迎围观我的朋友圈

👆每天更新所想所悟

注意力机制——注意力评分函数(代码+详解) 目录注意力分数关于a函数的设计有两种思路1.加性注意力(Additive Attention)2.缩放点积注意力(Scaled Dot-Product Attention)模块导入遮蔽softmax操作加性注意力代码:补充知识:1.torch.repeat_interleave(data, repeat= , dim=)2.torch.nn.Linear(*in_features*, *out_features*, *bias=True*, *device=None*, dtype=None)3.torch 阅读详情

相关推荐

史上最强 PyTorch 2.2 GPU 版最新安装教程

史上最强 PyTorch 2.2 GPU 版最新安装教程

跟着大数据和AI去旅行 5858

【PyTorch】《使用PyTorch 2.0加速Transformer:训练推理均拿下!—— torch.nn.functional.scaled_dot_product_attention》

torch.nn.functional.scaled_dot_product_attention

墨门 1896

PyTorch 2.2重大升级:引入FlashAttention-2,性能暴增2倍!

PyTorch 2.2将FlashAttention内核更新到了v2版本,不过需要注意的是,之前的Flash Attention内核具有Windows实现,Windows用户可以强制使用sdp_kernel,仅启用Flash Attention的上下文管理器。FlashAttention-2调整了算法以减少非matmul的计算量,同时提升了Attention计算的并行性(即使是单个头,也可以跨不同的线程块,以增加占用率),在每个线程块中,优化warps之间的工作分配,以减少通过共享内存的通信。

xziyuan的博客 2102

了解PyTorch中的缩放点积注意力及演示

是一个强大的PyTorch函数,用于实现缩放点积注意力机制。它通过计算查询、键和值之间的关系,为深度学习模型提供了一种有效的方式来捕获和关注重要信息。适用于各种序列处理任务,此函数特别适合于复杂的自然语言处理和计算机视觉应用。其高效的实现和可选的优化内核使其在处理大规模数据时表现卓越。

CDBmax的博客 3841

FreeRTOS-Plus-CLI在STM32F429上的高效移植与调试技巧

本文详细介绍了如何将FreeRTOS-Plus-CLI高效移植到STM32F429平台,并分享关键的调试技巧。内容涵盖使用HAL库进行底层驱动适配(特别是DMA+IDLE中断方案)、工程集成、自定义命令开发以及常见问题解决方案,旨在帮助开发者快速为嵌入式系统添加强大的命令行调试接口,提升开发与维护效率。

weixin_29224309的博客 336

LightningChart使用教程:创建 JS 散点图

这是对 LightningChart JS XY 图表一些有趣功能的快速技术研究,以及如何使用 LightningChart JS 创建嵌入式散点聊天和添加自定义交互。 此图表将可视化一个 XY 坐标列表以及一个额外的自定义属性,它只是一段文本。这些自定义属性将与 UI 文本元素一起显示,这些元素将与用户的鼠标移动交互。 我们将介绍的突出功能是: 什么是散点图? 如何创建散点图? 如何将自定义属性附加到数据点。 如何创建交互式 UI 文本元素。 最终结果 什么是散点图? 散点图或散点图是..

Augenstern__zyx的博客 1371

PyTorch 2.2大更新!集成FlashAttention-2,性能提升2倍

PyTorch 2.2将FlashAttention内核更新到了v2版本,不过需要注意的是,之前的Flash Attention内核具有Windows实现,Windows用户可以强制使用sdp_kernel,仅启用Flash Attention的上下文管理器。FlashAttention-2调整了算法以减少非matmul的计算量,同时提升了Attention计算的并行性(即使是单个头,也可以跨不同的线程块,以增加占用率),在每个线程块中,优化warps之间的工作分配,以减少通过共享内存的通信。

张伟的专栏 3628

Android——Handler详解

1. 简介 Handler是一套 Android 消息传递机制 可以说只要有异步线程与主线程通信的地方就一定会有 Handler。 在多线程的应用场景中,将工作线程中需更新UI的操作信息 传递到 UI主线程,从而实现 工作线程对UI的更新处理,最终实现异步消息的处理 使用Handler消息传递机制主要是为了多个线程并发更新UI的同时,保证线程安全 2. 相关概念解释 Handler、Message、Message Queue、Looper Android消息机制: 以Handler的sendMes

Yawn 7万+

如何用Hidet加速PyTorch模型推理:10倍性能提升实战教程

想要让PyTorch模型推理速度提升10倍吗?Hidet深度学习编译器正是您需要的终极解决方案!🚀 作为一款开源高效的深度学习框架/编译器,Hidet专门为PyTorch和ONNX模型提供端到端的CUDA内核优化,通过图级和算子级优化技术,显著提升模型推理性能。 ## 为什么选择Hidet进行PyTorch模型加速? Hidet是一个完全用Python编写的开源深度学习编译器,专注于优化NV

gitblog_00229的博客 831

从零开始:用这些公开数据集搞定电力AI项目(含鸟巢、绝缘子、负荷预测等33个实战资源)

本文系统梳理了电力AI领域33个精选公开数据集,涵盖目标检测、负荷预测等关键场景,如鸟巢检测、绝缘子缺陷识别等。通过实战案例解析数据预处理、模型选型及性能优化策略,帮助工程师快速构建端到端解决方案,解决电力AI项目中的数据获取与处理难题。

weixin_42522552的博客 218

ERA5气象数据下载与解压全攻略:Python脚本一键搞定(附错误处理技巧)

本文提供了一套完整的ERA5气象数据自动化处理方案,涵盖从CDS API配置、智能批量下载到高效解压与数据验证的全流程。重点介绍了如何通过Python脚本实现一键式数据下载与批量解压,并分享了实用的错误处理技巧与性能优化策略,帮助科研人员高效获取和处理大规模气象数据。

k8l9m0n的博客 340

PyTorch实现苹果M1芯片GPU加速:训练速度提升7倍,性能最高提升21倍

据PyTorch官网介绍,其使用Apple的Metal Performance Shaders(MPS)作为PyTorch的后端来加速GPU训练。

优快云资讯 1749

金融波动率的“捕手”:GARCH模型,揭秘市场波动的“聚集密码”

摘要: GARCH模型(广义自回归条件异方差)是金融时间序列分析中用于捕捉“波动聚类”现象的核心工具。传统模型(如ARIMA)无法刻画金融数据的时变波动特性,而GARCH通过建模条件方差的动态变化(如$\sigma_t^2 = \omega + \alpha \varepsilon_{t-1}^2 + \beta \sigma_{t-1}^2$),精准预测波动率。Python实战显示,GARCH能有效拟合模拟金融数据的波动聚类,残差无自相关,验证了其优越性。该模型在波动率预测、风险价值(VaR)计算和期权定

u010257409的博客 2058

PyTorch 2.9性能优化指南:云端GPU+镜像,效率提升5倍

本文介绍了如何利用星图GPU平台自动化部署PyTorch 2.9镜像,显著提升深度学习训练效率。该平台提供预配置的高性能环境,支持FlexAttention与混合精度训练,适用于模型微调、AI应用开发等场景,实现从本地数天到云端数小时的训练加速,大幅缩短项目周期。

SilverfoxLynx45的博客 788

使用GitLab限制开发者使用CI/CD的权限,三种方案

使用三种方案来限制开发人员的CI/CD权限。

知无涯 5098

基于Python的SEC Edgar文件高效爬取:最新技术与实战指南

本文详细介绍了如何使用Python最新技术高效爬取SEC Edgar数据库中的金融文件。我们将探讨SEC Edgar系统的结构、合法爬取注意事项,并使用现代Python库如Requests-HTML、aiohttp和Playwright实现多种爬取方案。文章包含完整的代码示例、性能优化技巧以及数据处理方法,为金融数据分析师、研究人员和开发者提供全面指导。关键词:SEC Edgar、Python爬虫、金融数据、异步爬取、Playwright、XBRL解析。

2201_76125261的博客 634

苹果炼丹6倍速!PyTorch加持Mac GPU训练,性能最高提升21倍

????????关注后回复“进群”,拉你进程序员交流群????????新智元报道编辑:David 拉燕 好困【新智元导读】果粉Big Day!PyTorch宣布,原生支持苹果Mac GPU机器学习加速。与单CPU加速相比,训练性能提升6倍,推理任务性能最高提升21倍对于搞AI和机器学习的苹果用户来说,今天无疑是个好日子。如果是用PyTorch的苹果用户,可能更是盼了一年半的大日子!刚...

iOS_开发 498

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

性能提升21倍!PyTorch加持Mac M1 GPU训练

点击 机器学习算法与Python学习 ,选择加星标精彩内容不迷路机器之心报道对于 Mac 用户来说,这是令人激动的一天。昨天,通过与苹果 Metal 团队工程师合作,PyTorch 官方宣布已正式支持在 M1 版本的 Mac 上进行 GPU 加速的 PyTorch 机器学习模型训练。此前,Mac 上的 PyTorch 训练仅能利用 CPU,但随着即将发布的 PyTorch...

机器学习算法与Python学习 1914

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

PyTorch大更新,编译代码速度暴增35倍!视觉模型一键部署

来源:新智元【导读】最近,在Pytorch发布会上,发布移动端Pytorch解决方案ExecuTorch,实现在移动端设备上大范围地部署AI工具,并推出最新版本Pytorch2.1,推理速度大幅提升。在刚刚召开的PyTorch大会上,PyTorch发布了一大波更新,把深度学习从业者们高兴坏了!正式推出ExecuTorch。它可以让PyTorch在Arm、苹果和高通的处理器上运行,实现在移动端设备上...

weixin_40920183的博客 222

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

PyTorch 2.0发布了!一行代码提速76%

【导读】现在,只需添加一行代码,PyTorch2.0就能让你在训练Transformer模型时,实现1.5倍-2倍的速度提升!12月2日,PyTorch 2.0正式发布!这次的更新不仅将PyTorch的性能推到了新的高度,同时也加入了对动态形状和分布式的支持。此外,2.0系列还会将PyTorch的部分代码从C++移回Python。目前,PyTorch 2.0还处在测试阶段,预计第一个稳定版本会在2023年3月初面世。

yuyanhome的博客 3499

PyTorch大更新!编译代码速度暴增35倍!视觉模型一键部署,头显Quest 3可用

点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达点击进入—>【计算机视觉和PyTorch】交流群转载自:新智元 | 编辑:润 贝果【导读】最近,在Pytorch发布会上,发布移动端Pytorch解决方案ExecuTorch,实现在移动端设备上大范围地部署AI工具,并推出最新版本Pytorch2.1,推理速度大幅提升。在刚刚召开的PyTorch大会上,PyTorch发布了一...

阿木寺的博客 318

LeanRL:基于PyTorch 2.0的强化学习加速革命,训练效率提升6.8倍的终极指南

LeanRL是CleanRL的优化分支,专注于通过PyTorch 2.0的`torch.compile`和`cudagraphs`技术实现强化学习训练效率的革命性提升。本文将深入解析LeanRL如何通过四大优化技术将PPO、SAC等主流算法的训练速度提升最高6.8倍,以及如何快速上手这一高性能强化学习框架。 ## 🚀 为什么选择LeanRL?强化学习训练的效率困境 传统强化学习训练往往受限于

gitblog_00264的博客 930

PyTorch宣布支持苹果M1芯片GPU加速!训练快6倍,推理提升21倍!

对于 Mac 用户来说,这是令人激动的一天。今年 3 月,苹果发布了其自研 M1 芯片的最终型号 M1 Ultra,它由 1140 亿个晶体管组成,是有史以来个人计算机中最大的数字。苹果宣称只需 1/3 的功耗,M1 Ultra 就可以实现比桌面级 GPU RTX ......

迈微AI研习社 · 号主 891

Editor.md API参考大全:实例方法、静态方法与回调事件一次备齐

Editor.md 是一款开源可嵌入的在线 Markdown 编辑器(组件),基于 CodeMirror、jQuery 与 Marked 构建。本文带你快速备齐 Editor.md 的完整 API:实例方法(获取内容、选中、全屏预览)、静态方法(markdownToHTML 等)与全部回调事件,一份清单全部搞定。 [![Editor.md Markdown在线编辑器实时预览界面截图](https

gitblog_00722的博客 991

PyTorch 2.5重磅更新:性能优化+新特性,开发者必看!

这一新版本引入了多项重要更新,包括支持 SDPA(Self-Dot Product Attention)的新 CuDNN 后端、torch.compile 的区域编译功能,以及 TorchInductor C++ 后端带来的性能加速。针对使用NVIDIA GPU的用户,PyTorch 2.5集成了最新版本的APEX库,提供了更多高级特性和更好的兼容性。对于具有动态输入尺寸的网络结构,PyTorch 2.5引入了新的编译器优化策略,显著减少了不必要的重新编译开销。提升了即时编译器的速度与生成代码质量。

2401_83179994的博客 2263
上一篇: 带新手工程师的一天缩影
下一篇: ULID,一个比 UUID 更好用的方案
codingpy
博客等级 码龄11年 1873粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值