From 24a1d991407e4457f0256ebe2850d7fdf7dff944 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EC=9E=A5=EC=A7=80=EC=84=AD/On-Device=20Lab=28SR=29/Enginee?= =?utf8?q?r/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Mon, 25 Nov 2019 20:39:48 +0900 Subject: [PATCH] Remove registering tensor info from ShapeFixer of srcn (#9191) This commit removes registering tensor info from ShapeFixer of srcn. Signed-off-by: jiseob.jang --- runtime/neurun/backend/srcn/ShapeFixer.cc | 114 +-------------------- runtime/neurun/backend/srcn/ShapeFixer.h | 8 -- runtime/neurun/backend/srcn/TensorBuilder.cc | 7 -- runtime/neurun/core/include/backend/IShapeFixer.h | 5 - .../neurun/core/src/compiler/ExecutorFactory.cc | 2 - 5 files changed, 4 insertions(+), 132 deletions(-) diff --git a/runtime/neurun/backend/srcn/ShapeFixer.cc b/runtime/neurun/backend/srcn/ShapeFixer.cc index 3086257..5dbd9fd 100644 --- a/runtime/neurun/backend/srcn/ShapeFixer.cc +++ b/runtime/neurun/backend/srcn/ShapeFixer.cc @@ -16,7 +16,6 @@ #include "ShapeFixer.h" -#include "Convert.h" #include namespace neurun @@ -28,123 +27,18 @@ namespace srcn ShapeFixer::ShapeFixer(const neurun::model::Operands &operand_ctx, const std::shared_ptr &tensor_builder) - : _ctx(operand_ctx), _tensor_builder(tensor_builder), _current_subg_layout(model::Layout::NHWC), - _lower_info_map(nullptr) + : _ctx(operand_ctx), _tensor_builder(tensor_builder) { assert(tensor_builder); } -void ShapeFixer::visit(const model::Subgraph &subgraph) -{ - assert(_lower_info_map != nullptr); - _current_subg_layout = subgraph.getLayout(); - for (const auto &e : subgraph.operations()) - { - const auto &node = *(e.node); - node.accept(*this); - - // NOTE - const auto frontend_layout = _current_subg_layout; - for (const auto &input : node.getInputs()) - { - const auto &obj = _ctx.at(input); - const auto lower_info = _lower_info_map->operand.at(input).get(); - const auto backend_layout = lower_info->def_factors().getOnlyElement().layout(); - model::OperandInfo backend_info{asTensorShape(obj.shape(), frontend_layout, backend_layout), - obj.info().typeInfo()}; - _tensor_builder->registerTensorInfo(input, backend_info, frontend_layout, backend_layout, - obj.isConstant()); - } +void ShapeFixer::visit(const model::operation::Conv2D &) { /* DO NOTHING */} - for (const auto &output : node.getOutputs()) - { - const auto &obj = _ctx.at(output); - const auto lower_info = _lower_info_map->operand.at(output).get(); - const auto backend_layout = lower_info->def_factors().getOnlyElement().layout(); - model::OperandInfo backend_info{asTensorShape(obj.shape(), frontend_layout, backend_layout), - obj.info().typeInfo()}; - _tensor_builder->registerTensorInfo(output, backend_info, frontend_layout, backend_layout, - obj.isConstant()); - } - } -} - -void ShapeFixer::visit(const model::operation::Conv2D &node) -{ - // Special case - const auto &kernel_index = node.getInputs().at(model::operation::Conv2D::KERNEL); - const auto &kernel_obj = _ctx.at(kernel_index); - - const auto frontend_layout = _current_subg_layout; - assert(frontend_layout == model::Layout::NCHW || frontend_layout == model::Layout::NHWC); - const auto frontend_filter_layout = frontend_layout == model::Layout::NHWC - ? kernel::FilterLayout::OHWI - : kernel::FilterLayout::OIHW; - const auto lower_info = _lower_info_map->operand.at(kernel_index).get(); - const auto backend_layout = lower_info->def_factors().getOnlyElement().layout(); - assert(backend_layout == model::Layout::NCHW || backend_layout == model::Layout::NHWC); - const auto backend_filter_layout = backend_layout == model::Layout::NHWC - ? kernel::FilterLayout::HWIO - : kernel::FilterLayout::OIHW; - - model::OperandInfo backend_info{ - asKernelShape(kernel_obj.shape(), frontend_filter_layout, backend_filter_layout), - kernel_obj.info().typeInfo()}; - _tensor_builder->registerTensorInfo(kernel_index, backend_info, frontend_layout, backend_layout, - kernel_obj.isConstant()); -} - -void ShapeFixer::visit(const model::operation::DepthwiseConv2D &node) -{ - // Special case - const auto &kernel_index = node.getInputs().at(model::operation::DepthwiseConv2D::KERNEL); - const auto &kernel_obj = _ctx.at(kernel_index); - - const auto frontend_layout = _current_subg_layout; - assert(frontend_layout == model::Layout::NCHW || frontend_layout == model::Layout::NHWC); - const auto frontend_filter_layout = frontend_layout == model::Layout::NHWC - ? kernel::FilterLayout::OHWI - : kernel::FilterLayout::OIHW; - const auto lower_info = _lower_info_map->operand.at(kernel_index).get(); - const auto backend_layout = lower_info->def_factors().getOnlyElement().layout(); - assert(backend_layout == model::Layout::NCHW || backend_layout == model::Layout::NHWC); - const auto backend_filter_layout = backend_layout == model::Layout::NHWC - ? kernel::FilterLayout::HWIO - : kernel::FilterLayout::OIHW; - - model::OperandInfo backend_info{ - asKernelShape(kernel_obj.shape(), frontend_filter_layout, backend_filter_layout), - kernel_obj.info().typeInfo()}; - _tensor_builder->registerTensorInfo(kernel_index, backend_info, frontend_layout, backend_layout, - kernel_obj.isConstant()); -} +void ShapeFixer::visit(const model::operation::DepthwiseConv2D &) { /* DO NOTHING */} void ShapeFixer::visit(const model::operation::InstanceNorm &) { /* DO NOTHING */} -void ShapeFixer::visit(const model::operation::TransposeConv &node) -{ - // Special case - const auto &kernel_index = node.getInputs().at(model::operation::TransposeConv::KERNEL); - const auto &kernel_obj = _ctx.at(kernel_index); - - const auto frontend_layout = _current_subg_layout; - assert(frontend_layout == model::Layout::NCHW || frontend_layout == model::Layout::NHWC); - const auto frontend_filter_layout = frontend_layout == model::Layout::NHWC - ? kernel::FilterLayout::OHWI - : kernel::FilterLayout::OIHW; - const auto lower_info = _lower_info_map->operand.at(kernel_index).get(); - const auto backend_layout = lower_info->def_factors().getOnlyElement().layout(); - assert(backend_layout == model::Layout::NCHW || backend_layout == model::Layout::NHWC); - const auto backend_filter_layout = backend_layout == model::Layout::NHWC - ? kernel::FilterLayout::HWOI - : kernel::FilterLayout::IOHW; - - model::OperandInfo backend_info{ - asKernelShape(kernel_obj.shape(), frontend_filter_layout, backend_filter_layout), - kernel_obj.info().typeInfo()}; - _tensor_builder->registerTensorInfo(kernel_index, backend_info, frontend_layout, backend_layout, - kernel_obj.isConstant()); -} +void ShapeFixer::visit(const model::operation::TransposeConv &) { /* DO NOTHING */} void ShapeFixer::visit(const model::operation::Add &) { /* DO NOTHING */} diff --git a/runtime/neurun/backend/srcn/ShapeFixer.h b/runtime/neurun/backend/srcn/ShapeFixer.h index 7292b40..5403fbb 100644 --- a/runtime/neurun/backend/srcn/ShapeFixer.h +++ b/runtime/neurun/backend/srcn/ShapeFixer.h @@ -38,12 +38,6 @@ public: std::shared_ptr tensor_builder() override { return _tensor_builder; } - void setLowerInfoMap(const graph::LowerInfoMap *lower_info_map) override - { - _lower_info_map = lower_info_map; - } - - void visit(const model::Subgraph &) override; void visit(const model::operation::Conv2D &) override; void visit(const model::operation::DepthwiseConv2D &) override; void visit(const model::operation::InstanceNorm &) override; @@ -53,8 +47,6 @@ public: private: const neurun::model::Operands &_ctx; std::shared_ptr _tensor_builder; - model::Layout _current_subg_layout; - const graph::LowerInfoMap *_lower_info_map; }; } // namespace srcn diff --git a/runtime/neurun/backend/srcn/TensorBuilder.cc b/runtime/neurun/backend/srcn/TensorBuilder.cc index a3c1150..2381cfa 100644 --- a/runtime/neurun/backend/srcn/TensorBuilder.cc +++ b/runtime/neurun/backend/srcn/TensorBuilder.cc @@ -36,13 +36,6 @@ void TensorBuilder::registerTensorInfo(const model::OperandIndex &ind, const model::OperandInfo &tensor_info, model::Layout, model::Layout backend_layout, bool as_const) { - // NOTE This backend's several weights unusually are permutated. So ShapeFixer call this function - // for all tensor with those weights tensors to register unuseally permuated tensor info. After - // that, even if another place calls this function, registered tensor info is not updated. - if (_tensor_info_map.find(ind) != _tensor_info_map.end()) - { - return; - } _tensor_info_map.emplace(ind, tensor_info); _tensor_layout_map.emplace(ind, backend_layout); diff --git a/runtime/neurun/core/include/backend/IShapeFixer.h b/runtime/neurun/core/include/backend/IShapeFixer.h index 579c639..a4f708a 100644 --- a/runtime/neurun/core/include/backend/IShapeFixer.h +++ b/runtime/neurun/core/include/backend/IShapeFixer.h @@ -38,11 +38,6 @@ public: virtual std::shared_ptr tensor_builder() = 0; - virtual void setLowerInfoMap(const graph::LowerInfoMap *) - { - // DO NOTHING - } - protected: #define OP(InternalName) \ virtual void visit(const model::operation::InternalName &) override \ diff --git a/runtime/neurun/core/src/compiler/ExecutorFactory.cc b/runtime/neurun/core/src/compiler/ExecutorFactory.cc index 8a4e78f..119201f 100644 --- a/runtime/neurun/core/src/compiler/ExecutorFactory.cc +++ b/runtime/neurun/core/src/compiler/ExecutorFactory.cc @@ -101,7 +101,6 @@ exec::IExecutor *ExecutorFactory::createLinearExecutor(graph::Graph &graph) linear->iterate([&](const compiler::Linear::Element &element) { auto backend = element.lower_info->backend(); auto shape_fixer = graph.backend_resolver()->getBackendContext(backend)->shape_fixer; - shape_fixer->setLowerInfoMap(graph.getLowerInfo()); shape_fixer->fix(*element.subgraph); }); @@ -213,7 +212,6 @@ exec::IExecutor *ExecutorFactory::createDataflowExecutor(graph::Graph &graph, bo [&](const model::SubgraphIndex &subg_index, const model::Subgraph &subg) { auto backend = graph.getLowerInfo(subg_index)->backend(); auto shape_fixer = graph.backend_resolver()->getBackendContext(backend)->shape_fixer; - shape_fixer->setLowerInfoMap(graph.getLowerInfo()); shape_fixer->fix(subg); const auto tensor_register = graph.backend_resolver()->getBackendContext(backend)->tensor_register; -- 2.7.4