算子融合也称符算融合,作为面向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+Reduction等,以此实现所有符合规则的子图融合。
两种路线相比各有优劣:
- 对于业务范围、应用设备十分明确的场景,遍历路线更适合在短期内迅速提升模型的执行性能。假设某公司的业务是在ARM设备上做Resnet模型的推理,那么提升模型推理性能的最直接手段必然是实现不同Workload的Conv+BN+ReLU子图在ARM设备上的最优流水排布、数据并行方式、循环拆分合并等。同时,这一路线的缺点也十分明显:没有泛化性,如果部署设备、模型等要素发生变化,之前的
算子融合技术详解:从Apollo到Mindspore的优化策略

最低0.47元/天 解锁文章
6653

被折叠的 条评论
为什么被折叠?



