【AI系统】代数简化

简介: 代数简化是一种基于数学原理优化计算图的技术,通过调整算子执行顺序或删除冗余算子来提升计算效率。主要方法包括算术简化(利用代数法则如交换律、结合律等优化运算符顺序)、运行简化(减少冗余的算子操作,如对合算子和幂等算子的化简)和广播简化(优化不同形状张量间的广播运算)。这些方法共同作用,旨在减少计算资源消耗,加速计算过程。

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

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

算术简化

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

结合律

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

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

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

$$ (x*y)*z = x*(y*z)\\ $$

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

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

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

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

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

结合律

根据上述结合律规则,我们可以把 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 \\ a*b = b*a \\ $$

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

$$ x*y= y*x \\ $$

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

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

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

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

交换律

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

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

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

分配律

分配律简化,即

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

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

$$ x*(y\circ z) = (x*y)\circ (x*z) \\ (y\circ z)*x = (y*x)\circ (z*x) \\ $$

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

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

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

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

分配律

我们会发现,$A\cdot B \quad\quad$ 之后与 $C,D\quad\quad$ 分别做乘法操作时没有必要的,于是可以提取公因式,将 $C,D\quad\quad$ 单独加和再做乘法,将 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\quad\quad\quad\quad$。

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

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

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

DNNFusion

运行简化

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

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

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

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

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

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

    一个具体的实例如下:

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

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

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

对合算子

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

幂等算子

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

广播简化

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

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

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

BroadcastExample

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

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

目录
相关文章
|
3天前
|
机器学习/深度学习 人工智能 算法
【AI系统】框架编程范式
编程范式是软件工程中一类典型的编程风格,如函数式、命令式、声明式、面向对象等。它们影响着开发者对程序执行的理解。本文探讨了两种主要的编程范式——声明式编程与命令式编程,特别是在AI框架中的应用,如TensorFlow的声明式编程和PyTorch的命令式编程,分析了这两种范式对AI框架架构设计的影响及主流AI框架在这两种范式上的差异。
26 3
【AI系统】框架编程范式
|
2天前
|
机器学习/深度学习 人工智能 编译器
【AI系统】微分实现方式
本文详细介绍了自动微分的三种实现方法:基本表达式、操作符重载和源代码转换。每种方法都有其特点和适用场景,包括它们的实现原理、优缺点。自动微分是机器学习和深度学习中的关键技术,理解这些实现方式有助于更好地掌握其背后的数学原理和工程实践。文中还提到了具体的应用案例和工具,如PyTorch和MindSpore,展示了这些方法在实际项目中的应用。
15 3
|
3天前
|
机器学习/深度学习 人工智能 算法
【AI系统】自动微分引言
本文聚焦AI框架中的自动微分功能,探讨其重要性及其实现方式。自动微分是AI框架的核心,支持正向和反向传播,确保模型的有效训练。文中介绍了微分的基本概念、自动微分的两种主要模式(前向和后向微分),以及其实现方法,包括表达式图、操作符重载和源码转换。此外,文章还展望了自动微分技术的未来发展与挑战,鼓励读者深入学习AI框架及其背后的原理。
17 1
|
17天前
|
机器学习/深度学习 数据采集 算法
从零到一:构建高效机器学习模型的旅程####
在探索技术深度与广度的征途中,我深刻体会到技术创新既在于理论的飞跃,更在于实践的积累。本文将通过一个具体案例,分享我在构建高效机器学习模型过程中的实战经验,包括数据预处理、特征工程、模型选择与优化等关键环节,旨在为读者提供一个从零开始构建并优化机器学习模型的实用指南。 ####
|
14天前
|
存储 人工智能 缓存
【AI系统】核心计算之矩阵乘
本文探讨了AI模型中矩阵乘运算的优化实现及其在AI芯片设计中的重要性。文章首先介绍了卷积操作如何转化为矩阵乘,接着阐述了矩阵乘的分块(Tiling)技术以适应芯片内存限制,最后总结了几种常见的矩阵乘优化方法,包括循环优化、分块矩阵乘法、SIMD指令优化等,旨在提高计算效率和性能。
38 0
|
2月前
|
人工智能 搜索推荐 测试技术
AI 辅助编程的效果衡量
本文主要介绍了如何度量研发效能,以及 AI 辅助编程是如何影响效能的,进而阐述如何衡量 AI 辅助编程带来的收益。
|
4月前
|
存储 人工智能 自然语言处理
算法、系统和应用,三个视角全面读懂混合专家(MoE)
【8月更文挑战第17天】在AI领域,混合专家(MoE)模型以其独特结构成为推动大型语言模型发展的关键技术。MoE通过动态选择专家网络处理输入,实现条件计算。稀疏型MoE仅激活部分专家以减少计算负担;软MoE则加权合并专家输出提升模型稳定性。系统层面,MoE优化计算、通信与存储,利用并行化策略提高效率。在NLP、CV、推荐系统等领域展现强大应用潜力,但仍面临训练稳定性、可解释性等挑战。[论文链接: https://arxiv.org/pdf/2407.06204]
214 63
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
PHP编程中的面向对象基础利用AI技术提升文本分类效率
【8月更文挑战第28天】在PHP的编程世界中,面向对象编程(OOP)是一块基石,它不仅塑造了代码的结构,也影响了开发者的思考方式。本文将深入探讨PHP中面向对象的基础概念,通过浅显易懂的语言和生动的比喻,带领初学者步入这个充满魅力的世界。我们将一起探索类与对象的秘密,理解构造函数和析构函数的重要性,以及继承和多态性的魔法。准备好了吗?让我们开始这段激动人心的旅程!
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
AI是如何在编程中提升效率的
在快速发展的科技时代,人工智能(AI)已从科幻概念变为现实,尤其在软件开发领域产生了深远影响。AI通过自然语言处理技术准确理解需求并自动生成初步代码框架,大幅减少需求分析与设计工作量。同时,智能代码补全、代码审查及自动化测试等工具显著提升了编码与测试效率,基于大数据分析和机器学习预测所需代码片段,自动发现并修正潜在错误,确保软件质量的同时减轻开发者负担。
|
4月前
|
机器学习/深度学习 并行计算 异构计算
面向高效能计算的深度学习框架优化策略
【8月更文第9天】随着深度学习在各个领域的广泛应用,对训练模型的速度和效率要求越来越高。为了满足这些需求,深度学习框架需要针对不同硬件平台进行优化。本文将探讨针对GPU、TPU等硬件平台的优化策略,重点关注数据传输效率、并行计算策略及内存管理等方面。
164 1