下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

算子融合功能

功能简介

使用图模式运行模型时会自动融合算子,以降低训练或推理整体运行时间。算子融合分为图融合和UB融合两种,更详细介绍参考CANN 图融合和UB融合规则参考

  • 图融合(Graph Fusion):指融合引擎根据融合规则进行改图的过程,该过程主要通过拆分/合并计算图中的算子来提升计算效率,以实现加速运算的目的,与硬件无关。
  • UB融合(Unified Buffer Fusion):指对图上算子进行硬件UB相关的融合,UB是昇腾AI处理器上的Unified Buffer。例如两个算子a和b单独运行时,算子a的计算结果在UB上,需要搬移到DDR(Double Data Rate,双倍速率同步动态随机存储器)。算子b再执行时,需要将算子a的输出由DDR再搬移到UB,进行算子b的计算逻辑,计算完之后,又从UB搬移回DDR。

算子融合是整网性能提升的一种关键手段,目前系统内置了一些算子融合规则,缺省情况下均为开启(如有缺省关闭,会有特殊说明)。TorchAir在npu_backend中额外提供了config配置项,允许用户自定义关闭/开启部分融合算子。

使用方法

  1. 自定义算子融合规则文件(*.cfg)。
    假设规则文件为/home/test/fusion_switch.cfg,内容如下,其中on表示开启融合规则,off表示关闭融合规则。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    {
        "Switch":{
            "GraphFusion":{
                "ConvToFullyConnectionFusionPass":"on",
                "SoftmaxFusionPass":"on",
                "ConvConcatFusionPass":"on",
                "MatMulBiasAddFusionPass":"on",
                "PoolingFusionPass":"on",
                "ZConcatv2dFusionPass":"on",
                "ZConcatExt2FusionPass":"on",
                "TfMergeSubFusionPass":"on"
            },
            "UBFusion":{
                "FusionVirtualOpSetSwitch":"on"
            }
        }
    }
    

    同时支持用户一键关闭/开启融合规则,一键关闭操作示例如下:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    {
        "Switch":{
            "GraphFusion":{
                "ALL":"off"
            },
            "UBFusion":{
                "ALL":"off"
             }
        }
    }
    

    一键式关闭融合规则仅是关闭系统部分融合规则,而非全部融合规则,即便是配置"ALL": "off"后,部分融合算子仍旧会生效,因为关闭某些融合规则可能会导致功能问题。

  2. 开启算子融合功能。

    该功能通过torchair.get_npu_backend中compiler_config参数配置,配置示例如下,参数说明参见表1

    1
    2
    3
    4
    5
    import torch_npu, torchair
    config = torchair.CompilerConfig()
    # 指定融合配置文件的路径
    config.fusion_config.fusion_switch_file = "/home/test/fusion_switch.cfg
    npu_backend = torchair.get_npu_backend(compiler_config=config)
    
    表1 参数说明

    参数名

    参数说明

    是否必选

    fusion_switch_file

    指定算子融合规则文件。

    若想确认该功能配置是否生效,在运行之前需要提前设置日志环境变量,该环境变量会打印图初始化时的一些开关配置。

    1
    export TNG_LOG_LEVEL=0
    

    若配置正确,在日志信息中搜索“ge.fusionSwitchFile:”关键字,可以看见类似的屏显信息。

    1
    concrete_graph/session.cpp:28   ge.fusionSwitchFile: /home/test/fusion_switch.cfg
    

产物说明

算子融合规则文件生效后,缺省情况下在当前操作目录生成名为"fusion_result.json"的文件。

若没有生成fusion_result.json,系统会采用默认的配置运行图模式,该配置文件路径为“${HOME}/Ascend/ascend-toolkit/latest/opp/built-in/fusion_pass/config/fusion_config.json”,其中${HOME}为CANN软件安装目录。

fusion_result.json文件示例如下:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[{
    "graph_fusion": {
        "RefreshInt64ToInt32FusionPass": {
            "effect_times": "1",        # 成功图融合的次数
            "match_times": "1"          # 匹配图融合条件的次数
        }
    },
    "session_and_graph_id": "0_0"     # "0_0"是图所在session id和图本身id的拼接
    "ub_fusion": {
        "MatmulAtomicAddUbFusion": {
            "effect_times": "36",        # 成功UB融合的次数
            "match_times": "72",         # 匹配UB融合条件的次数
          
        }
    }
}]

当图找到1次满足“RefreshInt64ToInt32FusionPass”融合条件的情况,成功融合了1次。找到了72次满足“MatmulAtomicAddUbFusion”融合条件的情况,成功融合了36次。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词