首页 > 其他分享 >转载:【AI系统】代数简化

转载:【AI系统】代数简化

时间:2024-12-11 18:45:23浏览次数:10  
标签:化简 diamond 运算 AI 代数 结合律 算子 转载 rightarrow

代数简化(Algebraic Reduced)是一种从数学上来指导我们优化计算图的方法。其目的是利用交换率、结合律等规律调整图中算子的执行顺序,或者删除不必要的算子,以提高图整体的计算效率。

代数化简可以通过子图替换的方式完成,具体实现:1)可以先抽象出一套通用的子图替换框架,再对各规则实例化。2)可以针对每一个具体的规则实现专门的优化逻辑。下面我们将介绍三种不同的代数简化方案。

算术简化

顾名思义,算术化简就是通过利用代数之间算术运算法则,在计算图中可以确定优化的运算符执行顺序,从而用新的运算符替换原有复杂的运算符组合。我们给出结合律,分配律,交换律的例子。

结合律

非正式的讲,结合律是说: 不论我们怎样结合数字(即先计算那些数字),答案都是一样的。即:

$$
(a+b)+c = a+(b+c)
$$

形式化的讲,令 $*$ 是非空集合 $S$ 上的二元运算,如果 $\forall x,y,z\in S$,都有

$$
(xy)z = x(yz)
$$

则称运算 $$ 在 $S$ 上是可结合的,或者说运算 $$ 在 $S$ 上满足结合律

根据这样的思想,我们可以发现以下的规则符合结合律,令 $A,B,C$ 是张量集合 $\Gamma$ 的元素,即 $A,B,C\in \Gamma$,则有

$$
(A\star B)^{-1}\diamond ((A\star B)C)^{-1} \rightarrow(A\star B)^{-2}\diamond C
$$

其中 $\star$ 是卷积 Conv,$\diamond$ 是矩阵乘法 Mul;形式上讲,我们称上述公式为在张量集合 $\Gamma$ 上的二元运算 $\star$、$\diamond$ 满足结合律。

有了这样的规则,便可以指导我们进行实例的优化,例如下面的实例算子,令 $A,B,C$ 为具体的张量,其他算子均为图示,优化规则如上所述:

image

根据上述结合律规则,我们可以把 A 与 B 的卷积给抽离出来,讲红色方框部分做简化,这样我们就减少运算算子,也减少了运算开销。

当然还有许多符合结合律的化简,我们列几个在下方供读者参考。

$$
Recip(A) \diamond Recipe(A \diamond B) \rightarrow Square(Recip(A)) \diamond B
\
(A \diamond \sqrt B) \diamond (\sqrt B \diamond C) \rightarrow A \diamond B \diamond C
\
(A \diamond ReduceSum(B)) \diamond (ReduceSum(B) \diamond C) \rightarrow A Square(ReduceSum(B)) \diamond C
$$

交换律

交换律是说:我们可以把数的位置对换而答案不变,即:

$$
a+b = b+c \
ab = ba \
$$

形式化的讲,令 $*$ 是非空集合 $S$ 上的二元运算,如果 $\forall x,y\in S$,都有

$$
xy= yx
$$

则称运算 $$ 在 $S$ 上是可交换的,或者说运算 $$ 在 $S$ 上满足交换律

根据这样简洁优美的思想,我们可以发现以下的规则符合结合律:

$$
ReduceSum(BitShift(A)) \rightarrow BitShift(ReduceSum(A))
$$

根据这样的规则我们可以看到如下实例的优化:

image

如图所示,A 是一个张量,相比较先位移再 ReduceSum 的操作顺序,我们可以根据结合律,先 ReduceSum,得到一个维度更小的 batch,再进行 BitShift,显然运算的开销减少了。

当然还有许多符合交换律的化简,我们列几个在下方供读者参考。

$$
ReduceProd(Exp(A)) \rightarrow Exp(ReduceSum(A))
$$

分配律

分配律简化,即

$$
a(b+c) = (ac)+(a*b)
$$

形式化的讲,令 $*$ 和 $\circ$ 是非空集合 $S$ 上的二元运算,如果 $\forall x,y,z\in S$,

$$
x(y\circ z) = (xy)\circ (xz)
\
(y\circ z)
x = (yx)\circ (zx)
$$

则称运算 $$ 对 $\circ$ 在 $S$ 上是可分配的,或者说运算 $$ 对 $\circ$ 在 $S$ 上满足分配律

这个公式从右往左的过程也可以称为提取公因式。根据上述思想,我们可以发现以下的规则符合分配律:

$$
(A\cdot B)\star C + (A\cdot B)\star D \rightarrow (A\cdot B)\star (C+D)
$$

根据这样的规则我们可以看到如下实例的优化:

image

我们会发现,$A\cdot B$ 之后与 $C,D$ 分别做乘法操作时没有必要的,于是可以提取公因式,将 $C,D$ 单独加和再做乘法,将 4 次算子操作降低为 3 次操作,减少了运算开销。

当然还有许多符合分配律的化简,我们列几个在下方供读者参考。

$$
A+A\diamond B \rightarrow A \diamond (B+1)
\
Square(A+B)-(A+B)\diamond C \rightarrow (A+B)\diamond(A+B-C)
$$

注:当我们做代数简化时,一定要先注意到算子是否符合例如交换律,结合律等规则,例如矩阵乘法中 $AB \neq BA$。

最后,我们向大家推荐一篇关于算术简化规则的文章:

DNNFusion: accelerating deep neural networks execution with advanced operator fusion.

其中还包括更多复杂的简化规则供读者参考。

image

运行简化

运算简化,是减少运算或执行时,冗余的算子或者算子对;我们给出两种规则来解释。

  • 逆函数等于其自身函数的对合算子化简:

    $$
    f(f(x)) = x \
    f(x) = f^{-1}(x)
    $$

    例如取反操作:$-(-x) = x$,倒数,逻辑非,矩阵转置(以及你键盘中英文切换,当你快速按下两次切换的时候,你会发现什么都没有发生,当然次数太多就不一定了)等。

  • 幂等算子化简,即作用再某一元素两次与一次相同:

    $$
    f(f(x))=f(x)
    $$

    一个具体的实例如下:

    $$
    Reshape(Reshape(x, shape1),shape2) \rightarrow Reshape(x, shape2)
    $$

    其中,$Shape2$ 的大小小于 $Shape1$。

我们用图来展示上述两中运行化简:

image

如图所示,对于对合算子 Op1,两次对合后,根据对合性质可得等价于没有操作,所以运行化简后只剩下 Op2。

image

如图所示,对于幂等算子 Op1,多个幂等算子等价与一次操作,于是运行化简后等价与一个 Op1 算子。

广播简化

当多个张量形状 Shape 不同情况下,需要进行广播(broadcast)将张量的形状拓展为相同 shape 再进行运算,化简为最小计算所需的广播运算数量。

我们还是以一个简单的例子为准,考虑以下 2 个矩阵与 2 个向量的相加:

$$
(S_1+Mat_1)+(S_2+Mat_2) \rightarrow(S_1+S_2)+(Mat_1+Mat_2)
$$

image

假设矩阵的维度为 4,则一个向量与 4 维矩阵相加时,要先广播为 4 维,再与 Mat 相加,显然左式需要广播两次;但我们可以通过位置替换,将两个向量首先相加再广播,此时就节省了一个广播的开销,达到我们优化的目的。

如果您想了解更多AI知识,与AI专业人士交流,请立即访问昇腾社区官方网站https://www.hiascend.com/或者深入研读《AI系统:原理与架构》一书,这里汇聚了海量的AI学习资源和实践课程,为您的AI技术成长提供强劲动力。不仅如此,您还有机会投身于全国昇腾AI创新大赛和昇腾AI开发者创享日等盛事,发现AI世界的无限奥秘~
转载自:| https://www.cnblogs.com/ZOMI/articles/18560291 | header |
| ---------------------------------------------- | ------ |
| | |

标签:化简,diamond,运算,AI,代数,结合律,算子,转载,rightarrow
From: https://www.cnblogs.com/ewr67/p/18600448

相关文章

  • 转载:【AI系统】死代码消除
    死代码消除(DeadCodeElimination)是一种编译器优化技术,旨在删除程序中不会被执行的代码,从而提高程序的执行效率和资源利用率。死代码是指在程序的当前执行路径下不会被访问或执行的代码片段。传统编译器的死代码消除死代码消除的目的是删除程序中无用和不可达操作对应的代码。在......
  • 转载:【AI系统】Tensor Core 深度剖析
    TensorCore是用于加速深度学习计算的关键技术,其主要功能是执行神经网络中的矩阵乘法和卷积运算。通过利用混合精度计算和张量核心操作,TensorCore能够在较短的时间内完成大量矩阵运算,从而显著加快神经网络模型的训练和推断过程。具体来说,TensorCore采用半精度(FP16)作为输入......
  • 转载:【AI系统】分布式通信与 NVLink
    在进入大模型时代后,大模型的发展已成为AI的核心,但训练大模型实际上是一项比较复杂的工作,因为它需要大量的GPU资源和较长的训练时间。此外,由于单个GPU工作线程的内存有限,并且许多大模型的大小已经超出了单个GPU的范围。所以就需要实现跨多个GPU的模型训练,这种训练方式就......
  • 转载:【AI系统】NVLink 原理剖析
    随着AI技术的飞速发展,大模型的参数量已经从亿级跃升至万亿级,这一变化不仅标志着AI的显著提升,也对支持这些庞大模型训练的底层硬件和网络架构提出了前所未有的挑战。为了有效地训练这些复杂的模型,需要依赖于大规模的GPU服务器集群,它们通过高速网络相互连接,以便进行快速、高效......
  • 转载:【AI系统】AI轻量化与并行策略
    了解AI计算模式对AI芯片设计和优化方向至关重要。本文将会接着从轻量化网络模型和大模型分布式并行两个主题来深入了解AI算法的发展现状,引发关于AI计算模式的思考。轻量化网络模型随着神经网络应用的普及,越来越多的模型需要在特定的硬件平台部署,如移动端和嵌入式设备,这......
  • 转载:【AI系统】关键设计指标
    前面我们已经对AI的计算模式有了初步的认识,那么这些计算模式具体是如何和AI芯片设计结合起来的呢?接下来我们将从AI芯片关键设计指标的角度来进一步拓展对AI计算体系的思考。计算单位市场上当一款AI芯片产品发布时候,经常会通过一些指标数据说明产品的能力,比如芯片制程,......
  • 转载:【AI系统】核心计算之矩阵乘
    AI模型中往往包含大量的矩阵乘运算,该算子的计算过程表现为较高的内存搬移和计算密度需求,所以矩阵乘的效率是AI芯片设计时性能评估的主要参考依据。本文我们一起来看一下矩阵乘运算在AI芯片的具体过程,了解它的执行性能是如何被优化实现的。从卷积到矩阵乘AI模型中的卷积层......
  • 智保未来:国泰产险的 AI 网关革新之旅
    在数智化转型的大潮中,国泰产险以其前瞻性的视角,全面拥抱大模型技术,在外呼、客服、内容生成等多个业务场景中实现了大模型的深度应用。引言在数字化转型的浪潮中,国泰产险以其前瞻性的视角,全面拥抱大模型技术,在外呼、客服、内容生成等多个业务场景中实现了大模型的深度应用。通过......
  • 转载:【AI系统】计算之比特位宽
    在前面的深度学习计算模式里面我们提到了模型的量化操作,通过建立一种有效的数据映射关系,使得模型以较小的精度损失获得更好的模型执行效率的收益。模型量化的具体操作就是将高比特的数据转换为低比特位宽表示。本文我们将在前面的深度学习计算模式里面我们提到了模型的量化操作,通......
  • 转载:【AI系统】CPU 指令集架构
    我们知道,计算机指令是指挥机器工作的指示和命令,程序就是一系列指令按照顺序排列的集合,执行程序的过程就是计算机的工作过程。从微观上看,我们输入指令的时候,计算机会将指令转换成二进制码存储在存储单元里面,然后在即将执行的时候拿出来。那么计算机是怎么知道我们输入的是什么指令,......