AI编译器技术浅析
随着深度学习应用和专用加速器的兴起,为了快速部署DNN网络,产生了两条主要的技术路线:手写算子和AI编译器(深度学习编译器)生成代码。
手写算子需要具备领域特定专业知识的工程师打磨调试出高性能的代码实现,然后再经过传统编译器生成可执行代码,经验丰富的工程师可以写出性能极佳的算子。但是手写算子的缺点也非常明显:其一,需要堆人力,并且很难覆盖深度学习领域的所有算子。其二,手写算子一般都是单算子实现或者和前后element-wise算子做简单融合,很难做很深的算子融合,在追求极致的推理场景,还是无法完全发挥硬件性能极限。
AI编译器致力于自动生成高效代码。我理解的AI编译器技术栈是这样的:
首先,它的输入可能是深度学习框架的模型,AI编译器做前端的解析,生成AI的编译器High-Level的Gpaph IR(图IR)。在Graph IR上做图级别的优化,这里既能借鉴传统编译器的优化算法进行优化(比如常量折叠、死代码删除等等),也需要增加领域特定的优化(比如融合、layout、量化等等),领域特定的优化很大程度上依赖于领域特定架构(DSA)的信息。
然后,再转化为low-level的张量级别的IR(Tensor IR),在这一层,主要利用DSA特点进行优化,比如循环优化、片上存