diff --git a/mindspore/ops/_op_impl/tbe/selu.py b/mindspore/ops/_op_impl/tbe/selu.py index 64d33b3c5aa..b24fd82ed78 100644 --- a/mindspore/ops/_op_impl/tbe/selu.py +++ b/mindspore/ops/_op_impl/tbe/selu.py @@ -16,7 +16,7 @@ """Selu op""" from mindspore.ops.op_info_register import op_info_register, TBERegOp, DataType -selu_op_info = TBERegOp("Selu") \ +selu_op_info = TBERegOp("SeLU") \ .fusion_type("ELEMWISE") \ .async_flag(False) \ .binfile_name("selu.so") \ diff --git a/scripts/map_dump_file_to_code/README_CN.md b/scripts/map_dump_file_to_code/README_CN.md index bf9b830462d..3881c54d422 100644 --- a/scripts/map_dump_file_to_code/README_CN.md +++ b/scripts/map_dump_file_to_code/README_CN.md @@ -9,20 +9,21 @@ ## 辅助工具使用 1. 使用脚本的3步操作: - ① 用户在训练脚本里设置context.set_context(mode=context.GRAPH_MODE, save_graphs=True),进行图文件的保存。 - ② 用户开启dump数据功能,参考 - ③ 获取dump数据文件的op_num,然后通过辅助脚本进行解析。如数据文件:Default--network-TrainOneStepCell--network-WithLossCell--_backbone- -     ResNet--layer2-SequentialCell--0-ResidualBlock--conv2-Conv2d--Cast-op954_input_0_shape_128_128_3_3_kNumberTypeFloat32_DefaultFormat.bin. -     可观察到Cast-op954,说明该算子的op_num为op954。 - 脚本名: **map_file_to_code.py**;   执行方式: + - 用户在训练脚本里设置context.set_context(mode=context.GRAPH_MODE, save_graphs=True),进行图文件的保存。 + - 用户开启dump数据功能,参考 + - 获取dump数据文件的op_num,然后通过辅助脚本进行解析。如数据文件:`Default--network-TrainOneStepCell--network-WithLossCell--_backbone- + ResNet--layer2-SequentialCell--0-ResidualBlock--conv2-Conv2d--Cast-op954_input_0_shape_128_128_3_3_kNumberTypeFloat32_DefaultFormat.bin`. + 可观察到Cast-op954,说明该算子的op_num为op954, 如下图所示。 + ![image](./images/op_image.png) + 脚本名: **[map_file_to_code.py](https://gitee.com/mindspore/mindspore/blob/master/scripts/map_dump_file_to_code/map_file_to_code.py)**;   执行方式: - ```ruby - python3 map_file_to_code.py - --graph_path(-p) [the graph path, default is the current path](option) - --dump_op(-o) [Dump operator id, case insensitive, such as 'op954'.](required) - For example: - python3 map_file_to_code.py -p graph_path -o op954 - ``` + ```ruby + python3 map_file_to_code.py + --graph_path(-p) [the graph path, default is the current path](option) + --dump_op(-o) [Dump operator id, case insensitive, such as 'op954'.](required) + For example: + python3 map_file_to_code.py -p graph_path -o op954 + ``` 2. 解析效果 解析文件时通常有2种情况: @@ -55,10 +56,12 @@ ``` 3. 手动代码查找 - 这里还会存在些特殊情况,需要用户进行自行查找。通过将dump的数据文件名中的'--'替换为'/'可获取到算子的full_name。input和output文件名shape后面的数据为对应算子的输入输出shape信息。然后利用算子的full_name和输入输出信息回到源码中进行对应代码的查找。 - 举个例子说明如何手动在代码中查找指定full_name和shape的算子,例如full_name为: Default/network/network/aspp/aspp_pooling/ResizeNearestNeighbor,输入的shape为[8, 256, 1, 1], dtype为float32。 - 可以观察到其scope为: Default/network/network/aspp/aspp_pooling,算子名为: ResizeNearestNeighbor。注意:scope中会存在Default、network自动填充,Default表示正向,network为网络名。 - 查看以下用户定义的代码,首先我们先分析scope: Default/network/network/aspp/aspp_pooling。由network/aspp可定位到算子的定义与调用处分别为26行与31行,继续由network/aspp/aspp_pooling,可以定位到定义与调用处分别为4行与8行,然后通过算子名ResizeNearestNeighbor可以定位至定义与调用处分别为16行与19行。最后若存在相同scope下存在相同的算子名时,需要通过输入的shape进行进一步判断。 + 这里还会存在些特殊情况,需要用户进行自行查找。通过将dump的数据文件名中的'--'替换为'/'可获取到算子的full_name, 如下图所示: + ![image](./images/replace_symbol.png) + input和output文件名shape后面的数据为对应算子的输入输出shape信息。然后利用算子的full_name和输入输出信息回到源码中进行对应代码的查找。 + 举个例子说明如何手动在代码中查找指定full_name和shape的算子,例如full_name为: `Default/network/network/aspp/aspp_pooling/ResizeNearestNeighbor`,输入的shape为[8, 256, 1, 1], dtype为float32。 + 可以观察到其scope为: `Default/network/network/aspp/aspp_pooling`,算子名为: `ResizeNearestNeighbor`。注意:scope中会存在Default、network自动填充,Default表示正向,network为网络名。 + 查看以下用户定义的代码,首先我们先分析scope: `Default/network/network/aspp/aspp_pooling`。由network/aspp可定位到算子的定义与调用处分别为26行与31行,继续由`network/aspp/aspp_pooling`,可以定位到定义与调用处分别为4行与8行,然后通过算子名`ResizeNearestNeighbor`可以定位至定义与调用处分别为16行与19行。最后若存在相同scope下存在相同的算子名时,需要通过输入的shape进行进一步判断。 ```ruby 1 class ASPP(nn.Cell): @@ -68,7 +71,7 @@ 5 self.drop = nn.Dropout(0.3) 6 7 def construct(self, x): - 8 x5 = self.aspp_pooling(x) + 8 x = self.aspp_pooling(x) 9 x = self.drop(x) 10 return x 11 @@ -79,7 +82,7 @@ 16 self.resizenearestneighbor = P.ResizeNearestNeighbor((size[2], size[3]), True) 17 def construct(self, x): 18 size = self.shape(x) - 19 out = self.resizenearestneighbor(out) + 19 out = self.resizenearestneighbor(x) 20 return out 21 22 # 主结构 @@ -91,6 +94,6 @@ 28 29 def construct(self, x): 30 size = self.shape(x) - 31 out = self.aspp(out) + 31 out = self.aspp(x) 32 return out ``` diff --git a/scripts/map_dump_file_to_code/images/op_image.png b/scripts/map_dump_file_to_code/images/op_image.png new file mode 100644 index 00000000000..98744c65908 Binary files /dev/null and b/scripts/map_dump_file_to_code/images/op_image.png differ diff --git a/scripts/map_dump_file_to_code/images/replace_symbol.png b/scripts/map_dump_file_to_code/images/replace_symbol.png new file mode 100644 index 00000000000..4af3840918c Binary files /dev/null and b/scripts/map_dump_file_to_code/images/replace_symbol.png differ diff --git a/scripts/map_dump_file_to_code/map_file_to_code.py b/scripts/map_dump_file_to_code/map_file_to_code.py index 030e97b59ab..a81d682e542 100644 --- a/scripts/map_dump_file_to_code/map_file_to_code.py +++ b/scripts/map_dump_file_to_code/map_file_to_code.py @@ -149,8 +149,8 @@ def start_find(dump_op, map_code_file): if __name__ == "__main__": parser = argparse.ArgumentParser(description='Find the dump operator in the user code') - parser.add_argument('--graph_path', '-p', type=str.lower, default="", help='Save graph files path (option)') - parser.add_argument('--dump_op', '-o', type=str.lower, default="", required=True, + parser.add_argument('--graph_path', '-p', type=str, default="", help='Save graph files path (option)') + parser.add_argument('--dump_op', '-o', type=str, default="", required=True, help="Dump operator id, case insensitive, such as 'op3352'.") args_opt = parser.parse_args() start_find(args_opt.dump_op, args_opt.graph_path)