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

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: BladeDISC 上一次更新主要发布了 GPU AStitch 优化,方法来源于我们发表在 ASPLOS 2022上的论文AStitch。这一次,我们发布了 0.3.0 版本。

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 相关系列文章和开源地址:

BladeDISC 量化 (Experimental)

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

模型

输入

设备

优化前

PyTorch/FP32

优化后

Int8量化+编译

bert-mini

8*64

g6r / Ampere Altra / 单核

135.9 ms

39.6 ms

bert-mini

8*64

g8m / YiTian /单核

127.8 ms

31.1 ms

bert-mini

8*64

hfg7 / Cooper Lake 8369 /单核

37.5 ms

21.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 的主要内容。欢迎加入BladeDISC用户交流群。

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

欢迎加入钉钉交流群,群号:44534789

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
6月前
魔塔社区的模型支持使用DJL 进行推理吗?
想使用DJL 加载魔塔社区的模型并进行推理
|
3月前
|
机器学习/深度学习 人工智能 前端开发
BladeDISC 深度学习编译器问题之BladeDISC计划发布版本如何解决
BladeDISC 深度学习编译器问题之BladeDISC计划发布版本如何解决
|
6月前
|
人工智能 监控 开发者
阿里云PAI发布DeepRec Extension,打造稳定高效的分布式训练,并宣布开源!
阿里云人工智能平台PAI正式发布自研的 DeepRec Extension(即 DeepRec 扩展),旨在以更低成本,更高效率进行稀疏模型的分布式训练。
|
6月前
|
Linux API 开发者
元象大模型开源30款量化版本 加速低成本部署丨附教程
元象大模型一次性发布30款量化版本,全开源,无条件免费商用。
|
6月前
|
算法 API C++
模型落地系列 | TensorRT应该如何添加自己的插件?
模型落地系列 | TensorRT应该如何添加自己的插件?
407 1
|
6月前
|
自然语言处理 JavaScript 前端开发
MFTCoder 重磅升级 v0.3.0 发布,支持 Mixtral 等更多模型,支持收敛均衡,支持 FSDP
今天,我们对MFTCoder进行重磅升级,比如对Mixtral这个开源MoE的SOTA的多任务微调的支持;再比如我们提供了之前论文中提到的收敛均衡技术:Self-Paced Loss。 MFTCoder已适配支持了更多的主流开源LLMs,如Mixtral、Mistral、Deepseek、 Llama、CodeLlama、Qwen、CodeGeeX2、StarCoder、Baichuan2、ChatGLM2/3、GPT-Neox等。以Deepseek-coder-33b-base为底座,使用MFTCoder微调得到的CodeFuse-Deepseek-33B在HumaneEval测试中pass
129 0
|
机器学习/深度学习 算法 决策智能
【重磅开源】Facebook开源 Nevergrad:一种用于无梯度优化的开源工具
【重磅开源】Facebook开源 Nevergrad:一种用于无梯度优化的开源工具
201 0
|
人工智能 算法 PyTorch
升级到PyTorch 2.0的技巧总结
PyTorch 2.0 发布也有一段时间了,大家是不是已经开始用了呢? PyTorch 2.0 通过引入 torch.compile,可以显着提高训练和推理速度。 与 eagerly 模式相反,编译 API 将模型转换为中间计算图(FX graph),然后以某种方式将其编译为低级计算内核,这样可以提高运行速度。
314 0
|
机器学习/深度学习 人工智能 PyTorch
PyTorch 2.0正式版发布!一行代码提速2倍,100%向后兼容
PyTorch 2.0正式版发布!一行代码提速2倍,100%向后兼容
233 0
|
机器学习/深度学习 人工智能 达摩院
魔搭语音更新|七大模型最新开源,推理速度升级,几行代码可实现微调
自ModelScope魔搭社区发布以来,众开发者在ModelScope上传与下载模型,并集成到自己的语音识别服务中。为了方便用户更好地利用ModelScope进行语音识别服务,我们推出了语音识别基础框架FunASR,希望在语音识别的学术研究和工业应用之间架起一座桥梁。FunASR已经集成到ModelScope中,提供的工业级的语音识别模型的推理与微调定制,使得研究人员和开发者可以更加便捷的进行语音识别模型的研究和生产,促进语音识别生态的发展。
923 0

热门文章

最新文章