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

张洪滨 等: AutoConfig: 面向深度学习编译优化的自动配置机制                                            2671



                                                                    ⑤ 将计算结果存储到
                              输出矩阵                               输出矩阵 输出矩阵对应元素   ① 将卷积核元素广播为向量
                                                                                        卷积核
                                               ② 将列向量插入变换
                      ④ 执行矩阵相乘计算              变换后输入矩阵                  ④ 融合乘加计算
                                                后输入矩阵
                           ③ 一个或多个卷积核              输入矩阵       ③ 将输出矩阵中       ② 将输入矩阵中          输入矩阵
                         卷积核
                            组成卷积核向量或矩阵
                                                              对应元素加载为向量
                                   ① 将卷积核重叠部分
                                   展开为列向量
                                                                             对应元素加载为向量
                                  (a) lm2Col+GEMM优化算法                   (b) 基于广播操作的优化算法
                                                   图 1 卷积优化算法图示

                 2.2   深度学习编译优化的基本流程
                    深度学习编译优化的基本流程如图             2(a) 所示. 首先, 来自深度学习模型中的计算负载会通过框架前端引入成
                 为各种中间表示. 接着, 在中间表示的各个层级会进行编译优化, 优化后的结果随后被送到编译器和工具链中完成
                 硬件代码生成. 在这个过程中, 中间表示层级是优化和调优的关键部分                     [23] .

                      深度学习框架                                               AutoConfig 编译优化自动配置机制
                                                                                      AutoConfig 目标
                                                                     承接深度学习模型的 MLIR 方言  - 一次优化实现适配多种硬件平台
                                   深度学习计算负载中间表示                                       - 配置优化算法的最佳代码生成策略
                                                                       Linalg Dialect/TOSA Dialect  - 选择最佳优化算法进行代码生成
                          TVM Relay IR 中间表示, TorchDynamo 图表示, MLIR Linalg/TOSA 方言等
                                                                                      可配置的代码生成重写模式
                                                                      优化算法 + 核心 MLIR 方言  - 粗颗粒度重写高层算子
                        自动调优           手动优化           自动配置                            - 优化算法的可配置代码生成策略
                                                                     - Broadcast 算法  - MemRef 方言  - 根据优化分析模型自动配置代码生成
                       •  代价模型      •  高性能算子库       •  可配置的代码生成      - Im2Col 算法  - Affine 方言
                                                                             - Vector 方言
                                                                     - Winograd 算法
                       •  搜索空间      •  平台特定 Intrinsic  •  优化分析模型       ... ...  ... ...
                       •  搜索策略      •  高性能编程接口      •  硬件信息收集策略
                                                                                     优化分析模型
                                                                       LLVM IR+汇编代码生成  - 总开销建模为计算 + 访存 + 特定开销
                                                                                     - 硬件信息提取结果指导参数配置范围
                                                                                     - 根据算法特性构建动态测量程序集合
                             LLVM IR  | 特定硬件工具链 | 模拟器 | 运行时环境                rw.create<vector::BroadcastOp>(..., vectorTy, ...);
                                                                         目标硬件平台
                            硬件平台:CPU 高性能扩展 | GPGPU | 领域特定加速器
                                                     (a) AutoConfig 机制的概述
                      深度学习模型        多级中间表示编译工具          MLIR-LLVM 翻译器       LLVM 系统编译器         目标文件
                      forward.mlir     buddy-opt         buddy-translate      buddy-llc        forward.o
                                               Populate Pattern
                                               Fetch Operation
                                         Register                           Register
                      基于静态信息提取和动态开销测量的优化分析模型        维护分析模型和重写模式之间的映射关系           可配置的代码生成重写模式
                          Algorithm Analysis:算法特性分析                         void BroadcastPattern (Operation *op,
                           Dynamic Cost:动态测量开销        {Analysis Model->Rewrite Pattern}  ... ... ConversionPatternRewriter &rw,int64_t vs) {
                          Configure Range:参数可配置范围                            // Configure Vector Type.
                                     M                                    Implement  auto vectorTy = mlir :: VectorType::get ({vs}, f32);
                                            Analyze                          ... ...
                        Model=ƛ(vs)FPO+ƛ(vs)DM+  ƛ(vs)specIns i             }
                                    i+1
                                                                            void Img2ColPattern (Operation *op,
                                                      基于 Broadcast 的卷积优化算法   ... ... ConversionPatternRewriter &rw, int64_t vs) {
                                                    Broadcast 指令|FMA 计算|访存开销  // Configure Vector Type.
                                                                             auto vectorTy = mlir :: VectorType :: get ({vs}, f32);
                       硬件信息的静态提取    程序开销的动态测量                                rw. create<affine :: AffineVectorLoadOp>> (..., vectorTy, ...);
                                                                             ... ...
                                                     基于 Img2Col 变换的卷积优化算法    rw. create<affine :: AffineVectorStoreOp> (..., vectorTy, ...);
                        Registers,Cache…  Ld/St,FMA,Broadcast…               ... ...
                                                    Img2Col 变换|矩阵乘法算子|访存开销  }
                                                (b) AutoConfig 机制的设计、实现与集成
                                           图 2 AutoConfig  的概述、设计、实现与集成
   90   91   92   93   94   95   96   97   98   99   100