---
title: 简介
description: "Scope融合是一种基于Scope来进行融合的能力，把Scope内的多个小算子替换为一个大算子或多个算子组合，以实现效率的提升。"
url: https://www.hiascend.com/document/detail/zh/TensorFlowCommercial/latest/Convergence/tfscopefusionref
sourcePath: /source/zh/TensorFlowCommercial/900/Convergence/tfscopefusionref/atlasfr_30_0002.html
indexId: 9bec3d1d6f63e5210d87dd1918e69125db2cb497a3fbddc7891b04d40ef2d6f185
---
# 简介

#### 概述

Scope融合是一种基于Scope来进行融合的能力，把Scope内的多个小算子替换为一个大算子或多个算子组合，以实现效率的提升。

本文主要介绍内置的Scope融合规则，同时开放Scope融合规则开发接口供用户自定义，具体请参考《TensorFlow Parser Scope融合规则开发(https://www.hiascend.com/document/detail/zh/TensorFlowCommercial/900/Convergence/tfscopedevg/atlastfscopedev_11_0002.html)》。

支持的TensorFlow版本为1.15和2.6.5。


#### 通用和定制化融合规则

融合规则通常分为通用和定制化融合规则两类：

- 通用融合规则（General）：各网络通用的scope融合规则；默认生效，不支持用户指定失效。
- 定制化融合规则（Non-General）：特定网络适用的scope融合规则；默认不生效，用户可以指定需要生效的融合规则，定制化融合规则生效方式可以参考如下生效方式。
**表1 定制化融合规则生效方式**

| 场景 | 生效方式 |  |  |
| --- | --- | --- | --- |
| 离线推理场景下，使用离线模型转换工具编译TensorFlow原始模型 | 通过模型转换命令行参数enable\_scope\_fusion\_passes指定需要生效的融合规则，多个用“,”分隔： 1 \-\-enable\_scope\_fusion\_passes = DecodeBboxV2ScopeFusionPass | 1 | \-\-enable\_scope\_fusion\_passes = DecodeBboxV2ScopeFusionPass |
| 1 | \-\-enable\_scope\_fusion\_passes = DecodeBboxV2ScopeFusionPass |  |  |
| 离线推理场景下，解析TensorFlow原始模型 | 通过aclgrphParseTensorFlow接口解析TensorFlow原始模型时，通过 ENABLE\_SCOPE\_FUSION\_PASSES参数指定需要生效的融合规则，多个用“,”分隔： 1 {ge::AscendString(ge::ir\_option::ENABLE\_SCOPE\_FUSION\_PASSES), ge::AscendString("DecodeBboxV2ScopeFusionPass")}, | 1 | {ge::AscendString(ge::ir\_option::ENABLE\_SCOPE\_FUSION\_PASSES), ge::AscendString("DecodeBboxV2ScopeFusionPass")}, |
| 1 | {ge::AscendString(ge::ir\_option::ENABLE\_SCOPE\_FUSION\_PASSES), ge::AscendString("DecodeBboxV2ScopeFusionPass")}, |  |  |
| 训练或在线推理场景下，在TensorFlow框架内执行 | 通过TensorFlow框架运行配置参数enable\_scope\_fusion\_passes指定需要生效的融合规则，多个用“,”分隔： 1 2 3 4 5 6 7 8 9 10 11 12 13 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(xx\_name\_scope) \# xx\_name\_scope是融合算子名字的示例。 | 1 2 3 4 5 6 7 8 9 10 11 12 13 | 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(xx\_name\_scope) \# xx\_name\_scope是融合算子名字的示例。 |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | 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(xx\_name\_scope) \# xx\_name\_scope是融合算子名字的示例。 |  |  |
