| @@ -39,6 +39,9 @@ static std::map<string, string> tbe_func_adapter_map = { | |||||
| {"reduce_min", "reduce_min_d"}, | {"reduce_min", "reduce_min_d"}, | ||||
| {"conv2d_backprop_filter", "conv2d_backprop_filter_d"}, | {"conv2d_backprop_filter", "conv2d_backprop_filter_d"}, | ||||
| {"conv2d_backprop_input", "conv2d_backprop_input_d"}, | {"conv2d_backprop_input", "conv2d_backprop_input_d"}, | ||||
| {"depthwise_conv2d_native", "depthwise_conv2d"}, | |||||
| {"depthwise_conv2d_native_backprop_filter", "depthwise_conv2d_backprop_filter_d"}, | |||||
| {"depthwise_conv2d_native_backprop_input", "depthwise_conv2d_backprop_input_d"}, | |||||
| {"top_kv2", "top_k"}, | {"top_kv2", "top_k"}, | ||||
| {"scatter_nd", "scatter_nd_d"}, | {"scatter_nd", "scatter_nd_d"}, | ||||
| {"tile", "tile_d"}, | {"tile", "tile_d"}, | ||||
| @@ -27,6 +27,8 @@ ConstInputToAttrInfoRegistry::ConstInputToAttrInfoRegistry() { | |||||
| Register(prim::kPrimCast->name(), {1}); | Register(prim::kPrimCast->name(), {1}); | ||||
| Register(prim::kPrimConv2DBackpropInput->name(), {2}); | Register(prim::kPrimConv2DBackpropInput->name(), {2}); | ||||
| Register(prim::kPrimConv2DBackpropFilter->name(), {2}); | Register(prim::kPrimConv2DBackpropFilter->name(), {2}); | ||||
| Register(prim::kPrimDepthwiseConv2dNativeBackpropFilter->name(), {1}); | |||||
| Register(prim::kPrimDepthwiseConv2dNativeBackpropInput->name(), {0}); | |||||
| Register(prim::kPrimReshape->name(), {1}); | Register(prim::kPrimReshape->name(), {1}); | ||||
| Register(prim::kPrimReduceMax->name(), {1}); | Register(prim::kPrimReduceMax->name(), {1}); | ||||
| Register(prim::kPrimReduceMin->name(), {1}); | Register(prim::kPrimReduceMin->name(), {1}); | ||||
| @@ -133,3 +133,6 @@ from .arg_min_with_value import _arg_min_with_value_tbe | |||||
| from .fused_mul_add import _fused_mul_add_tbe | from .fused_mul_add import _fused_mul_add_tbe | ||||
| from .fused_mul_add_n import _fused_mul_add_n_tbe | from .fused_mul_add_n import _fused_mul_add_n_tbe | ||||
| from .fused_mul_apply_momentum import _fused_mul_apply_momentum_tbe | from .fused_mul_apply_momentum import _fused_mul_apply_momentum_tbe | ||||
| from .depthwise_conv2d import _depthwise_conv2d_tbe | |||||
| from .depthwise_conv2d_backprop_filter import _depthwise_conv2d_backprop_filter_tbe | |||||
| from .depthwise_conv2d_backprop_input import _depthwise_conv2d_backprop_input_tbe | |||||
| @@ -0,0 +1,44 @@ | |||||
| # Copyright 2020 Huawei Technologies Co., Ltd | |||||
| # | |||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| # you may not use this file except in compliance with the License. | |||||
| # You may obtain a copy of the License at | |||||
| # | |||||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||||
| # | |||||
| # Unless required by applicable law or agreed to in writing, software | |||||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| # See the License for the specific language governing permissions and | |||||
| # limitations under the License. | |||||
| # ============================================================================ | |||||
| """DepthwiseConv2D op""" | |||||
| from mindspore.ops.op_info_register import op_info_register, TBERegOp, DataType | |||||
| depthwise_conv2d_op_info = TBERegOp("DepthwiseConv2dNative") \ | |||||
| .fusion_type("CONVLUTION") \ | |||||
| .async_flag(False) \ | |||||
| .binfile_name("depthwise_conv2d.so") \ | |||||
| .compute_cost(10) \ | |||||
| .kernel_name("depthwise_conv2d") \ | |||||
| .partial_flag(True) \ | |||||
| .attr("stride", "required", "listInt", "all") \ | |||||
| .attr("dilation", "required", "listInt", "all") \ | |||||
| .attr("pads", "required", "listInt", "all") \ | |||||
| .attr("data_format", "required", "str", "all") \ | |||||
| .attr("offset_a", "optional", "int", "all") \ | |||||
| .input(0, "x", False, "required", "all") \ | |||||
| .input(1, "filter", False, "required", "all") \ | |||||
| .input(2, "bias", False, "optional", "all") \ | |||||
| .input(3, "offset_w", False, "optional", "all") \ | |||||
| .output(0, "y", True, "required", "all") \ | |||||
| .dtype_format(DataType.F16_5HD, DataType.F16_C1HWNCoC0, DataType.F16_Default, DataType.F16_Default, | |||||
| DataType.F16_5HD) \ | |||||
| .get_op_info() | |||||
| @op_info_register(depthwise_conv2d_op_info) | |||||
| def _depthwise_conv2d_tbe(): | |||||
| """DepthwiseConv2D TBE register""" | |||||
| return | |||||
| @@ -0,0 +1,41 @@ | |||||
| # Copyright 2020 Huawei Technologies Co., Ltd | |||||
| # | |||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| # you may not use this file except in compliance with the License. | |||||
| # You may obtain a copy of the License at | |||||
| # | |||||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||||
| # | |||||
| # Unless required by applicable law or agreed to in writing, software | |||||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| # See the License for the specific language governing permissions and | |||||
| # limitations under the License. | |||||
| # ============================================================================ | |||||
| """DepthwiseConv2DBackpropFilter op""" | |||||
| from mindspore.ops.op_info_register import op_info_register, TBERegOp, DataType | |||||
| depthwise_conv2d_backprop_filter_op_info = TBERegOp("DepthwiseConv2dNativeBackpropFilter") \ | |||||
| .fusion_type("CONVLUTION") \ | |||||
| .async_flag(False) \ | |||||
| .binfile_name("depthwise_conv2d_backprop_filter_d.so") \ | |||||
| .compute_cost(10) \ | |||||
| .kernel_name("depthwise_conv2d_backprop_filter_d") \ | |||||
| .partial_flag(True) \ | |||||
| .attr("filter_size", "required", "listInt", "all") \ | |||||
| .attr("stride", "required", "listInt", "all") \ | |||||
| .attr("dilation", "required", "listInt", "all") \ | |||||
| .attr("pads", "required", "str", "all") \ | |||||
| .attr("data_format", "required", "str", "all") \ | |||||
| .input(0, "input", False, "required", "all") \ | |||||
| .input(1, "out_backprop", False, "required", "all") \ | |||||
| .output(0, "filter_grad", False, "required", "all") \ | |||||
| .dtype_format(DataType.F16_5HD, DataType.F16_5HD, DataType.F32_C1HWNCoC0) \ | |||||
| .get_op_info() | |||||
| @op_info_register(depthwise_conv2d_backprop_filter_op_info) | |||||
| def _depthwise_conv2d_backprop_filter_tbe(): | |||||
| """DepthwiseConv2DBackpropFilter TBE register""" | |||||
| return | |||||
| @@ -0,0 +1,41 @@ | |||||
| # Copyright 2020 Huawei Technologies Co., Ltd | |||||
| # | |||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| # you may not use this file except in compliance with the License. | |||||
| # You may obtain a copy of the License at | |||||
| # | |||||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||||
| # | |||||
| # Unless required by applicable law or agreed to in writing, software | |||||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| # See the License for the specific language governing permissions and | |||||
| # limitations under the License. | |||||
| # ============================================================================ | |||||
| """DepthwiseConv2DBackpropInput op""" | |||||
| from mindspore.ops.op_info_register import op_info_register, TBERegOp, DataType | |||||
| depthwise_conv2d_backprop_input_op_info = TBERegOp("DepthwiseConv2dNativeBackpropInput") \ | |||||
| .fusion_type("CONVLUTION") \ | |||||
| .async_flag(False) \ | |||||
| .binfile_name("depthwise_conv2d_backprop_input_d.so") \ | |||||
| .compute_cost(10) \ | |||||
| .kernel_name("depthwise_conv2d_backprop_input_d") \ | |||||
| .partial_flag(True) \ | |||||
| .attr("input_size", "required", "listInt", "all") \ | |||||
| .attr("stride", "required", "listInt", "all") \ | |||||
| .attr("dilation", "required", "listInt", "all") \ | |||||
| .attr("pads", "required", "str", "all") \ | |||||
| .attr("data_format", "required", "str", "all") \ | |||||
| .input(0, "filter", False, "required", "all") \ | |||||
| .input(1, "out_backprop", False, "required", "all") \ | |||||
| .output(0, "input_grad", False, "required", "all") \ | |||||
| .dtype_format(DataType.F16_C1HWNCoC0, DataType.F16_5HD, DataType.F16_5HD) \ | |||||
| .get_op_info() | |||||
| @op_info_register(depthwise_conv2d_backprop_input_op_info) | |||||
| def _depthwise_conv2d_backprop_input_tbe(): | |||||
| """DepthwiseConv2DBackpropInput TBE register""" | |||||
| return | |||||
| @@ -696,6 +696,7 @@ class DepthwiseConv2dNative(PrimitiveWithInfer): | |||||
| dilation=1, | dilation=1, | ||||
| group=1): | group=1): | ||||
| """init DepthwiseConv2dNative""" | """init DepthwiseConv2dNative""" | ||||
| self.init_prim_io_names(inputs=['x', 'w'], outputs=['output']) | |||||
| validator.check_pad_value_by_mode(self.__class__.__name__, pad_mode, pad) | validator.check_pad_value_by_mode(self.__class__.__name__, pad_mode, pad) | ||||
| self.kernel_size = validator.check_type('kernel_size', kernel_size, (int, tuple)) | self.kernel_size = validator.check_type('kernel_size', kernel_size, (int, tuple)) | ||||
| if isinstance(kernel_size, int): | if isinstance(kernel_size, int): | ||||