模型的输入、输出资源释放
关于模型的输入、输出资源释放的接口调用流程,请依次参见主要接口调用流程、基本的模型执行流程。
基本原理
在模型推理结束后,需及时释放描述模型输入、输出的数据结构,并销毁对应内存中的数据,否则可能导致内存异常。
模型可能存在多个输入、多个输出,每个输入/输出的内存地址、内存大小用aclDataBuffer类型的数据来描述,针对每个输入/输出,需调用aclDestroyDataBuffer接口销毁相应的aclDataBuffer类型,并调用aclrtFree接口释放内存中的数据。
示例代码
//释放模型推理的输入、输出资源 //释放输入资源,包括数据结构和内存 for (size_t i = 0; i < aclmdlGetDatasetNumBuffers(input_); ++i) { aclDataBuffer *dataBuffer = aclmdlGetDatasetBuffer(input_, i); (void)aclDestroyDataBuffer(dataBuffer); } (void)aclmdlDestroyDataset(input_); input_ = nullptr; aclrtFree(modelInputBuffer); //释放输出资源,包括数据结构和内存 for (size_t i = 0; i < aclmdlGetDatasetNumBuffers(output_); ++i) { aclDataBuffer* dataBuffer = aclmdlGetDatasetBuffer(output_, i); void* data = aclGetDataBufferAddr(dataBuffer); (void)aclrtFree(data); (void)aclDestroyDataBuffer(dataBuffer); } (void)aclmdlDestroyDataset(output_); output_ = nullptr;
父主题: 模型推理基本场景