Page 105 - 《软件学报》2024年第6期
P. 105
张洪滨 等: AutoConfig: 面向深度学习编译优化的自动配置机制 2681
AutoConfig 基于 Buddy Compiler 实现, 在代码生成阶段使用了开源编译器框架 LLVM, 版本为 17.0.0; 在对比实验
中采用的 TVM 版本为 v0.14.0.
6.1 优化场景的选择
本文选取了一个经典的卷积神经网络 EfficientNet (模型文件来自 https://coral.ai/models/image-classification/),
并针对其中的关键深度学习计算负载即不同输入尺寸的卷积层进行优化. 卷积神经网络是以卷积层作为主要模块
的深度学习模型. 对于卷积神经网络而言, 靠近输入部分的卷积层其功能主要在于从输入中提取初步特征, 因此卷
积的输入尺寸较大而通道数较少. 处于模型中间部分或靠近输出部分的卷积层其功能主要在于从上一层输出的特
征中进一步提取深层信息, 因此卷积的输入尺寸较小而通道数较多.
EfficientNet 是经典的卷积神经网络模型, 本节基于 EfficientNet 完成实验探究. 表 5 对该模型文件中与计算和
访存相关的粗粒度计算负载进行了统计, 可以看出卷积 (conv_2d_nhwc_hwcf) 的计算占所有计算负载的大多数
(38/64), 可见通过从模型中的不同部分选取了尺寸多样的卷积作为优化对象具有一定的代表性, 能够反映优化算
法的选择对整体性能的影响.
表 5 EfficientNet 高层计算负载统计
平台, 向量化长度为
高层计算负载 出现次数
batch_matmul 1
depthwise_conv_2d_nhwc_hwcm 11
conv_2d_nhwc_hwcf 38
collapse_shape 12
expand_shape 2
6.2 基于硬件信息的参数配置
为了验证硬件信息对优化算法参数选取的影响, 在 AVX512 和 ARM Neon 平台中分别以 {16,32,64,128,256}
的数值设置向量化长度, 并在不同的卷积优化场景中计算优化加速比, 随后对于这两个平台分别选取平均实际加
速比最大的向量化长度设置, 将相关数据记录在表 6 和表 7 中. 为了方便对比, 也将适合 AVX512 的向量化长度
配置应用于 ARM Neon 平台中进行测试, 将相关数据记录在表 8 中. 图 4 是面向 ARM Neon 平台时, 选取不同向
量化参数 vs 的 Broadcast 算法优化卷积的执行时间比较.
表 6 基于 AVX512 平台, 向量化长度为 64 时的最佳算法选择探究
标量执行时间 Im2Col执行 Broadcast执行 算法选择结果
卷积尺寸 实际加速比 预测加速比
(ms) 时间 (ms) 时间 (ms) 是否正确
(1×1536×7×7, 192×1536×1×1) 75.3 2.2 14.5 6.74 2.51 √
(1×192×7×7, 1536×192×1×1) 76.9 2.1 14.7 7.14 2.83 √
(1×48×30×30, 384×48×3×3) 647 16.9 32.5 1.91 1.58 √
(1×32×114×114, 96×32×3×3) 1 726 76.9 46.6 0.66 0.83 √
(1×64×58×58, 64×64×3×3) 581 19.9 18.0 9.91 1.84 √
表 7 基于 ARM Neon 16 时的最佳算法选择探究
标量执行时间 Im2Col执行 Broadcast执行 算法选择结果
卷积尺寸 实际加速比 预测加速比
(ms) 时间 (ms) 时间 (ms) 是否正确
(1×1536×7×7, 192×1536×1×1) 53 2.9 28.0 10.00 1.51 √
(1×192×7×7, 1536×192×1×1) 49.2 4.5 26.7 5.88 1.57 √
(1×48×30×30, 384×48×3×3) 461 15.4 63.9 4.17 1.15 √
(1×32×114×114, 96×32×3×3) 1 229 49.7 47.8 0.97 0.94 √
(1×64×58×58, 64×64×3×3) 1 211 50.1 47.7 0.95 0.94 √
一方面, 从图 4 中可以看出, 在 ARM Neon 平台上选择 16 作为向量化长度能够获得更小的执行时间和更准
确的预测结果, 这说明向量化长度参数的选取会对优化性能产生关键影响. 另一方面, 根据表 6, 在 AVX512 平台