Op Fusion(一): 什么是算子融合
发布网友
发布时间:2024-10-04 04:17
我来回答
共1个回答
热心网友
时间:2024-10-11 13:10
深度神经网络(DNNs)已成为移动设备上多种关键应用的核心驱动力。为了达到高精度,DNN模型变得日益复杂,包含数百至上千的算子层,从而对内存和计算能力提出了高要求。算子融合(内核/层融合)成为先进DNN执行框架,如TensorFlow、TVM和MNN的重要优化手段,旨在提升DNN推理效率。
算子融合通过识别并合并具有数据依赖性的操作,优化计算图,从而降低内存访问开销,提高计算效率。这种方法统称为“Buffer融合”,在早期的AI框架中主要通过手工实现。然而,为了解决手工融合的局限性,现代AI编译技术和框架转向自动Buffer融合优化技术,如XLA、TVM和MLIR,通过在计算图上合并相邻具有数据依赖性的算子,减少内存访问,提升性能。
针对内存墙问题,算子融合通过优化计算图的结构,提升中间Tensor数据的访问局部性,减少内存访问开销。而针对并行墙问题,通过将计算图中的算子节点进行并行编排,提升整体计算并行度,特别对于网络中存在可并行分支节点,这种方式可以获得较好的并行加速效果。当前自动算子融合优化技术大致沿着两条路径发展:用于解决内存墙的Buffer融合和用于解决并行墙的并行融合。
TVM在算子融合流程中,首先通过深度优先遍历生成DFS树,并记录每个节点的深度和与之相连的边,以便生成DOM树,找到每个节点的支配点。TVM使用group概念描述算子融合,初始化出支配点为自身,然后遍历每个节点到支配点的所有路径,检查融合规则,对满足条件的算子进行融合。
算子融合的基本原则是,融合掉的节点不会影响剩余节点。融合分为三个阶段,每个阶段处理不同类型的可融合算子。融合操作通过检查当前节点到支配点路径上的节点是否符合融合规则来决定。如果符合,执行融合操作,否则不执行。完成融合后,创建新的计算图。
未来研究应探索更多融合模式,提高算子融合的灵活性和效率,同时优化自动算子融合技术,使其在内存和并行墙问题上取得更好的平衡,进一步提升DNN推理效率。