Page 97 - 《软件学报》2024年第6期
P. 97
张洪滨 等: AutoConfig: 面向深度学习编译优化的自动配置机制 2673
扩展性. 在当前领域特定计算和体系结构发展的黄金时代, 各领域计算负载到多种硬件平台的编译和优化需求日
益增长. AutoConfig 中的硬件信息收集策略可以针对特定硬件进行定制, 用户可根据需要扩展默认提供的动态测
量程序集合, 以及划定给定程序的子集. 无论是优化分析模型的定义还是配置规则的注册, AutoConfig 都提供了通
用的基础设施, 以满足灵活多变的调优需求. AutoConfig 的设计能够帮助开发者解耦编译优化的开发、分析、调
优的过程, 并为更精细的分工提供了可能性. 这种设计使得开发者可以专注于特定子模块进行深入开发, 并通过复
用现有组件降低开发成本.
3.2 AutoConfig 的模块组成
AutoConfig 的架构由驱动器、可配置的代码生成重写模式和优化分析模型这 3 大核心组件构成, 它们共同协
作为编译优化算法服务. 其中, 优化分析模型抽象出优化算法的特征, 而代码生成重写模式负责表达算法的优化逻
辑. 如图 2(b) 所示, 分析模型与重写模式之间存在直接的映射关系, 由 AutoConfig 驱动器维护这一映射, 并确保其
无缝集成到深度学习编译工具链中.
AutoConfig 驱动器是核心控制模块, 负责调用各模块接口进行协同工作, 并且对接深度学习编译工具链. 当深
度学习编译工具执行搭载 AutoConfig 的编译优化 Pass 时, AutoConfig 驱动器在所有已注册的分析模型中筛选出
算负载和硬件平台信息评估每一组分析模型的开销. 随后
总开销最低的一个. 随后, 它利用选定的分析模型和相对应的重写模式来生成优化代码.
优化分析模型融合了静态信息提取与动态开销测量这两大环节, 并结合编译优化开发者对优化算法的特征分
析, 最终形成一个综合的评估函数. 模型的分析是一个动静结合的过程: 静态信息主要来源于对优化算法及硬件平
台的特性提取; 动态信息来自于算法特征在目标硬件平台上的执行开销. 如图 2(b) 所示, 对优化算法的静态分析用
来确定计算次数、访存频率和特殊指令的发生次数, 而硬件信息的静态提取用于明确配置项取值范围. 动态开销测
量模块根据这一配置范围获取具体测量结果作为各部分开销的权重. 硬件信息的精确提取和分析对于明确可配置
的范围至关重要, 这不仅可以减少动态测量的开销, 也能够高效地选择配置项. 总的来说, 优化分析模型的设计与评
估是 AutoConfig 准确性的关键, 本文第 4 节将详尽阐述以向量计算尺寸为调优点的优化分析模型构建过程.
代码生成重写模式是对编译优化算法逻辑的直接实现. 在代码生成方面, AutoConfig 采用 MLIR 作为中间表
示, 并利用 MLIR 基础设施提供的各层级操作接口实现重写模式. AutoConfig 要求在这些重写模式中嵌入可配置
的参数, 它们的设置依据来自前述优化分析模型的结果. AutoConfig 的设计思路强调将这些可配置参数与特定的
重写模式相绑定, 而非与整体的编译优化 Pass 绑定, 这样的设计提升了调优的精细度和灵活性, 使得每一次优化
都可以根据特定的需求和条件进行个性化调整与配置.
3.3 AutoConfig 的使用方式
AutoConfig 旨在服务于编译优化的开发者, 提供了一系列接口以辅助优化和调优的开发. 区别于使用固定策
略开发编译优化, AutoConfig 要求开发者在创建重写模式时明确定义可配置项及其可能的取值范围. 此外, 用户需
要针对优化算法构造分析规则和相应的动态测量程序集合. 这些分析规则、动态测量程序集合和可配置项取值范
围共同构成优化分析模型. 针对每种计算负载的不同优化方式, 需要独立定义相应的分析模型和重写模式,
AutoConfig 驱动器负责将它们配对并完成注册. 集成到 MLIR 优化 Pass 中的 AutoConfig 驱动器, 在触发时根据计
AutoConfig 开始执行自动配置, 它通过整合计算负载的
尺寸信息、分析模型和硬件信息, 全面评估所有可能的算法与配置选择, 从而选择出最佳策略进行优化代码生成.
如算法 1 所示, 本文以可配置参数 vs 为例展示针对计算负载 op 的两种编译优化算法的自动配置和代码生成
过程. 首先, 为可配置参数 vs 设置可选的配置数值. 这里可以采用统一的配置集合以适应所有硬件后端, 或者根据
各种硬件特性定制专门的配置集合. 例如, 对于 x86 的 AVX512 硬件平台, 可选配置集合可以是{64, 128, 256}, 而
对于 Arm Neon 硬件平台, 则可以是{16, 32, 64}. 在选择了特定的配置集合后, 可以配置动态测量程序子集以适应
所需的开销函数, 以此来降低配置成本.
算法 1. AutoConfig 机制的使用.