diff --git a/graphengine b/graphengine index 622af6c1c50..cb39cb2ba7c 160000 --- a/graphengine +++ b/graphengine @@ -1 +1 @@ -Subproject commit 622af6c1c50034bea5a08bd409c5a410782bfe53 +Subproject commit cb39cb2ba7c9afb27373ad9e81f563ff9ddb9fcc diff --git a/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_kernel_build.cc b/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_kernel_build.cc index cdb2fe10477..f7c02236c52 100644 --- a/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_kernel_build.cc +++ b/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_kernel_build.cc @@ -20,6 +20,8 @@ #include #include #include +#include +#include #include "runtime/device/kernel_runtime.h" #include "backend/kernel_compiler/aicpu/aicpu_kernel_mod.h" #include "backend/kernel_compiler/akg/akg_kernel_build.h" @@ -218,7 +220,7 @@ void SetNodeInputs(const std::shared_ptr &anf_node, mindspore::NodeDef mindspore::TensorShape_Dim *dim = tensorShape->add_dim(); dim->set_size((::google::protobuf::int64)item); } - node_inputs->set_tensor_type((mindspore::DataType)input_data_type); + node_inputs->set_tensor_type(input_data_type); node_inputs->set_mem_device("HBM"); } } @@ -245,7 +247,7 @@ void SetNodeOutputs(const std::shared_ptr &anf_node, mindspore::NodeDef } TypeId output_type = AnfAlgo::GetOutputDeviceDataType(anf_node, output_index); int32_t output_data_type = AicpuOpUtil::MsTypeToProtoType(output_type); - node_outputs->set_tensor_type((mindspore::DataType)output_data_type); + node_outputs->set_tensor_type(output_data_type); node_outputs->set_mem_device("HBM"); } } @@ -287,6 +289,109 @@ bool CreateNodeDefBytes(const std::shared_ptr &anf_node, return true; } +bool CreateExtInfo(const std::shared_ptr &anf_node, const std::shared_ptr &kernel_mod_ptr) { + if (!anf_node->isa()) { + return true; + } + + if (!AnfAlgo::IsDynamicShape(anf_node)) { + return true; + } + + MS_LOG(INFO) << "CreateExtInfo start, " << anf_node->fullname_with_scope(); + + int32_t unknown_shape_type = UnknowShapeOpType::DEPEND_COMPUTE; + uint64_t ext_info_head_len = kExtInfoHeadSize; + std::string ext_info; + size_t input_num = AnfAlgo::GetInputTensorNum(anf_node); + size_t output_num = AnfAlgo::GetOutputTensorNum(anf_node); + + // 1.addr:unknown shape type + uint64_t ext_info_len = ext_info.size(); + ext_info_len += ext_info_head_len + sizeof(int32_t); + + // 2.addr:input ShapeAndType + ext_info_len += ext_info_head_len + input_num * sizeof(ShapeAndType); + + // 3.addr:output ShapeAndType + ext_info_len += ext_info_head_len + output_num * sizeof(ShapeAndType); + + uint64_t ext_info_offset = ext_info.size(); + ext_info.resize(ext_info_len, 0); + char *ext_info_buf = ext_info.data(); + + // deal1: unknown shape type + ExtInfo *info = reinterpret_cast(ext_info_buf + ext_info_offset); + info->infoType = FWK_ADPT_EXT_SHAPE_TYPE; + info->infoLen = sizeof(int32_t); + ext_info_offset += ext_info_head_len; + int32_t *shape_type = reinterpret_cast(ext_info_buf + ext_info_offset); + *shape_type = unknown_shape_type; + ext_info_offset += info->infoLen; + + // deal2:input ShapeAndType + info = reinterpret_cast(ext_info_buf + ext_info_offset); + info->infoType = FWK_ADPT_EXT_INPUT_SHAPE; + info->infoLen = input_num * sizeof(ShapeAndType); + ext_info_offset += ext_info_head_len; + + ShapeAndType *inputs = reinterpret_cast(ext_info_buf + ext_info_offset); + for (size_t input_index = 0; input_index < input_num; input_index++) { + TypeId input_type = AnfAlgo::GetInputDeviceDataType(anf_node, input_index); + std::vector input_shape; + int32_t input_data_type; + if (input_type == kObjectTypeString) { + auto cnode = anf_node->cast(); + MS_EXCEPTION_IF_NULL(cnode); + auto input_node = cnode->inputs()[input_index + 1]; + auto value_ptr = GetValueNode(input_node); + auto value = GetValue(value_ptr); + input_shape.push_back(1); + input_shape.push_back(value.size()); + input_data_type = AicpuOpUtil::MsTypeToProtoType(kTypeUnknown); + } else { + input_shape = AnfAlgo::GetInputDeviceShape(anf_node, input_index); + input_data_type = AicpuOpUtil::MsTypeToProtoType(input_type); + } + inputs[input_index].type = input_data_type; + + size_t input_shape_index = 0; + for (; input_shape_index < input_shape.size(); input_shape_index++) { + inputs[input_index].dims[input_shape_index] = SizeToLong(input_shape[input_shape_index]); + } + if (input_shape.size() < kMaxShapeDims) { + inputs[input_index].dims[input_shape_index] = LLONG_MIN; + } + } + ext_info_offset += info->infoLen; + + // deal3:output ShapeAndType + info = reinterpret_cast(ext_info_buf + ext_info_offset); + info->infoType = FWK_ADPT_EXT_OUTPUT_SHAPE; + info->infoLen = output_num * sizeof(ShapeAndType); + ext_info_offset += ext_info_head_len; + + ShapeAndType *outputs = reinterpret_cast(ext_info_buf + ext_info_offset); + for (size_t output_index = 0; output_index < output_num; output_index++) { + std::vector output_shape = AnfAlgo::GetOutputDeviceShape(anf_node, output_index); + TypeId output_type = AnfAlgo::GetOutputDeviceDataType(anf_node, output_index); + int32_t output_data_type = AicpuOpUtil::MsTypeToProtoType(output_type); + outputs[output_index].type = output_data_type; + + size_t output_shape_index = 0; + for (; output_shape_index < output_shape.size(); output_shape_index++) { + outputs[output_index].dims[output_shape_index] = SizeToLong(output_shape[output_shape_index]); + } + if (output_shape_index < kMaxShapeDims) { + outputs[output_index].dims[output_shape_index] = LLONG_MIN; + } + } + + // set ext info + kernel_mod_ptr->SetExtInfo(ext_info); + return true; +} + KernelModPtr AicpuOpBuild(const std::shared_ptr &anf_node) { MS_EXCEPTION_IF_NULL(anf_node); std::string op_name = AnfAlgo::GetCNodeName(anf_node); @@ -300,6 +405,11 @@ KernelModPtr AicpuOpBuild(const std::shared_ptr &anf_node) { if (!CreateNodeDefBytes(anf_node, kernel_mod_ptr)) { MS_LOG(EXCEPTION) << "Create nodeDefBytes faild!"; } + + if (!CreateExtInfo(anf_node, kernel_mod_ptr)) { + MS_LOG(EXCEPTION) << "Create nodeDefBytes faild!"; + } + if (!SetIOSize(anf_node, kernel_mod_ptr)) { MS_LOG(EXCEPTION) << "Set input output size list failed."; } diff --git a/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_kernel_mod.cc b/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_kernel_mod.cc index d00fab381ec..c7d7a3f1a2a 100644 --- a/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_kernel_mod.cc +++ b/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_kernel_mod.cc @@ -43,6 +43,7 @@ AicpuOpKernelMod::~AicpuOpKernelMod() { input_size_list_.clear(); output_size_list_.clear(); workspace_size_list_.clear(); + ext_info_.clear(); } void AicpuOpKernelMod::SetInputSizeList(const std::vector &size_list) { input_size_list_ = size_list; } @@ -54,6 +55,7 @@ const std::vector &AicpuOpKernelMod::GetWorkspaceSizeList() const { retu void AicpuOpKernelMod::SetInputList(const std::vector &inputList) { inputList_ = inputList; } void AicpuOpKernelMod::SetOutputList(const std::vector &outputList) { outputList_ = outputList; } void AicpuOpKernelMod::SetNodeDef(const std::string &nodeDef) { (void)node_def_str_.assign(nodeDef); } +void AicpuOpKernelMod::SetExtInfo(const std::string &ext_info) { ext_info_ = ext_info; } void AicpuOpKernelMod::SetNodeName(const std::string &node_name) { node_name_ = node_name; } void AicpuOpKernelMod::SetAnfNode(const mindspore::AnfNodePtr &anf_node) { MS_EXCEPTION_IF_NULL(anf_node); @@ -84,16 +86,30 @@ void AicpuOpKernelMod::CreateCpuKernelInfo(const std::vector &inputs auto node_def_len = node_def_str_.length(); param_len += node_def_len; + param_len += sizeof(uint32_t); + + AicpuParamHead aicpu_param_head; + aicpu_param_head.length = param_len; + aicpu_param_head.ioAddrNum = io_addrs_num; + + if (ext_info_.empty()) { + MS_LOG(INFO) << "Static Shape Kernel"; + aicpu_param_head.extInfoLength = 0; + aicpu_param_head.extInfoAddr = 0; + } else { + MS_LOG(INFO) << "Dynamic Kernel Ext Info size:" << ext_info_.size(); + } - // Create taskArgs: AicpuParamHead + ioAddrs + notifyId + customizedAttr - AicpuParamHead paramHead = {static_cast(param_len), static_cast(io_addrs_num)}; args_.clear(); - (void)args_.append(reinterpret_cast(¶mHead), sizeof(AicpuParamHead)); + (void)args_.append(reinterpret_cast(&aicpu_param_head), sizeof(AicpuParamHead)); // TaskArgs append ioAddrs if (io_addrs_size != 0) { (void)args_.append(reinterpret_cast(io_addrs.data()), io_addrs_size); } + // size for node_def + args_.append(reinterpret_cast(&node_def_len), sizeof(uint32_t)); + // When it's aicpu customized ops, taskArgs should append customized attr if (node_def_len != 0) { (void)args_.append(reinterpret_cast(node_def_str_.data()), node_def_len); @@ -145,8 +161,9 @@ std::vector AicpuOpKernelMod::GenTask(const std::vector node_name_ = kTopKV2; } - AicpuTaskInfoPtr task_info_ptr = make_shared( - kernel_name_, stream_id, node_so_, node_name_, node_def_str_, input_data_addrs, output_data_addrs, NeedDump()); + AicpuTaskInfoPtr task_info_ptr = + make_shared(kernel_name_, stream_id, node_so_, node_name_, node_def_str_, + ext_info_, input_data_addrs, output_data_addrs, NeedDump()); MS_LOG(INFO) << "AicpuOpKernelMod GenTask end"; return {task_info_ptr}; diff --git a/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_kernel_mod.h b/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_kernel_mod.h index 9bc75d11101..7d006cc67dd 100644 --- a/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_kernel_mod.h +++ b/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_kernel_mod.h @@ -36,6 +36,7 @@ class AicpuOpKernelMod : public AscendKernelMod { void SetOutputList(const std::vector &outputList); void SetAnfNode(const AnfNodePtr &anf_node); void SetNodeDef(const std::string &nodeDef); + void SetExtInfo(const std::string &ext_info); void SetNodeName(const std::string &node_name); /** @@ -58,6 +59,7 @@ class AicpuOpKernelMod : public AscendKernelMod { std::string node_def_str_; std::string node_name_; std::string node_so_; + std::string ext_info_; std::vector inputList_; std::vector outputList_; AnfNodePtr anf_node_; diff --git a/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_util.h b/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_util.h index d68aef3f860..01a8f577189 100644 --- a/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_util.h +++ b/mindspore/ccsrc/backend/kernel_compiler/aicpu/aicpu_util.h @@ -21,7 +21,6 @@ #include #include #include "backend/kernel_compiler/kernel.h" - namespace mindspore { namespace kernel { constexpr auto kInitDataSetQueue = "InitDataSetQueue"; @@ -50,6 +49,36 @@ struct AicpuParamHead { uint64_t extInfoAddr; // extInfo address } __attribute__((packed)); +const uint32_t kExtInfoHeadSize = 8; +struct ExtInfo { + int32_t infoType; // extend type + uint32_t infoLen; // length for infoMsg + char infoMsg[0]; // extend value +} __attribute__((packed)); + +// Extent info ShapeAndType +const uint32_t kMaxShapeDims = 8; +struct ShapeAndType { + int32_t type; + int64_t dims[kMaxShapeDims]; +} __attribute__((packed)); + +// Extend Info type for task +enum FWKTaskExtInfoType { + FWK_ADPT_EXT_SHAPE_TYPE = 0, + FWK_ADPT_EXT_INPUT_SHAPE, + FWK_ADPT_EXT_OUTPUT_SHAPE, + FWK_ADPT_EXT_INVALID +}; + +// for unknown shape op type +enum UnknowShapeOpType { + DEPEND_IN_SHAPE = 1, // op out shape get by input shape + DEPEND_CONST_VALUE = 2, // op out shape get by const op value + DEPEND_SHAPE_RANGE = 3, // op out shape get by range + DEPEND_COMPUTE = 4 // op out shape get by totally computing +}; + class AicpuOpUtil { public: static int MsTypeToProtoType(TypeId ms_type); diff --git a/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/attr.proto b/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/attr.proto index a0ab4bd1e76..fee2172c1d1 100644 --- a/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/attr.proto +++ b/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/attr.proto @@ -26,7 +26,7 @@ message AttrValue { repeated int64 i = 3 [ packed = true ]; //"array(int)" repeated float f = 4 [ packed = true ]; //"array(float)" repeated bool b = 5 [ packed = true ]; //"array(bool)" - repeated DataType type = 6 [ packed = true ]; //"array(type)" + repeated int32 type = 6 [ packed = true ]; //"array(type)" repeated TensorShape shape = 7; //"array(shape)" repeated Tensor tensor = 8; //"array(tensor)" } diff --git a/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/node_def.proto b/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/node_def.proto index b0c0e0f349b..b1a76957d59 100644 --- a/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/node_def.proto +++ b/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/node_def.proto @@ -18,9 +18,16 @@ package mindspore; import "attr.proto"; import "tensor.proto"; +message DynamicIdx { + int32 idx = 1; + int32 num = 2; +} + message NodeDef { string op = 2; map attrs = 3; repeated Tensor inputs = 4; repeated Tensor outputs = 5; + map dym_inputs = 6; + map dym_outputs = 7; } diff --git a/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/tensor.proto b/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/tensor.proto index b4fd66595a1..1240a97ab73 100644 --- a/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/tensor.proto +++ b/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/tensor.proto @@ -26,9 +26,12 @@ message Tensor { TensorShape tensor_shape = 1; // tensor content data type - DataType tensor_type = 2; + int32 tensor_type = 2; // tensor memory device // data located memory device , "DDR" "HBM" OR "NONE" string mem_device = 3; + string name = 4; + uint64 data_ptr = 5; + uint64 data_size = 6; } diff --git a/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/tensor_shape.proto b/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/tensor_shape.proto index 70534e8ebab..12b07e09673 100644 --- a/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/tensor_shape.proto +++ b/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/tensor_shape.proto @@ -31,5 +31,5 @@ message TensorShape { bool unknown_rank = 3; // data format "NHWC" "NCHW" "NC1HWC0" OR "NONE" - string data_format = 4; + int32 data_format = 4; }; diff --git a/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/types.proto b/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/types.proto index 574259d97df..4cbff252bf5 100644 --- a/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/types.proto +++ b/mindspore/ccsrc/backend/kernel_compiler/aicpu/proto/types.proto @@ -19,17 +19,30 @@ option cc_enable_arenas = true; package mindspore; enum DataType { - MS_UNKNOWN = 0; - MS_BOOL = 1; + MS_FLOAT32 = 0; + MS_FLOAT16 = 1; MS_INT8 = 2; - MS_UINT8 = 3; - MS_INT16 = 4; - MS_UINT16 = 5; - MS_INT32 = 6; - MS_UINT32 = 7; - MS_INT64 = 8; - MS_UINT64 = 9; - MS_FLOAT16 = 10; - MS_FLOAT32 = 11; - MS_FLOAT64 = 12; + MS_INT32 = 3; + MS_UINT8 = 4; + MS_INT16 = 6; + MS_UINT16 = 7; + MS_UINT32 = 8; + MS_INT64 = 9; + MS_UINT64 = 10; + MS_FLOAT64 = 11; + MS_BOOL = 12; + MS_STRING = 13; + MS_DUAL_SUB_INT8 = 14; + MS_DUAL_SUB_UINT8 = 15; + MS_COMPLEX64 = 16; + MS_COMPLEX128 = 17; + MS_QINT8 = 18; + MS_QINT16 = 19; + MS_QINT32 = 20; + MS_QUINT8 = 21; + MS_QUINT16 = 22; + MS_RESOURCE = 23; + MS_STRING_REF = 24; + MS_DUAL = 25; + MS_UNKNOWN = 26; } diff --git a/mindspore/ccsrc/backend/session/anf_runtime_algorithm.cc b/mindspore/ccsrc/backend/session/anf_runtime_algorithm.cc index f505d83299b..7b626980002 100644 --- a/mindspore/ccsrc/backend/session/anf_runtime_algorithm.cc +++ b/mindspore/ccsrc/backend/session/anf_runtime_algorithm.cc @@ -1197,6 +1197,19 @@ TypeId AnfRuntimeAlgorithm::GetPrevNodeOutputPrecision(const AnfNodePtr &node, s return GetCNodeOutputPrecision(kernel_with_index.first); } +bool AnfRuntimeAlgorithm::IsDynamicShape(const AnfNodePtr &node) { + if (!node->isa()) { + return false; + } + auto cnode = node->cast(); + MS_EXCEPTION_IF_NULL(cnode); + auto has_attr = AnfAlgo::HasNodeAttr(kAttrIsDynamicShape, cnode); + if (!has_attr) { + return false; + } + return AnfAlgo::GetNodeAttr(node, kAttrIsDynamicShape); +} + bool AnfRuntimeAlgorithm::IsCondControlKernel(const CNodePtr &node) { MS_EXCEPTION_IF_NULL(node); if (node->inputs().empty()) { diff --git a/mindspore/ccsrc/backend/session/anf_runtime_algorithm.h b/mindspore/ccsrc/backend/session/anf_runtime_algorithm.h index 2fff066166a..d4a5f00a259 100644 --- a/mindspore/ccsrc/backend/session/anf_runtime_algorithm.h +++ b/mindspore/ccsrc/backend/session/anf_runtime_algorithm.h @@ -217,6 +217,7 @@ class AnfRuntimeAlgorithm { static TypeId GetCNodeOutputPrecision(const AnfNodePtr &node); // get fix output precision from prev node, input_idx is the input index of current node related to prev node. static TypeId GetPrevNodeOutputPrecision(const AnfNodePtr &node, size_t input_idx); + static bool IsDynamicShape(const AnfNodePtr &node); static bool IsCondControlKernel(const CNodePtr &node); static bool IsIndependentNode(const CNodePtr &node); }; diff --git a/mindspore/ccsrc/utils/utils.h b/mindspore/ccsrc/utils/utils.h index af1243e9fc6..2678a40503f 100644 --- a/mindspore/ccsrc/utils/utils.h +++ b/mindspore/ccsrc/utils/utils.h @@ -269,6 +269,7 @@ constexpr auto kAttrPadDimSize = "pad_dim_size"; constexpr auto kAttrNumSegments = "num_segments"; constexpr auto kAttrBegin = "begin"; constexpr auto kAttrSize = "size"; +constexpr auto kAttrIsDynamicShape = "is_dynamic_shape"; // attr value constexpr auto kValueTargetSwitch = "target_switch"; diff --git a/mindspore/ops/_op_impl/aicpu/__init__.py b/mindspore/ops/_op_impl/aicpu/__init__.py index b321db47e08..bb63d4bf32e 100644 --- a/mindspore/ops/_op_impl/aicpu/__init__.py +++ b/mindspore/ops/_op_impl/aicpu/__init__.py @@ -13,6 +13,7 @@ # limitations under the License. """aicpu ops""" +from .unique import _unique_aicpu from .init_data_set_queue import _init_data_set_queue_aicpu from .embedding_lookup import _embedding_lookup_aicpu from .padding import _padding_aicpu diff --git a/mindspore/ops/_op_impl/aicpu/unique.py b/mindspore/ops/_op_impl/aicpu/unique.py new file mode 100644 index 00000000000..849e9696093 --- /dev/null +++ b/mindspore/ops/_op_impl/aicpu/unique.py @@ -0,0 +1,31 @@ +# 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. +# ============================================================================ + +"""Unique op""" +from mindspore.ops.op_info_register import op_info_register, AiCPURegOp, DataType + +unique_op_info = AiCPURegOp("Unique") \ + .fusion_type("OPAQUE") \ + .input(0, "x", "required") \ + .output(0, "y", "required") \ + .output(1, "idx", "required") \ + .dtype_format(DataType.I32_Default, DataType.I32_Default, DataType.I32_Default) \ + .dtype_format(DataType.I64_Default, DataType.I64_Default, DataType.I64_Default) \ + .get_op_info() + +@op_info_register(unique_op_info) +def _unique_aicpu(): + """Unique AiCPU register""" + return diff --git a/mindspore/ops/operations/__init__.py b/mindspore/ops/operations/__init__.py index aa8ba107d30..e296af83caf 100644 --- a/mindspore/ops/operations/__init__.py +++ b/mindspore/ops/operations/__init__.py @@ -91,6 +91,7 @@ from ._thor_ops import (CusBatchMatMul, CusCholeskyTrsm, CusFusedAbsMax1, CusImg from .sparse_ops import SparseToDense __all__ = [ + 'Unique', 'ReverseSequence', 'EditDistance', 'CropAndResize', diff --git a/mindspore/ops/operations/array_ops.py b/mindspore/ops/operations/array_ops.py index eb066c44b75..ad7051b3a01 100644 --- a/mindspore/ops/operations/array_ops.py +++ b/mindspore/ops/operations/array_ops.py @@ -569,9 +569,9 @@ class Unique(Primitive): containing indices of elements in the input coressponding to the output tensor. Examples: - >>> x = Tensor(np.array([1, 2, 5, 2]), mindspore.float32) + >>> x = Tensor(np.array([1, 2, 5, 2]), mindspore.int32) >>> out = P.Unique()(x) - (Tensor([1, 2, 5], mindspore.int32), Tensor([0, 1, 2, 1], mindspore.float32)) + (Tensor([1, 2, 5], mindspore.int32), Tensor([0, 1, 2, 1], mindspore.int32)) """ @prim_attr_register def __init__(self): diff --git a/tests/st/networks/models/resnet50/test_resnet50_imagenet.py b/tests/st/networks/models/resnet50/test_resnet50_imagenet.py index 220b9862085..845248ce367 100644 --- a/tests/st/networks/models/resnet50/test_resnet50_imagenet.py +++ b/tests/st/networks/models/resnet50/test_resnet50_imagenet.py @@ -367,7 +367,8 @@ def test_resnet_and_resnet_thor_imagenet_4p(): os.system("rm -rf " + str(i)) print("End training...") assert acc > 0.15 - assert cost < 20 + # the original perf is: 20 in C75B100 + assert cost < 22 # THOR thor_acc = 0.0 @@ -383,4 +384,5 @@ def test_resnet_and_resnet_thor_imagenet_4p(): os.system("rm -rf " + str(i)) print("End training...") assert thor_acc > 0.22 - assert thor_cost < 21 + # the original perf is: 21 in C75B100 + assert thor_cost < 23 diff --git a/tests/ut/cpp/stub/tdt/tdt_mock.cc b/tests/ut/cpp/stub/tdt/tdt_mock.cc index 45725de173a..6b9c6f95a4b 100644 --- a/tests/ut/cpp/stub/tdt/tdt_mock.cc +++ b/tests/ut/cpp/stub/tdt/tdt_mock.cc @@ -35,39 +35,5 @@ StatusFactory::StatusFactory() {} std::mutex& StatusFactory::GetMutex() { return GetInstance()->rwMutex_; } -TsdClient* TsdClient::GetInstance() { - static TsdClient instance; - return &instance; -} - -/** - * @ingroup TsdClient - * @brief 构造函数 - */ -TsdClient::TsdClient() { rankSize_ = 1; } - -/** - * @ingroup TsdClient - * @brief 析构函数 - */ -TsdClient::~TsdClient() = default; - -/** - * @ingroup TsdClient - * @brief framework发送拉起hccp和computer process的命令 - * @param [in] phyDeviceId : FMK传入物理ID - * @param [in] phyDeviceId : FMK传入rankSize - * @return TDT_OK:成功 或者其他错误码 - */ -TDT_StatusT TsdClient::Open(const uint32_t deviceId, const uint32_t rankSize) { return TDT_OK; } - -/** - * @ingroup TsdClient - * @brief 通知TsdClient关闭相关资源 - * @param 无 - * @return TDT_OK:成功 或者其他错误码 - */ -TDT_StatusT TsdClient::Close() { return TDT_OK; } - } // namespace tdt #endif // TDT_MOCK_H