全面支持 PyTorch 2.0:BladeDISC 5 月~11 月新功能发布

news2025/1/13 13:16:34

作者:BladeDISC研发团队

BladeDISC 上一次更新主要发布了 GPU AStitch 优化,方法来源于我们发表在 ASPLOS 2022上的论文AStitch。这一次,我们发布了 0.3.0 版本。

本次更新中 BladeDISC 社区全面支持了 PyTorch 2.0 编译,推进了和 Torch-MLIR 社区的合作;增加了 CPU 量化编译和倚天新硬件支持;在编译优化方面 BladeDISC 社区增加了一系列特性,包括改进了 GPU 访存密集计算的性能,完成了 Shape Constaints IR 功能设计和支持。

本文描述 BladeDISC v0.3.0 版本对于 v0.2.0 的主要更新内容。

PyTorch 2.0 和动态编译支持

BladeDISC 近半年来高度关注 PyTorch 2.0 相关特性的新动态,积极参与社区的协作,在此期间完成了 TorchBlade 编译架构的调整,更好地 PyTorch 动态编译和训练支持

TorchDynamo 优化

现在使用 PyTorch nightly 版本和 BladeDISC,只需要额外的两行代码改动即可完成 BladeDISC 的编译加速:

import torch_blade # one more extra line
model = ...
compiled_model = torch.compile(model, backend='disc') 

TorchBenchmark

BladeDISC 持续关注深度学习模型的通用优化,我们将 TorchBenchmark 作为优化的指南针评估和持续提升 BladeDISC 在不同模型上的鲁棒性和优化效果。

在这里插入图片描述

TorchMLIR(MHLO) 和动态性贡献

BladeDISC 一直是 MLIR/MHLO 动态性的主要贡献和推动者。这个版本中我们与字节 AML 团队合作往 Torch-MLIR 贡献了 Torch-to-MHLO 的模块,特别是对动态性的支持,请参考 [RFC] Adding Torch to MHLO conversion #999,特别感谢字节 AML 的同事的共同推动!

在这里插入图片描述

并且我们对 BladeDISC 中的 PyTorch 编译流程做了架构调整,Torch-MLIR 成为了 BladeDISC 的基础模块。下图中蓝色线框表示了 Torch-to-MHLO 工作在 BladeDISC 中相对的位置。

在这里插入图片描述

我们号召社区对此模块感兴趣的朋友们一起合作推动 Torch-MLIR(MHLO) 模块的迭代与演进,减少基础工作的碎片化

PyTorch 训练支持

BladeDISC 正在逐步支持 PyTorch 模型的训练优化,目前已经成功支持 BERT 等模型的编译优化。BladeDISC 支持采用 PyTorch 2.0 的 TorchDynamo 和 Lazy Tensor Core 两种方式开启训练优化(当前此模块的接口没有完全确定,鉴于目前 PyTorch 社区的活跃度,我们会更优先支持 TorchDynamo 的使用方式)。目前此模块仍在持续更新和迭代,更多状态请关注我们的开发动态。

EasyCV/NLP 推理加速编译支持

  • BEVFormer: 是一种纯视觉的自动驾驶感知算法,借助 BladeDISC 优化,取得了 1.42 倍的端到端性能提升。
  • PAI-Diffusion Model: 在此版本中 BladeDISC 社区也对最近大热的 AIGC Diffusion 相关模型提供了通用优化支持。BladeDISC 为 PAI-Diffusion 提供了接近 3 倍的端到端的性能提升。

更多信息请查看 PAI EasyCV/NLP 相关系列文章和开源地址:

  • EasyCV: https://github.com/alibaba/EasyCV
  • EasyNLP: https://github.com/alibaba/EasyNLP

BladeDISC 量化 (Experimental)

在这半年中我们完成了编译+量化结合的一系列初步摸索,在包括X86、ARM多个不同硬件平台上完成了早期的方案及性能验证,下表中展示了我们一些初步的成果。

模型输入设备优化前PyTorch/FP32优化后Int8量化+编译
bert-mini8*64g6r / Ampere Altra / 单核135.9 ms39.6 ms
bert-mini8*64g8m / YiTian /单核127.8 ms31.1 ms
bert-mini8*64hfg7 / Cooper Lake 8369 /单核37.5 ms21.5 ms

近期我们将支持更多硬件平台(例如CUDA),并提供如何量化PyTorch/TensorFlow模型的示例。此外,我们也将继续优化提升量化模型的推理性能。

BladeDISC 编译优化改进

新硬件支持:AArch64(倚天)

在这半年中我们进一步完善了对AArch64类硬件(尤其是倚天)的支持,进行了一系列针对性改进:

  • 增加对BF16/int8 GEMM/Conv的支持,充分利用倚天硬件的能力;
  • 对Arm Compute Library进行了一系列的定制和改进,解决其在dynamic shape及高并发场景下的各种可用性问题;
  • 访存密集型算子CodeGen质量改进,包括Stitch-CPU对reshape类算子的支持从而支持更大粒度的kernel,以及op duplication策略的引入进一步减少访存量;

GPU上访存密集计算codegen性能增强

针对GPU上访存密集计算子图代码生成提供了一系列的深度优化,单个LayerNorm子图在常规推理shape下可带来最高2X的性能提升。主要的优化功能包括:

  • Fusion中若干独立控制流的合并。比如一个stitch fusion中包含多个独立的且shape相同的row reduce计算,则将这几个独立row reduce计算的控制流合并为同一个,一方面减少不必要的计算,另一方面增大ILP;
  • Row-reduce的schedule选择逻辑优化。针对不同的shape,选择更加合适的row reduce计算的的schedule;
  • 优化element-wise fusion的向量化优化。通过指令交叉来支持element-wise fusion的数据读和计算的向量化;
  • Loop相关优化。添加loop unroll及instruction interleave优化,增大ILP;添加循环不变量外移优化,减少不必要的计算;
  • 消除kernel的无效argument ,减小kernel launch开销。

以上功能可以通过设置变量DISC_MEM_INTENSIVE_OPT_EXPERIMENTAL=true来打开。

Shape Constraint IR

在这半年中我们完成Shape Constraint IR的设计和开发,通过将shape constraint作为第一等公民引入到IR中,可以方便我们充分挖掘计算图中蕴含的结构化约束,并以此来辅助完成一系列动态shape语意下的优化,进一步缩小与static shape compiler在优化空间上的差异。感兴趣的读者可以在这里了解我们的设计文档,也可以阅读我们在知乎上分享的技术文章 (link1, link2)。

对二次定制开发支持的增强

我们基于MLIR社区PDL的工作重构了BladeDISC中接入一个custom library call流程,极大的简化了相关的开发工作量。在新的方式下,用户只需要提供一个PDL的pattern描述文件,以及一个符合BladeDISC runtime接口的kernel,便可以在不重新编译BladeDISC的情况下,实现pattern的替换及对应kernel的调用,明显改进了BladeDISC对二次定制开发的支持。我们在量化这个场景下检验了新的基础设施的可用性及工程效率,感兴趣的同学可以参考这里和这里的例子。后续我们还将借助PDL和transform dialect进行进一步拓展,使得不仅仅是对custom kernel,也能对特定pattern的CodeGen策略进行定制。

Runtime Abstraction Layer 改进

  • 大模型权重的支持:我们重构了常量(比如模型的权重参数)编译结果的存储格式,从基于protobuf改成了自定义的格式, 从而去除了对const上限的约束,方便我们支持大模型的优化。
  • 并发性能改进:针对高并发场景(比如同时服务数百路并发的推理请求)进行了一系列的优化,进一步缩小了kernel 调度以及共享资源锁同步的开销,在某语音识别200+并发的场景中进一步取得20%+的性能改进。

Ongoing Work

CUTLASS Gemm CodeGen

在GPU上接入了CUTLASS进行计算密集型算子的算子融合与代码生成,自动化地将GEMM及后续的element-wise(如GELU等激活函数子图、Tranpose算子等)进行计算融合与代码生成。目前GEMM + GELU及GEMM + Transpose的通路已经走通,且在BERT模型上取得了加速效果,鲁棒性正在提升中,可使用DISC_ENABLE_COMPUTE_INTENSIVE_FUSE=true设置来尝试使用。

MLIR Transform Dialect Based CodeGen

我们目前正在基于MLIR社区的transform dialect进行计算密集型相关pattern在dynamic shape语意下的代码生成,目前第一个目标是在AArch64平台上GEMM相关pattern达到与ACL相当的性能,以期通过白盒的方式彻底解决ACL在dynamic shape以及服务端多路请求并发的场景下的可用性问题,相关的工作的最新进展可以参见这里。

推荐类稀疏模型

我们针对在业界中广泛应用的Tensorflow推荐类模型的性能热点部分–FeatureColumn中的稀疏算子进行了初步的优化支持。目前已经完成推理场景中常见的稀疏算子的cpu codegen支持,以及初步的算子融合支持,基于此目前已经可以在部分模型上获得了一定的收益。后续我们将支持更多种类,更大粒度的算子融合以及使用CPU AVX等指令集优化稀疏部分算子的计算性能,相关进展参见这里。

以上为本次 release 的主要内容。

项目开源地址:https://github.com/alibaba/BladeDISC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/74732.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

同城跑腿系统搭建,灵活的配送选择满足更多场景

为了提供更加便捷的生活服务,同城跑腿系统搭建通过线上的同城跑腿服务平台,在网上用户可以申请同城服务的需求,平台的相关的工作人员快速的响应接单,快速进行同城的配送跑腿服务。 同城跑腿系统搭建,功能少是万万不能…

微信小程序第四篇:生成图片并保存到手机相册

系列文章传送门: 微信小程序第一篇:自定义组件详解 微信小程序第二篇:七种主流通信方法详解 微信小程序第三篇:获取页面节点信息 目录 一、封装分享组件 二、定义用户授权方法 三、调用流程 首先我们看一下要完成的效果&#x…

地理空间开发包 TatukGIS Developer Kernel 11.72.X Crack

TatukGIS Developer Kernel (DK) 是专业级 GIS SDK(软件开发工具包),各行各业的客户都使用它来开发自定义 GIS 应用程序或向现有产品添加地理空间功能。DK 可作为多个 SDK 版本使用,每个版本都针对特定的开发平台进行本地编译&…

胡扯系列之私人AI助手系统的分析与设计

背景 随着时代的发展,计算机算力的提升和近些年来AI模型的井喷以及发展。人工智能应用已经深入我们的日常生活。如人脸识别,无人驾驶等等,同时为了更好地与用户进行交互,完成特定功能,智能对话助手应运而生。如今大量…

某宝付费买的价值上万的60G的Python学习资源,0基础轻松赚钱到手软,请低调使用,禁止外传

前言 你是否 还在为升职加薪发愁? 苦于领导看不到自己更多长处? 还在为房贷,车贷,生计而发愁? 苦于不上班如何轻松赚快钱补贴家用? 为了帮助财务、设计、运营、策划、销售、HR、金融从业者、电商从业…

【单目3D目标检测】MonoFlex论文精读与代码解析

文章目录PrefaceAbstractContributionsPipelineProblem DefinitionDecoupled Representations of ObjectsInside & Outside ObjectsEdge FusionLossVisual Properties Regression2D DetectionDimension EstimationOrientation EstimationKeypoint EstimationAdaptive Depth…

Docker网络模式与配置

目录 🎈🎈1. Docker网络模式🏃‍♂️🏃‍♂️ 🏃‍♂️🏃‍♂️2. 外部访问docker容器🏃‍♂️🏃‍♂️ 🎈🎈3. 创建自定义网络:(设…

尚医通 (三十一) --------- 手机登录

目录一、登录需求1. 登录效果2. 登录需求二、登录1. 搭建 service-user 模块2. 添加用户基础类3. 登录 API 接口4. 生成 token5. 阿里云短信6. 登录前端7. 登录全局事件8. myheader.vue 完整代码三、用户认证与网关整合一、登录需求 1. 登录效果 2. 登录需求 ① 登录采取弹出…

Python爬虫实战,requests+time模块,爬取某招聘网站数据并保存csv文件(附源码)

前言 今天给大家介绍的是Python爬取某招聘网站数据并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得。 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这样的纯文 本数据爬取的人会…

ImmunoChemistry丨艾美捷抗体夹心ELISA开发试剂盒说明书

使用ImmunoChemistry艾美捷抗体夹心ELISA开发试剂盒评估检测可行性并优化ELISA性能参数。抗体夹心ELISA开发试剂盒提供了八种特殊配制的ELISA溶液和一个模板,用于抗体夹心ELISA测试的初始开发和优化。全面的ELISA开发手册提供了评估初始检测可行性和优化ELISA性能参…

关于 npm run buildprod 报错问题 :文件名、目录名或卷标语法不正确

引言 vue开发基本完成后进行打包时出现错误,这个错误以前没有遇到过,所以在这里激励 参考文章1 参考文章2 问题描述 在idea中运行npm run build:prod打包vue时出现报错 E:\Allworkspaces\idea-workspace\Project\vue-project\my-blog\vue-admin-te…

代码随想录第三天

专题:链表 题目:移除链表元素 题意:删除链表中等于给定值 val 的所有节点。 示例 : 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5] 解题思想: 我们为了统一操作,我们给链表…

身份证实名认证API接口有什么意义与作用?

身份证实名认证API接口有什么意义? 中国公民的身份证是一种对外证明自己身份的有效证件,随着国家对实名制要求的落实,工作与生活中许多场景都会需要进行身份验证。比如出门外出乘座火车与飞机时、注册互联网络平台时、网络游戏与购物时等等&a…

微信小程序怎么注册?【微信小程序制作】

即使在目前小程序盛行的时代,仍然有很多人在问微信小程序怎么注册、微信小程序怎么做的问题,也证明了我们对于微信小程序的需求依然巨大。那么微信小程序怎么注册呢?下面给大家简单介绍。 步骤1:注册小程序账号 我们在微信公众平…

启封化工行业管理方案—危化品的管理(1)

联合国危险品编码管理 什么是危化品? 危化品是指可能伤害人、其他生物体、财产或环境的固体、液体或气体。这些危险品在运输时始终受到规章制度的约束。运输这些危险品的团队是训练有素的专业人员。使用标签时,存储标签的容器或存储位置通常用菱形标牌标…

2022年疫情下的卡塔尔世界杯,你看了么,盘点一下爆冷的赛事

卡塔尔世界杯卡塔尔世界杯世界杯出现的爆冷比赛沙特阿拉伯 VS 阿根廷(1:2)德国 VS 日本 (1:2)比利时 VS 摩洛哥 (0:2)摩洛哥VS 加拿大 (2:1)日本 VS 西班牙 (2:1)摩洛哥 VS 西班牙(3:0)总结卡塔尔世界杯 卡塔尔世界杯有32个国家参…

数据结构与算法(Java版) | 几个经典的算法面试题(下)

上一讲,我给大家介绍了两个经典算法面试题,即字符串匹配问题和汉诺塔游戏,这一讲,我再来给大家介绍两个经典算法面试题,它们就是八皇后问题和马踏棋盘算法,注意,马踏棋盘算法也被称为骑士周游问…

springsecurity--Config层代码常用代码指令

前提搭建 使我们的类继承于WebSecurityConfigurerAdapter这个类 同时调用service还有新建一个bean方法 Bean public PasswordEncoder getPassword() {return new BCryptPasswordEncoder(); } 这个代码是可以自定义账户和密码 自定义登录账户和密码写在service类中 下方的红框…

SSM框架-SSM整合

目录 1 ContextLoaderListener 2 准备工作 3 配置web.xml 4 配置springmvc.xml 5 配置spring.xml 6 Spring整合MyBatis 7 配置log4j.xml 8 配置事务 9 测试功能 9.1 创建pojo类 9.2 员工列表功能 9.3 分页数据 9.4 分页相关超链接 1 ContextLoaderListener Spring提…

安卓玩机搞机技巧综合资源-----卸载内置软件 获取root权限 刷写第三方ROM【六】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…