!1013 Bugfix: fix the error in singleop scene

From: @lichun30
Reviewed-by: @xchu42,@ji_chen
Signed-off-by: @ji_chen
pull/1013/MERGE
mindspore-ci-bot 4 years ago committed by Gitee
commit d38e9d94c5

@ -670,7 +670,7 @@ Status GeGenerator::BuildSingleOp(OpDescPtr &op_desc, const vector<GeTensor> &in
const string &model_file_name, OpEngineType engine_type, ModelBufferData &model_buff, const string &model_file_name, OpEngineType engine_type, ModelBufferData &model_buff,
bool is_offline) { bool is_offline) {
if (!is_offline) { if (!is_offline) {
(void)AttrUtils::SetBool(op_desc, ATTR_DYNAMIC_SHAPE_SINGLE_AICPU, true); (void)AttrUtils::SetBool(op_desc, ATTR_SINGLE_OP_SCENE, true);
} }
if (CheckForSingleOp(op_desc, inputs, outputs) != SUCCESS) { if (CheckForSingleOp(op_desc, inputs, outputs) != SUCCESS) {

@ -51,6 +51,13 @@ using ClusterPtr = std::shared_ptr<Cluster>;
static bool IsInExperimentalMode(const ComputeGraphPtr &root_graph) { static bool IsInExperimentalMode(const ComputeGraphPtr &root_graph) {
for (const auto &node : root_graph->GetAllNodes()) { for (const auto &node : root_graph->GetAllNodes()) {
GE_CHECK_NOTNULL(node->GetOpDesc()); GE_CHECK_NOTNULL(node->GetOpDesc());
// not do partition in single op scene.
bool is_singleop = false;
(void)AttrUtils::GetBool(node->GetOpDesc(), ATTR_SINGLE_OP_SCENE, is_singleop);
if (is_singleop) {
return false;
}
for (const auto &input_desc : node->GetOpDesc()->GetAllInputsDesc()) { for (const auto &input_desc : node->GetOpDesc()->GetAllInputsDesc()) {
auto type = input_desc.GetDataType(); auto type = input_desc.GetDataType();
if (type == DT_STRING || type == DT_RESOURCE || type == DT_STRING_REF) { if (type == DT_STRING || type == DT_RESOURCE || type == DT_STRING_REF) {

@ -58,9 +58,9 @@ Status DynamicSingleOpResetShapePass::Run(ComputeGraphPtr graph) {
continue; continue;
} }
// pass node without attr: ATTR_DYNAMIC_SHAPE_SINGLE_AICPU // pass node without attr: ATTR_SINGLE_OP_SCENE
bool single_aicpu_unknown = false; bool single_aicpu_unknown = false;
if (!AttrUtils::GetBool(node->GetOpDesc(), ATTR_DYNAMIC_SHAPE_SINGLE_AICPU, single_aicpu_unknown) || if (!AttrUtils::GetBool(node->GetOpDesc(), ATTR_SINGLE_OP_SCENE, single_aicpu_unknown) ||
!single_aicpu_unknown) { !single_aicpu_unknown) {
continue; continue;
} }

File diff suppressed because it is too large Load Diff

@ -1,104 +0,0 @@
/**
* 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.
*/
#ifndef GE_GRAPH_PASSES_VARIABLE_OP_PASS_H_
#define GE_GRAPH_PASSES_VARIABLE_OP_PASS_H_
#include <map>
#include <set>
#include <stack>
#include "graph/common/transop_util.h"
#include "common/formats/utils/formats_trans_utils.h"
#include "graph/utils/node_utils.h"
#include "graph/graph.h"
#include "graph/manager/graph_var_manager.h"
#include "graph/manager/util/variable_accelerate_ctrl.h"
#include "inc/graph_pass.h"
namespace ge {
namespace variable_op {
struct NodeDesc {
ge::GeTensorDesc input;
ge::GeTensorDesc output;
bool is_update = false;
};
} // namespace variable_op
class VariableOpPass : public GraphPass {
public:
explicit VariableOpPass(VarAccelerateCtrl *ctrl) : var_accelerate_ctrl_(ctrl) {}
~VariableOpPass() override = default;
Status Run(ge::ComputeGraphPtr graph) override;
private:
Status UpdateTransRoad(VarTransRoad &fusion_road, vector<string> &trans_road_order,
map<string, pair<string, bool>> &trans_type_to_changed_desc,
map<string, vector<NodePtr>> &trans_type_to_trans_ops);
Status DealFusion(const ge::NodePtr &var_node, VarTransRoad &fusion_road,
map<string, pair<string, bool>> trans_type_to_changed_desc,
map<string, vector<NodePtr>> trans_type_to_trans_ops,
vector<pair<NodePtr, NodePtr>> &delete_trans_nodes);
Status RenewTransOpDesc(ge::NodePtr &node, bool is_reverse);
Status RenewTransRoadDesc(const NodePtr &var, VarTransRoad &fusion_road);
Status CheckIfCouldBeOptimized(const NodePtr &var, vector<string> &trans_road_order,
map<string, pair<string, bool>> &trans_type_to_changed_desc,
map<string, vector<NodePtr>> &trans_type_to_trans_ops, bool &flag);
Status FusionIfNeed(const NodePtr &var, VarTransRoad &fusion_road);
Status GetSameTransOP(const NodePtr &var, vector<string> &trans_road_order,
map<string, pair<string, bool>> &trans_type_to_changed_desc,
map<string, vector<NodePtr>> &trans_type_to_trans_ops, bool &is_match);
Status GetFisrtPathTransInfo(const NodePtr &var, vector<string> &trans_road_order,
map<string, pair<string, bool>> &trans_type_to_changed_desc,
map<string, vector<NodePtr>> &trans_type_to_trans_ops);
void VariableDFS(const NodePtr &node, map<string, pair<string, bool>> &trans_type_to_changed_desc,
map<string, vector<NodePtr>> &trans_type_to_trans_ops, bool &is_match);
Status UpdateTransInfo(vector<NodePtr> &cur_path, bool& is_match,
map<string, pair<string, bool>> &trans_type_to_changed_desc,
map<string, vector<NodePtr>> &trans_type_to_trans_ops);
Status GetAndCheckTransOpOfVarRef(const ge::NodePtr &var_node, bool &pass_check,
map<string, pair<string, bool>> &trans_type_to_changed_desc,
vector<pair<NodePtr, NodePtr>> &delete_var_ref_trans_nodes);
Status CheckTransOpOfVarAndVarRefSymmetry(NodePtr &var_ref_trans_op, const string &desc_diff, bool &is_symmetry);
Status UpdateVarAndRefOutputFormatInfo(const GeTensorDesc &final_output, const ge::NodePtr &node);
Status GenerateVariableVariableRefMap(const ComputeGraphPtr &compute_graph);
void CopyVariableFormatDataTypeAndShape(const GeTensorDesc &src_tensor_desc, GeTensorDesc &dst_tensor_desc);
Status UpdateIOFormatInfo(const GeTensorDesc &final_output, std::set<NodePtr> &nodes);
Status RenewVarDesc(ge::ComputeGraphPtr &graph);
Status RenewVarDesc(uint64_t session_id, const NodePtr &node, const VarTransRoad &fusion_road);
map<NodePtr, std::set<NodePtr>> var_and_var_ref_map_;
VarAccelerateCtrl *var_accelerate_ctrl_;
};
} // namespace ge
#endif // GE_GRAPH_PASSES_VARIABLE_OP_PASS_H_

@ -1925,7 +1925,7 @@ void GraphPrepare::TypeConversionOfConstant() {
for (ge::NodePtr &n : compute_graph_->GetAllNodes()) { for (ge::NodePtr &n : compute_graph_->GetAllNodes()) {
// This can ensure that n is not a null pointer // This can ensure that n is not a null pointer
// No Conversion when called by aclOpCompile // No Conversion when called by aclOpCompile
(void)AttrUtils::GetBool(n->GetOpDesc(), ATTR_DYNAMIC_SHAPE_SINGLE_AICPU, is_acl_compile); (void)AttrUtils::GetBool(n->GetOpDesc(), ATTR_SINGLE_OP_SCENE, is_acl_compile);
if (is_acl_compile) { if (is_acl_compile) {
return; return;
} }

@ -1 +1 @@
Subproject commit 8397bb015c9b8641451936fab1e1bc64c4536def Subproject commit 8ab60be2870b80b1ec952bb21c7f05ae2a624984

@ -1 +1 @@
Subproject commit 018f2116db7ce522d4a8ac3016351b5b6484cb66 Subproject commit 98f17f4a2a37f283797858eabefa9dba1d06a66b
Loading…
Cancel
Save