Page 94 - 《软件学报》2024年第6期
P. 94

2670                                                       软件学报  2024  年第  35  卷第  6  期


                           [7]
                 计算. MIOpen 是由   AMD  开发的数学和科学计算库, 专为深度学习在              AMD  设备上的并行计算而设计. 高性能算
                 子库的开发通常针对某类特殊硬件, 实现上一般依赖手工调优. 这种调优方式尽管在某些具体场景能取得良好的
                 效果, 但是不具备跨平台迁移的能力.
                    近年来, 随着摩尔定律趋于终结, 为了应对深度学习领域对高算力的需求, 越来越多计算场景引入了                                FPGA、
                 CGRA、TPU  [11] 等深度神经网络加速器进行加速. 为了将深度学习模型的计算模式高效映射到多样的硬件设备上,
                 基于深度学习编译优化的框架设计成为了研究重点. TVM                  是目前工业界中较为常用的深度学习编译框架, 它将模
                 型优化的过程视为对张量程序的变换, 可借助               autoTVM [12] 、Ansor [13] 等基于代价模型和启发式算法的搜索策略优
                 化算子执行逻辑. 但是在面对程序逻辑复杂、调优参数众多的算法时, 庞大的搜索空间会使调优开销变得不可承
                 受, 且调优方式也不具备理论上的可解释性. 除了以搜索策略为主的编译框架, 还有其他的工作如                              ROLLER [14] 和
                 SparTA [15] . ROLLER  可基于硬件平台完成张量程序的分块调优, 并采用递归算法实现代码生成, SparTA                 则提出了
                 一种充分利用稀疏性的端到端模型优化通路. 这两种框架通过针对某种特定优化方式或利用数据特性来从新的视
                 角发掘优化的机会, 但对于其他通常情况则存在应用的局限.

                 2   基础知识
                 的是变换的开销由于涉及到访存, 因此不可忽略.
                    本节首先以卷积和矩阵乘法为例介绍深度学习模型计算负载及其优化方法, 然后概述深度学习编译优化的基
                 本流程, 最后介绍     AutoConfig  的实现所依托的编译基础设施        MLIR [16] .

                 2.1   深度学习计算负载及其优化方法

                 2.1.1    矩阵乘法及其优化方法
                    近年来, 随着大语言模型的迅速发展, Transformer        [17] 已成为自然语言处理领域中极具影响力的经典模型. 注意
                 力机制是 Transformer 中的关键模块, 它能够有效处理长序列和目标序列中的依赖关系. 该模块通过计算序列中不
                 同位置之间的相似度, 并为每个位置分配一个权重系数, 从而实现对不同位置的加权关注. 在具体实现中, 需要首
                 先计算查询向量和键向量之间的相似度, 然后将相似度与值向量相乘并加权求和, 最终得到加权后的值向量. 因为
                 此类计算模式在注意力机制中广泛存在, 所以优化矩阵乘法是高效执行 Transformer 模型的关键                        [18] .
                    矩阵乘法的一种在算法级别的优化方法是                Strassen  方法  [19]  , 它通过减少乘法操作的次数来降低计算的理论
                 时间复杂度. 在工业界中, 矩阵乘法的优化策略主要集中在提高计算效率和减少资源消耗上, 包括利用多线程和多
                 核处理器做并行计算、将大矩阵划分成小块做分块计算、优化矩阵在内存中的排布来减少缓存未命中次数等高
                 性能优化方法.

                 2.1.2    卷积层及其优化方法
                    卷积神经网络是在计算机视觉领域中广泛使用的模型. 它通过卷积模块来提取图像的局部特征. 卷积层是卷
                 积模块的核心, 它通过在输入数据上滑动一个固定大小的卷积核来提取图像的局部信息. 卷积层中可以包含多个
                 卷积核, 每个卷积核可以提取不同的特征. 在深度学习模型中, 卷积还有空洞卷积、深度可分离卷积等不同的变
                 种, 它们根据输入的张量表示也可分为“NHWC”和“NCHW”等不同的数据排列方式. 不同的卷积类型、输入尺寸
                 和卷积核大小、数据排列方式会影响计算负载优化的策略.
                    卷积的优化方法有很多种, 包括从矩阵乘法的视角看待卷积                     [20] 并应用  Strassen  方法做优化、基于   FFT  和
                 Winagrad  的变换方法  [21] 和  Im2Col 算法  [22] 等. 其中  Im2Col 算法是目前最通用的优化算法之一, 其主要思想是先将
                 卷积核重叠部分展开和变换输入矩阵, 然后利用高性能的矩阵乘法实现来加速卷积运算, 如图                             1(a) 所示. 需要注意

                 2.1.3    Broadcast 向量化算法
                    在执行卷积和矩阵乘法等计算负载时, 可以通过改变原始算法的操作顺序来换取更好的访存模式, 以为向量
                 化提供充分的空间. 本文采用了一种基于广播操作的优化算法                    (Broadcast 算法), 它的计算逻辑是从一个矩阵中顺
                 序取出向量, 从另一个矩阵中顺序取出标量并使用广播操作构造出向量, 从而达到向量化计算的效果, 如图                                  1(b)
                 所示. 在具体实现时, Broadcast 算法会将需要跨行的矩阵计算转换为访存模式更友好的多次迭代单行计算, 并专
                 注于对内层循环做向量化. 本节的后续内容将基于该算法和其他算法采用优化分析模型进行建模、比较和验证.
   89   90   91   92   93   94   95   96   97   98   99