From b600991cc32ce713fa8601e8449d0b96a269a6f3 Mon Sep 17 00:00:00 2001 From: buxue Date: Fri, 17 Apr 2020 16:16:10 +0800 Subject: [PATCH] dock DepthwiseConv2dBackprop DepthwiseConv2dBackpropFilter DepthwiseConv2dBackpropInput --- mindspore/ccsrc/kernel/tbe/tbe_adapter.cc | 3 ++ .../pass/const_input_to_attr_registry.cc | 2 + mindspore/ops/_op_impl/tbe/__init__.py | 3 ++ .../ops/_op_impl/tbe/depthwise_conv2d.py | 44 +++++++++++++++++++ .../tbe/depthwise_conv2d_backprop_filter.py | 41 +++++++++++++++++ .../tbe/depthwise_conv2d_backprop_input.py | 41 +++++++++++++++++ mindspore/ops/operations/nn_ops.py | 1 + 7 files changed, 135 insertions(+) create mode 100644 mindspore/ops/_op_impl/tbe/depthwise_conv2d.py create mode 100644 mindspore/ops/_op_impl/tbe/depthwise_conv2d_backprop_filter.py create mode 100644 mindspore/ops/_op_impl/tbe/depthwise_conv2d_backprop_input.py diff --git a/mindspore/ccsrc/kernel/tbe/tbe_adapter.cc b/mindspore/ccsrc/kernel/tbe/tbe_adapter.cc index e11ff7d6e..9e4553e05 100644 --- a/mindspore/ccsrc/kernel/tbe/tbe_adapter.cc +++ b/mindspore/ccsrc/kernel/tbe/tbe_adapter.cc @@ -39,6 +39,9 @@ static std::map tbe_func_adapter_map = { {"reduce_min", "reduce_min_d"}, {"conv2d_backprop_filter", "conv2d_backprop_filter_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"}, {"scatter_nd", "scatter_nd_d"}, {"tile", "tile_d"}, diff --git a/mindspore/ccsrc/pre_activate/pass/const_input_to_attr_registry.cc b/mindspore/ccsrc/pre_activate/pass/const_input_to_attr_registry.cc index 88edfd301..c2f96e54c 100644 --- a/mindspore/ccsrc/pre_activate/pass/const_input_to_attr_registry.cc +++ b/mindspore/ccsrc/pre_activate/pass/const_input_to_attr_registry.cc @@ -27,6 +27,8 @@ ConstInputToAttrInfoRegistry::ConstInputToAttrInfoRegistry() { Register(prim::kPrimCast->name(), {1}); Register(prim::kPrimConv2DBackpropInput->name(), {2}); Register(prim::kPrimConv2DBackpropFilter->name(), {2}); + Register(prim::kPrimDepthwiseConv2dNativeBackpropFilter->name(), {1}); + Register(prim::kPrimDepthwiseConv2dNativeBackpropInput->name(), {0}); Register(prim::kPrimReshape->name(), {1}); Register(prim::kPrimReduceMax->name(), {1}); Register(prim::kPrimReduceMin->name(), {1}); diff --git a/mindspore/ops/_op_impl/tbe/__init__.py b/mindspore/ops/_op_impl/tbe/__init__.py index 9ec544616..340cf9efe 100644 --- a/mindspore/ops/_op_impl/tbe/__init__.py +++ b/mindspore/ops/_op_impl/tbe/__init__.py @@ -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_n import _fused_mul_add_n_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 diff --git a/mindspore/ops/_op_impl/tbe/depthwise_conv2d.py b/mindspore/ops/_op_impl/tbe/depthwise_conv2d.py new file mode 100644 index 000000000..fdafcd3fa --- /dev/null +++ b/mindspore/ops/_op_impl/tbe/depthwise_conv2d.py @@ -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 diff --git a/mindspore/ops/_op_impl/tbe/depthwise_conv2d_backprop_filter.py b/mindspore/ops/_op_impl/tbe/depthwise_conv2d_backprop_filter.py new file mode 100644 index 000000000..c19a31100 --- /dev/null +++ b/mindspore/ops/_op_impl/tbe/depthwise_conv2d_backprop_filter.py @@ -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 diff --git a/mindspore/ops/_op_impl/tbe/depthwise_conv2d_backprop_input.py b/mindspore/ops/_op_impl/tbe/depthwise_conv2d_backprop_input.py new file mode 100644 index 000000000..9e671f18e --- /dev/null +++ b/mindspore/ops/_op_impl/tbe/depthwise_conv2d_backprop_input.py @@ -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 diff --git a/mindspore/ops/operations/nn_ops.py b/mindspore/ops/operations/nn_ops.py index a4efd5a47..9827975fd 100644 --- a/mindspore/ops/operations/nn_ops.py +++ b/mindspore/ops/operations/nn_ops.py @@ -696,6 +696,7 @@ class DepthwiseConv2dNative(PrimitiveWithInfer): dilation=1, group=1): """init DepthwiseConv2dNative""" + self.init_prim_io_names(inputs=['x', 'w'], outputs=['output']) validator.check_pad_value_by_mode(self.__class__.__name__, pad_mode, pad) self.kernel_size = validator.check_type('kernel_size', kernel_size, (int, tuple)) if isinstance(kernel_size, int): -- GitLab