简介
概述
Scope融合是一种基于Scope来进行融合的能力,把Scope内的多个小算子替换为一个大算子或多个算子组合,以实现效率的提升。
本文主要介绍内置的Scope融合规则,同时开放Scope融合规则开发接口供用户自定义,具体请参考《TensorFlow Parser Scope融合规则开发指南》。
通用和定制化融合规则
融合规则通常分为通用和定制化融合规则两类:
- 通用融合规则(General):各网络通用的scope融合规则;默认生效,不支持用户指定失效。
- 定制化融合规则(Non-General):特定网络适用的scope融合规则;默认不生效,用户可以指定需要生效的融合规则,定制化融合规则生效方式可以参考如下生效方式。
表1 定制化融合规则生效方式 场景
生效方式
离线推理场景下,使用离线模型转换工具编译TensorFlow原始模型
通过模型转换命令行参数enable_scope_fusion_passes指定需要生效的融合规则,多个用“,”分隔:
--enable_scope_fusion_passes = DecodeBboxV2ScopeFusionPass
离线推理场景下,解析TensorFlow原始模型
通过aclgrphParseTensorFlow接口解析TensorFlow原始模型时,通过
ENABLE_SCOPE_FUSION_PASSES参数指定需要生效的融合规则,多个用“,”分隔:
{ge::AscendString(ge::ir_option::ENABLE_SCOPE_FUSION_PASSES), ge::AscendString("DecodeBboxV2ScopeFusionPass")},
训练或在线推理场景下,在TensorFlow框架内执行
通过TensorFlow框架运行配置参数enable_scope_fusion_passes指定需要生效的融合规则,多个用“,”分隔:
import tensorflow as tf from npu_bridge.estimator import npu_ops from tensorflow.core.protobuf.rewriter_config_pb2 import RewriterConfig config = tf.ConfigProto() custom_op = config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" custom_op.parameter_map["use_off_line"].b = True custom_op.parameter_map["enable_scope_fusion_passes"].s = tf.compat.as_bytes("DecodeBboxV2ScopeFusionPass") config.graph_options.rewrite_options.remapping = RewriterConfig.OFF with tf.Session(config=config) as sess: sess.run()