Skip to content

Commit c241286

Browse files
authored
[ascend] fix memory leak (#247)
1 parent 162a714 commit c241286

18 files changed

Lines changed: 129 additions & 14 deletions

‎dlinfer/graph/dicp/vendor/AtbGraph/codegen/runtime/model.cpp‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,8 @@ atb::Status Model::Execute(atb::Context* context, std::vector<atb::Tensor>& inTe
273273
DICP_LOG_IF(st != atb::NO_ERROR, FATAL) << modelId_ << " execute node[" << nodeId << "] failed, error code: " << st;
274274
}
275275

276+
nodeHostTensorMap_.clear();
277+
276278
DICP_LOG(INFO) << modelId_ << " execute finshed!";
277279
return atb::NO_ERROR;
278280
}

‎dlinfer/graph/dicp/vendor/AtbGraph/codegen/runtime/ops/aclnn_ops/acl_nn_operation.cpp‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ atb::Status AclNnOperation::Setup(const atb::VariantPack& variantPack, uint64_t&
6767
return atb::ERROR_INVALID_PARAM;
6868
}
6969

70+
ClearAclTensors();
7071
DICP_CHECK_RET(CreateAclTensors(variantPack));
7172

7273
for (size_t i = 0; i < aclInTensors_.size(); ++i) {
@@ -104,6 +105,21 @@ int AclNnOperation::CreateAclTensors(const atb::VariantPack& variantPack) {
104105
return 0;
105106
}
106107

108+
void AclNnOperation::ClearAclTensors() {
109+
for (size_t i = 0; i < aclInTensors_.size(); ++i) {
110+
if (aclInTensors_[i].tensor != nullptr) {
111+
aclDestroyTensor(aclInTensors_[i].tensor);
112+
aclInTensors_[i].tensor = nullptr;
113+
}
114+
}
115+
for (size_t i = 0; i < aclOutTensors_.size(); ++i) {
116+
if (aclOutTensors_[i].tensor != nullptr) {
117+
aclDestroyTensor(aclOutTensors_[i].tensor);
118+
aclOutTensors_[i].tensor = nullptr;
119+
}
120+
}
121+
}
122+
107123
atb::Status AclNnOperation::Execute(const atb::VariantPack& variantPack, uint8_t* workspace, uint64_t workspaceSize, atb::Context* context) {
108124
DICP_LOG(INFO) << opName_ << " execute start";
109125
if (!context) {

‎dlinfer/graph/dicp/vendor/AtbGraph/codegen/runtime/ops/aclnn_ops/acl_nn_operation.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class AclNnOperation : public atb::Operation {
3333
atb::Status UpdateAclTensorDataPtr(const atb::VariantPack& variantPack);
3434
AclNnTensor CreateTensor(atb::Tensor atbTensor);
3535
int CreateAclTensors(const atb::VariantPack& variantPack);
36+
void ClearAclTensors();
3637
std::string opName_;
3738
atb::SVector<AclNnTensor> aclInTensors_;
3839
atb::SVector<AclNnTensor> aclOutTensors_;

‎dlinfer/graph/dicp/vendor/AtbGraph/codegen/runtime/ops/aclnn_ops/incre_flash_attention_operation.cpp‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,13 @@ int AclNnIncreFlashAttentionOperation::SetAclNnWorkspaceExecutor(uint64_t& works
5555

5656
aclTensor* tensorsOfValue[kvTensorNum];
5757
tensorsOfValue[0] = aclInTensors_.at(2).tensor;
58-
5958
auto tensorValueList = aclCreateTensorList(tensorsOfValue, kvTensorNum);
6059

60+
if (actualSeqLengths_ != nullptr) {
61+
aclDestroyIntArray(actualSeqLengths_);
62+
}
6163
std::vector<int64_t> actualSeqlenVector = {sequenceLengthkv};
62-
auto actualSeqLengths = aclCreateIntArray(actualSeqlenVector.data(), actualSeqlenVector.size());
64+
actualSeqLengths_ = aclCreateIntArray(actualSeqlenVector.data(), actualSeqlenVector.size());
6365

6466
char layerOut[this->inputLayout.length()];
6567
strcpy(layerOut, this->inputLayout.c_str());
@@ -72,7 +74,7 @@ int AclNnIncreFlashAttentionOperation::SetAclNnWorkspaceExecutor(uint64_t& works
7274
tensorValueList,
7375
nullptr,
7476
nullptr,
75-
actualSeqLengths,
77+
actualSeqLengths_,
7678
nullptr,
7779
nullptr,
7880
nullptr,

‎dlinfer/graph/dicp/vendor/AtbGraph/codegen/runtime/ops/aclnn_ops/incre_flash_attention_operation.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class AclNnIncreFlashAttentionOperation : public AclNnOperation {
1313
private:
1414
std::string inputLayout;
1515
float scaleValue;
16+
aclIntArray* actualSeqLengths_ = nullptr;
1617
int SetAclNnWorkspaceExecutor(uint64_t& workspaceSize) override;
1718
int CallAclExecute(uint8_t* workspace, uint64_t workspaceSize, aclOpExecutor* aclExecutor, aclrtStream stream) override;
1819
};

‎dlinfer/graph/dicp/vendor/AtbGraph/codegen/runtime/ops/aclnn_ops/permute_operation.cpp‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,15 @@ const int NUM2 = 2;
2222
const int NUM3 = 3;
2323
const int NUM4 = 4;
2424

25-
AclNnPermuteOperation::AclNnPermuteOperation(const std::string& name, std::vector<int64_t> dims) : AclNnOperation(name), dims_(std::move(dims)) {}
25+
AclNnPermuteOperation::AclNnPermuteOperation(const std::string& name, std::vector<int64_t> dims) : AclNnOperation(name), dims_(std::move(dims)) {
26+
aclDims_ = aclCreateIntArray(dims_.data(), dims_.size());
27+
}
2628

27-
AclNnPermuteOperation::~AclNnPermuteOperation() {}
29+
AclNnPermuteOperation::~AclNnPermuteOperation() {
30+
if (aclDims_ != nullptr) {
31+
aclDestroyIntArray(aclDims_);
32+
}
33+
}
2834

2935
atb::Status AclNnPermuteOperation::InferShape(const atb::SVector<atb::TensorDesc>& inTensorDescs, atb::SVector<atb::TensorDesc>& outTensorDescs) const {
3036
DICP_LOG(INFO) << opName_ << " infer shape start";
@@ -45,8 +51,7 @@ uint32_t AclNnPermuteOperation::GetOutputNum() const { return NUM1; }
4551

4652
int AclNnPermuteOperation::SetAclNnWorkspaceExecutor(uint64_t& workspaceSize) {
4753
DICP_LOG(INFO) << opName_ << " aclnnPermuteGetWorkspaceSize start";
48-
aclIntArray* dims = aclCreateIntArray(dims_.data(), dims_.size());
49-
int ret = aclnnPermuteGetWorkspaceSize(aclInTensors_.at(0).tensor, dims, aclOutTensors_.at(0).tensor, &workspaceSize, &aclExecutor_);
54+
int ret = aclnnPermuteGetWorkspaceSize(aclInTensors_.at(0).tensor, aclDims_, aclOutTensors_.at(0).tensor, &workspaceSize, &aclExecutor_);
5055
DICP_LOG(INFO) << opName_ << " aclnnPermuteGetWorkspaceSize end, ret:" << ret << ", workspaceSize:" << workspaceSize << ", aclExecutor:" << aclExecutor_;
5156

5257
return ret;

‎dlinfer/graph/dicp/vendor/AtbGraph/codegen/runtime/ops/aclnn_ops/permute_operation.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class AclNnPermuteOperation : public AclNnOperation {
1414

1515
private:
1616
std::vector<int64_t> dims_;
17+
aclIntArray* aclDims_ = nullptr;
1718
int SetAclNnWorkspaceExecutor(uint64_t& workspaceSize) override;
1819
int CallAclExecute(uint8_t* workspace, uint64_t workspaceSize, aclOpExecutor* aclExecutor, aclrtStream stream) override;
1920
};

‎dlinfer/graph/dicp/vendor/AtbGraph/codegen/runtime/ops/aclnn_ops/split_with_size_operation.cpp‎

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,15 @@ namespace dicp {
1919
const int NUM1 = 1;
2020

2121
AclNnSplitWithSizeOperation::AclNnSplitWithSizeOperation(const std::string& name, int64_t splitDim, std::vector<int64_t> splitSizes)
22-
: AclNnOperation(name), splitDim_(splitDim), splitSizes_(std::move(splitSizes)) {}
22+
: AclNnOperation(name), splitDim_(splitDim), splitSizes_(std::move(splitSizes)) {
23+
sizes_ = aclCreateIntArray(splitSizes_.data(), splitSizes_.size());
24+
}
2325

24-
AclNnSplitWithSizeOperation::~AclNnSplitWithSizeOperation() {}
26+
AclNnSplitWithSizeOperation::~AclNnSplitWithSizeOperation() {
27+
if (sizes_ != nullptr) {
28+
aclDestroyIntArray(sizes_);
29+
}
30+
}
2531

2632
atb::Status AclNnSplitWithSizeOperation::InferShape(const atb::SVector<atb::TensorDesc>& inTensorDescs, atb::SVector<atb::TensorDesc>& outTensorDescs) const {
2733
DICP_LOG(INFO) << opName_ << " infer shape start";
@@ -62,11 +68,9 @@ int AclNnSplitWithSizeOperation::SetAclNnWorkspaceExecutor(uint64_t& workspaceSi
6268
tmp[i] = aclOutTensors_.at(i).tensor;
6369
}
6470
aclTensorList* tensorList = aclCreateTensorList(tmp.data(), tmp.size());
65-
aclIntArray* sizes = aclCreateIntArray(splitSizes_.data(), splitSizes_.size());
66-
int ret = aclnnSplitWithSizeGetWorkspaceSize(aclInTensors_.at(0).tensor, sizes, splitDim_, tensorList, &workspaceSize, &aclExecutor_);
71+
int ret = aclnnSplitWithSizeGetWorkspaceSize(aclInTensors_.at(0).tensor, sizes_, splitDim_, tensorList, &workspaceSize, &aclExecutor_);
6772
DICP_LOG(INFO) << opName_ << " aclnnSplitWithSizeGetWorkspaceSize end, ret:" << ret << ", workspaceSize:" << workspaceSize
6873
<< ", aclExecutor:" << aclExecutor_;
69-
7074
return ret;
7175
}
7276

‎dlinfer/graph/dicp/vendor/AtbGraph/codegen/runtime/ops/aclnn_ops/split_with_size_operation.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class AclNnSplitWithSizeOperation : public AclNnOperation {
1515
private:
1616
int64_t splitDim_;
1717
std::vector<int64_t> splitSizes_;
18+
aclIntArray* sizes_ = nullptr;
1819
int SetAclNnWorkspaceExecutor(uint64_t& workspaceSize) override;
1920
int CallAclExecute(uint8_t* workspace, uint64_t workspaceSize, aclOpExecutor* aclExecutor, aclrtStream stream) override;
2021
};

‎dlinfer/graph/dicp/vendor/AtbGraph/codegen/runtime/ops/custom_ops/masked_fill_scalar_operation.cpp‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ atb::Status MaskedFillScalarOperation::Setup(const atb::VariantPack& variantPack
5757
return atb::ERROR_INVALID_PARAM;
5858
}
5959

60+
ClearAclTensors();
6061
DICP_CHECK_RET(CreateAclTensors(variantPack));
6162

6263
DICP_CHECK_RET(aclInTensors_.at(0).CreateTensor(opName_));
@@ -131,6 +132,21 @@ int MaskedFillScalarOperation::CreateAclTensors(const atb::VariantPack& variantP
131132
return 0;
132133
}
133134

135+
void MaskedFillScalarOperation::ClearAclTensors() {
136+
for (size_t i = 0; i < aclInTensors_.size(); ++i) {
137+
if (aclInTensors_[i].tensor != nullptr) {
138+
aclDestroyTensor(aclInTensors_[i].tensor);
139+
aclInTensors_[i].tensor = nullptr;
140+
}
141+
}
142+
for (size_t i = 0; i < aclOutTensors_.size(); ++i) {
143+
if (aclOutTensors_[i].tensor != nullptr) {
144+
aclDestroyTensor(aclOutTensors_[i].tensor);
145+
aclOutTensors_[i].tensor = nullptr;
146+
}
147+
}
148+
}
149+
134150
AclNnTensor MaskedFillScalarOperation::CreateTensor(atb::Tensor atbTensor) {
135151
AclNnTensor aclNnTensor;
136152
aclNnTensor.atbTensor = atbTensor;

0 commit comments

Comments
 (0)