什么是算子
计算图和算子在计算本质上是一致的。算子是打包后的计算图,计算图是拆包后的算子
比如sigmod复合算子可以看作一个计算图,由基础算子Exp,Add,Reciprocal等基础算子组成,用小规模的“基本算子”集合就可以表达任意现有计算图。
计算图可以完全由基础算子组成,但是还是得定义复合算子,比如sigmod这种,因为对于基本算子计算图来说,相邻算子之间只能通过全局内存(或显存)进行数据传递。而对于复合算子来说,相邻的基本计算之间则可以通过局部内存或者寄存器进行数据传递。除了性能之外,在一些场景下,通过算子融合也能有效减少对全局内存的的实际占用。
mindspore的算子融合方案是什么
在TVM、XLA等自动算子编译技术出现之前,AI框架主流采用手工融合的方式解决如上问题。主要思路是:
-
手工融合: 1)识别常见的热点算子组合子图,比如: Add(Mul(x, y))。然后针对该算子子图手工实现对应融合算子; 2)将融合算子注册到AI框架,并在AI框架中增加对应的优化pass,将匹配的算子子图替换为融合算子节点。 这种方式的缺点是显而易见的。因为它只能针对若干热点场景进行融合,所以是无法做到通用和泛化的。
-
XLA:XLA最早基于TensorFlow开发。不过它采用了与TensorFlow不同的计算图IR表示。所以在TensorFlow中,需要将TensorFlow的计算图IR首先转换为XLA的计算图IR(HLO)。然后XLA基于HLO进行融合优化等,最后通过LLVM等后端编译生成相应融合算子。由于采用独立的IR,XLA具有较好的可移植性,目前在PyTorch、JAX等非TensorFlow框架中也有不错的表现。
-
TVM:TVM主要用于推理场景。在架构上,主要包括relay和tir两层。其通过relay导入推理模型,然后进行融合优化,最后通过tir生成融合算子。TVM在算子编译方面采用compute和schedule分离的技术,并且不同算子compute所需要的schedule通常是不同的。为了更好支持不同融合算子场景,TVM支持对算子进行自动tuning,来生成较优的切分参数甚至schedule。由于tuning空间较大,目前tuning时间相对还是比较长的。
基于以上问题背景,并结合MindSpore自身需求,我们提出图算融合解决方案。其主要思路是:
- 图算融合解决方案: 1)3.9以通用的pattern识别计算图中的融合场景,并生成融合算子子图;2)将生成的融合算子子图通过自动算子编译技术(AKG)生成对应的融合算子。
什么是图算融合编译技术
我们如果需要把模型部署到CPU甚至手机上去,此时需要其他硬件及其架构的支持。开发者们往往会根据实际情况选择各种各样的深度学习顶层框架训练模型,例如昇思MindSpore等,再把训练好的模型部署到各种各样的设备后端包括GPU、CPU、FPGA、昇腾AI处理器及其它新型的AI加速器上。
考虑到不同硬件设备的特性千差万别、现有算子库中算子包含范围不同、新型加速器算子库支持不足、非常规的神经网络中存在不常见的layer等等情况,开发者要完成手写算子并保证性能,学习成本和时间成本都变得很高,所以图算融合编译技术的出现变得非常有必要。
什么是自动算子编译技术AKG
AKG是Auto Kernel Generator的简称,"SIG"是一个常见的缩写,全称为 “Special Interest Group”,中文直译为“特殊兴趣小组”或者”特殊利益集团“。
AKG(Auto Kernel Generator)对深度神经网络中的算子进行优化,并提供特定模式下的算子自动融合功能。AKG与MindSpore的图算融合功能协同工作,可提升在不同硬件后端上运行网络的性能。AKG基于polyhedral技术,多面体。
AKG安装
官方文档里写了从MindSpore侧构建运行AKG代码但是详细细节写了个寂寞,然后全是独立构建方法
从mindspore的whl安装,失败,但是后面还是这么做了
独立构建方法网上有,我偏不用,看看这个从MindSpore侧怎么安装,理论上AKG是mindspore的子仓库应该是自动安装了。
首先我创建一个一个python3.9 conda环境然后安装Mindspore2.3安装方法是下载whl包,这个没有出现问题日
pip install mindspore-2.3.1-cp39-cp39-linux_x86_64.whl
不过如果是实习的话,需要推自己的改动,那我岂不是最好git下载然后source安装mindspore,算了。后来发现确实是这样,因为这样找不到tests文件夹,就无法运行官方文档里面的设置环境变量和运行测试用例,想了一下还是进行源码安装,因为又可以看源码又可以安装环境但是后来
从mindspore的源码安装
我选择安装的是CPU的ubuntu x86架构的源码,参考mindspore的仓库主页


4434

被折叠的 条评论
为什么被折叠?



