From 9b919446a71118753511fbf47bd23a08599f0134 Mon Sep 17 00:00:00 2001 From: leaf2077 <1413955802@qq.com> Date: Wed, 13 Sep 2023 16:13:40 +0800 Subject: [PATCH] fix dynamic batch bug --- .../acllite/cplusplus/include/AclLiteModel.h | 1 + .../acllite/cplusplus/src/AclLiteModel.cpp | 35 +++++++++++-------- .../common/include/AclLiteModel.h | 1 + .../common/src/AclLiteModel.cpp | 35 +++++++++++-------- 4 files changed, 42 insertions(+), 30 deletions(-) diff --git a/inference/acllite/cplusplus/include/AclLiteModel.h b/inference/acllite/cplusplus/include/AclLiteModel.h index 8b7dcb36e..8dfec35a0 100755 --- a/inference/acllite/cplusplus/include/AclLiteModel.h +++ b/inference/acllite/cplusplus/include/AclLiteModel.h @@ -129,5 +129,6 @@ private: aclmdlDataset *input_; // input dataset aclmdlDataset *output_; // output dataset std::string modelPath_; // model path + void* batchShapeData; }; #endif \ No newline at end of file diff --git a/inference/acllite/cplusplus/src/AclLiteModel.cpp b/inference/acllite/cplusplus/src/AclLiteModel.cpp index 7be8426ef..bbc35c7e5 100755 --- a/inference/acllite/cplusplus/src/AclLiteModel.cpp +++ b/inference/acllite/cplusplus/src/AclLiteModel.cpp @@ -25,7 +25,7 @@ AclLiteModel::AclLiteModel():loadFlag_(false), isReleased_(false), modelId_(0), outputsNum_(0), modelMemSize_(0), modelWorkSize_(0), modelWeightSize_(0), modelMemPtr_(nullptr), modelWorkPtr_(nullptr), modelWeightPtr_(nullptr), modelDesc_(nullptr), - input_(nullptr), output_(nullptr), modelPath_("") + input_(nullptr), output_(nullptr), modelPath_(""),batchShapeData(nullptr) { } @@ -33,7 +33,7 @@ AclLiteModel::AclLiteModel(const string& modelPath):loadFlag_(false), isReleased modelId_(0), outputsNum_(0), modelMemSize_(0), modelWorkSize_(0), modelWeightSize_(0), modelMemPtr_(nullptr), modelWorkPtr_(nullptr), modelWeightPtr_(nullptr), modelDesc_(nullptr), - input_(nullptr), output_(nullptr), modelPath_(modelPath) + input_(nullptr), output_(nullptr), modelPath_(modelPath),batchShapeData(nullptr) { } @@ -41,7 +41,7 @@ AclLiteModel::AclLiteModel(void *modelAddr, size_t modelSize): loadFlag_(false), modelId_(0), outputsNum_(0), modelMemSize_(modelSize), modelWorkSize_(0), modelWeightSize_(0), modelMemPtr_(modelAddr), modelWorkPtr_(nullptr), modelWeightPtr_(nullptr), modelDesc_(nullptr), - input_(nullptr), output_(nullptr), modelPath_("") + input_(nullptr), output_(nullptr), modelPath_(""),batchShapeData(nullptr) { } @@ -222,19 +222,20 @@ AclLiteError AclLiteModel::CreateInput(vector& inputData) } size_t dynamicIdx = 0; - auto ret = aclmdlGetInputIndexByName(modelDesc_, ACL_DYNAMIC_TENSOR_NAME, &dynamicIdx); - if ((ret == ACL_SUCCESS) && (dynamicIdx == (dataNum - 1))) { - size_t dataLen = aclmdlGetInputSizeByIndex(modelDesc_, dynamicIdx); - void *data = nullptr; - ret = aclrtMalloc(&data, dataLen, ACL_MEM_MALLOC_HUGE_FIRST); - if (ret != ACL_SUCCESS) { - ACLLITE_LOG_ERROR("malloc device memory failed, errorCode = %d.", static_cast(ret)); - return ACLLITE_ERROR_INVALID_ARGS; + if(dataNum != inputData.size()) { + auto ret = aclmdlGetInputIndexByName(modelDesc_, ACL_DYNAMIC_TENSOR_NAME, &dynamicIdx); + if ((ret == ACL_SUCCESS) && (dynamicIdx == (dataNum - 1))) { + size_t dataLen = aclmdlGetInputSizeByIndex(modelDesc_, dynamicIdx); + ret = aclrtMalloc(&batchShapeData, dataLen, ACL_MEM_MALLOC_HUGE_FIRST); + if (ret != ACL_SUCCESS) { + ACLLITE_LOG_ERROR("malloc device memory failed, errorCode = %d.", static_cast(ret)); + return ACLLITE_ERROR_INVALID_ARGS; + } + DataInfo batchInput; + batchInput.data = batchShapeData; + batchInput.size = dataLen; + inputData.push_back(batchInput); } - DataInfo batchInput; - batchInput.data = data; - batchInput.size = dataLen; - inputData.push_back(batchInput); } if (dataNum != inputData.size()) { @@ -484,6 +485,10 @@ void AclLiteModel::DestroyInput() } aclmdlDestroyDataset(input_); input_ = nullptr; + if(batchShapeData!=nullptr) { + aclrtFree(batchShapeData); + batchShapeData=nullptr; + } } size_t AclLiteModel::GetModelInputSize(int index) diff --git a/inference/modelInference/sampleYOLOV7MultiInput/common/include/AclLiteModel.h b/inference/modelInference/sampleYOLOV7MultiInput/common/include/AclLiteModel.h index 8b7dcb36e..8dfec35a0 100755 --- a/inference/modelInference/sampleYOLOV7MultiInput/common/include/AclLiteModel.h +++ b/inference/modelInference/sampleYOLOV7MultiInput/common/include/AclLiteModel.h @@ -129,5 +129,6 @@ private: aclmdlDataset *input_; // input dataset aclmdlDataset *output_; // output dataset std::string modelPath_; // model path + void* batchShapeData; }; #endif \ No newline at end of file diff --git a/inference/modelInference/sampleYOLOV7MultiInput/common/src/AclLiteModel.cpp b/inference/modelInference/sampleYOLOV7MultiInput/common/src/AclLiteModel.cpp index 7be8426ef..bbc35c7e5 100755 --- a/inference/modelInference/sampleYOLOV7MultiInput/common/src/AclLiteModel.cpp +++ b/inference/modelInference/sampleYOLOV7MultiInput/common/src/AclLiteModel.cpp @@ -25,7 +25,7 @@ AclLiteModel::AclLiteModel():loadFlag_(false), isReleased_(false), modelId_(0), outputsNum_(0), modelMemSize_(0), modelWorkSize_(0), modelWeightSize_(0), modelMemPtr_(nullptr), modelWorkPtr_(nullptr), modelWeightPtr_(nullptr), modelDesc_(nullptr), - input_(nullptr), output_(nullptr), modelPath_("") + input_(nullptr), output_(nullptr), modelPath_(""),batchShapeData(nullptr) { } @@ -33,7 +33,7 @@ AclLiteModel::AclLiteModel(const string& modelPath):loadFlag_(false), isReleased modelId_(0), outputsNum_(0), modelMemSize_(0), modelWorkSize_(0), modelWeightSize_(0), modelMemPtr_(nullptr), modelWorkPtr_(nullptr), modelWeightPtr_(nullptr), modelDesc_(nullptr), - input_(nullptr), output_(nullptr), modelPath_(modelPath) + input_(nullptr), output_(nullptr), modelPath_(modelPath),batchShapeData(nullptr) { } @@ -41,7 +41,7 @@ AclLiteModel::AclLiteModel(void *modelAddr, size_t modelSize): loadFlag_(false), modelId_(0), outputsNum_(0), modelMemSize_(modelSize), modelWorkSize_(0), modelWeightSize_(0), modelMemPtr_(modelAddr), modelWorkPtr_(nullptr), modelWeightPtr_(nullptr), modelDesc_(nullptr), - input_(nullptr), output_(nullptr), modelPath_("") + input_(nullptr), output_(nullptr), modelPath_(""),batchShapeData(nullptr) { } @@ -222,19 +222,20 @@ AclLiteError AclLiteModel::CreateInput(vector& inputData) } size_t dynamicIdx = 0; - auto ret = aclmdlGetInputIndexByName(modelDesc_, ACL_DYNAMIC_TENSOR_NAME, &dynamicIdx); - if ((ret == ACL_SUCCESS) && (dynamicIdx == (dataNum - 1))) { - size_t dataLen = aclmdlGetInputSizeByIndex(modelDesc_, dynamicIdx); - void *data = nullptr; - ret = aclrtMalloc(&data, dataLen, ACL_MEM_MALLOC_HUGE_FIRST); - if (ret != ACL_SUCCESS) { - ACLLITE_LOG_ERROR("malloc device memory failed, errorCode = %d.", static_cast(ret)); - return ACLLITE_ERROR_INVALID_ARGS; + if(dataNum != inputData.size()) { + auto ret = aclmdlGetInputIndexByName(modelDesc_, ACL_DYNAMIC_TENSOR_NAME, &dynamicIdx); + if ((ret == ACL_SUCCESS) && (dynamicIdx == (dataNum - 1))) { + size_t dataLen = aclmdlGetInputSizeByIndex(modelDesc_, dynamicIdx); + ret = aclrtMalloc(&batchShapeData, dataLen, ACL_MEM_MALLOC_HUGE_FIRST); + if (ret != ACL_SUCCESS) { + ACLLITE_LOG_ERROR("malloc device memory failed, errorCode = %d.", static_cast(ret)); + return ACLLITE_ERROR_INVALID_ARGS; + } + DataInfo batchInput; + batchInput.data = batchShapeData; + batchInput.size = dataLen; + inputData.push_back(batchInput); } - DataInfo batchInput; - batchInput.data = data; - batchInput.size = dataLen; - inputData.push_back(batchInput); } if (dataNum != inputData.size()) { @@ -484,6 +485,10 @@ void AclLiteModel::DestroyInput() } aclmdlDestroyDataset(input_); input_ = nullptr; + if(batchShapeData!=nullptr) { + aclrtFree(batchShapeData); + batchShapeData=nullptr; + } } size_t AclLiteModel::GetModelInputSize(int index) -- Gitee