算子融合也称符算融合,作为面向DL模型推理的一种关键图优化技术,通过减少计算过程中的访存次数达到提升模型推理性能的目的,该技术在不同时期、不同框架下的落地方式各不相同。本文将首先带大家回顾算子融合技术的发展历程,并浅析其中颇有代表性的Apollo方案。
1.算子融合技术的发展历程
大约16年前后,业界对于推理应用的性能诉求还不普遍,对于有性能需求的场景,最常见的做法是利用设备供应商提供的API加速计算图中的部分计算密集型(Compute-bound,以下称CB)算子,如Conv、Dense等。这一时期,用户自定义的算子融合多半是相邻访存密集型(Memory-bound,以下称MB)算子的融合;而典型的CB+MB形式的融合(例如Conv+ReLU)则受限于供应商API的支持程度。
随着AI模型在各领域的发展、成熟和落地,模型推理在具体设备上的性能变得越发重要,17年到18年,业界出现了大量面向DL模型推理的计算框架,算子融合技术在不同框架上呈现出两种典型的发展路线:
- 遍历路线:针对特定设备,枚举实现典型的CB+MB形式的融合算子,如Conv+ReLU/Conv+BN+ReLU/Dense+ReLU/Conv+Sum等等,Intel的oneDNN以及国内很多大厂的推理框架走的都是这个路线。
- 规则路线:基于规则实现算子融合,以TVM为例,其将所有算子分为Opaque/Injective/Reduction/Complex-out四类,并设定融合规则形如Complex-out+Injective/Injective+Injective/Injective+Reducti