---
title: 网络调测时ReduceSum算子性能差如何处理-昇腾社区
description: 网络调测时，网络整体性能较慢。通过性能分析工具获取网络的Profiling数据（工具的使用方法可参见对应版本的《性能分析工具使用指南》，并进行算子的性能数据分析，发现ReduceSum算子的性能很差。 查看Profiling性能数据中ReduceSum算子的详细信息，如下图所示：  其中，ReduceSum算子的输入数据类型（input_data_type）为“DT_FLOAT16”，block_
keywords: （必填项）（关键字之间请用英文分号隔开）
url: https://www.hiascend.com/document/caselibrary/detail/topic_0000001261263136
section: (其他)
---

# 网络调测时ReduceSum算子性能差如何处理-昇腾社区

URL: https://www.hiascend.com/document/caselibrary/detail/topic_0000001261263136
描述: 网络调测时，网络整体性能较慢。通过性能分析工具获取网络的Profiling数据（工具的使用方法可参见对应版本的《性能分析工具使用指南》，并进行算子的性能数据分析，发现ReduceSum算子的性能很差。 查看Profiling性能数据中ReduceSum算子的详细信息，如下图所示：  其中，ReduceSum算子的输入数据类型（input_data_type）为“DT_FLOAT16”，block_
关键词: （必填项）（关键字之间请用英文分号隔开）

昇腾文档 [了解详情](https://www.hiascend.com/document)

故障案例 [了解详情](https://www.hiascend.com/document/caselibrary)

网络调测时ReduceSum算子性能差如何处理

网络调测时ReduceSum算子性能差如何处理

2023/05/06

880

问题信息

| 问题来源 | 产品大类 | 关键字 |
| --- | --- | ---|
| 官方 | 算子开发 | （必填项）（关键字之间请用英文分号隔开） |

#### 问题现象描述

网络调测时，网络整体性能较慢。通过性能分析工具获取网络的Profiling数据（工具的使用方法可参见对应版本的《性能分析工具使用指南 [了解详情](https://www.hiascend.com/document/detail/zh/canncommercial/63RC1/devtools/auxiliarydevtool/atlasprofiling_16_0003.html)》，并进行算子的性能数据分析，发现ReduceSum算子的性能很差。

查看Profiling性能数据中ReduceSum算子的详细信息，如下图所示：

其中，ReduceSum算子的输入数据类型（input_data_type）为“DT_FLOAT16”，block_dim字段的值为“1”，说明该算子未开启多核并行计算。

#### 原因分析

对于昇腾AI处理器的ReduceSum算子或者是用户自定义实现的调用了TBE DSL的”reduce_sum”接口的算子，若输入的数据类型为float16，由于硬件限制，某些场景下会无法开启多核计算。

#### 解决措施

仅在ReduceSum算子性能较差时，且符合现象描述 [了解详情](https://www.hiascend.com/#ZH-CN_TOPIC_0000001261263136__section3941254)时，可尝试使用以下解决方案进行性能提升。

以ReduceSum算子为例，输入数据是float16的情况可能有如下两种场景：

- 场景一：网络调测时未开启混合精度，ReduceSum算子的输入数据本身就是float16类型，此种情况下，若ReduceSum算子的性能较差，可尝试在ReduceSum算子前插入一个Cast算子，将算子的输入数据类型从float16转换为float32。

ReduceSum算子在输入类型为float32的场景下，会使能多核并发计算，从而达到提升该算子性能的效果。
- 场景二：网络调测时开启了混合精度，将ReduceSum算子的输入数据类型从float32转换成了float16，此种情况下，可将ReduceSum算子加入混合精度黑名单，这样网络调测时ReduceSum算子就不会被转换成float16类型，从而避免该算子性能的劣化。

将ReduceSum算子加入混合精度黑名单的方法如下：

1. 通过modify_mixlist指定需要修改的混合精度算子黑名单。

例如：

```
# Estimator模式修改方法
npu_config=NPURunConfig(
  ...
  precision_mode="allow_mix_precision",
  modify_mixlist="/home/test/ops_info.json"
  )

# sess.run模式修改方法
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["precision_mode"].s = tf.compat.as_bytes("allow_mix_precision")
custom_op.parameter_map["modify_mixlist"].s = tf.compat.as_bytes("/home/test/ops_info.json")
...
```
2. 在ops_info.json文件中进行算子黑名单的配置，配置示例如下：

```
{
    "black-list": {
        "to-add": ["ReduceSumD"]
    }
}
```

详细配置方法可参见对应版本《TensorFlow 1.15网络模型迁移和训练指南 [了解详情](https://www.hiascend.com/document/detail/zh/canncommercial/63RC1/modeldev/tfmigr1/tfmigr1_000002.html)》的“性能调优 &gt; 基本调优 &gt; 混合精度训练”章节。

本页内容

- 问题信息
- 问题现象描述
- 原因分析
- 解决措施
