2019年来自清华大学的硬件上DNN编译器综述论文“An In-depth Comparison of Compilers for Deep Neural Networks on Hardware”。
将 NN 模型映射到高性能硬件实现的难度来自多种因素,包括从多个操作的计算复杂性到不同的硬件特性(例如内存分层结构和并行性)。本文介绍一种通用的编译器流程,并对编译器框架的域特定语言(DSL)、中间表示(IR)、优化策略和自动调度方法进行深入比较。基于这些编译器框架,重新实现典型的 NN 模型,并评估最终的性能。另外,回顾之前关于编译器框架和针对定制的基于 FPGA 加速器优化工作(深度神经网络虚拟机,DNNVM),得到有关通用处理器的编译器设计与基于 FPGA 的加速器编译器设计之间差异分析。
首先,前端将深度神经网络的高级规范转换为特定于编译器的 IR。这些 IR 通常采用有向无环图[1][3] 的形式,其中每个节点代表一个计算操作,每个边表示操作之间的数据依赖关系。因此,可以在这些 IR 上使用图算法[13][19] 来融合操作并优化数据布局。除了高级 IR,编译器的优化过程中还采用了多个广泛的 IR[21]–[24]。深度神经网络工作负载可以分解为张量运算,例如矩阵-向量乘法和矩阵-矩阵乘法。低级优化方法[12][13]用于优化调度,以增强数据局部性并充分利用硬件平台的并行性。这个问题变成了使用什么优化以及选择哪些参数(例如,平铺大小、融合策略和矢量化)。在编译阶段可能会应用数百个低级优化的步骤。最后,后端[24],[25]负责将优化的实现映射到机器相关的可执行指令。
挑战的地方包括以下这些方面:
1)IR。一种有效的设计思路是将算法描述与深度学习框架和硬件平台解耦。IR 不仅应该提供简洁、可移植且富有表现力的语法来表示 NN 模型和控制流,还应该提供包含算法和硬件平台特征的强大抽象表示,以便进行后续分析和优化。