CPU的预测调用是否需要释放。下面代码跑一下就因为内存不够异常退出
Created by: qingwuzhu
1)PaddlePaddle版本:cpu_avx_mkl1.5 2)CPU:CPU版本 下面函数中体中tensor是否需要释放。???? 下在函数,在外面使用一个 for循环,当跑到1000次左右,就因为机器没有内存异常退出,运行过程中可以明显看出内存在减少。 for(int i=0;i < 10000; i ++) ocrFrCellOrientation("\dateset", batchData, 1, 32,400)
函数体如下: int ocrFrCellOrientation(const std::string &model_path, const float *batchData, int batchsize, int img_width, int img_height) {
// 1. 创建NativeConfig
paddle::NativeConfig config;
config.use_gpu = false;
config.SetCpuMathLibraryNumThreads(1);
// 设置模型的参数路径
config.prog_file = model_path + "/a.net";
config.param_file = model_path + "/a.p";
// 当模型输入是多个的时候,这个配置是必要的。
config.specify_input_name = true;
auto predictor = CreatePaddlePredictor(config);
// 3. 创建输入 tensor
paddle::PaddleTensor tensor;
tensor.name = "image";
tensor.shape = std::vector<int>({batchsize, 1, img_height, img_width});
tensor.data = paddle::PaddleBuf((void *)(batchData),
sizeof(float) * (batchsize * 1 * img_height * img_width));
tensor.dtype = paddle::PaddleDType::FLOAT32;
std::vector <paddle::PaddleTensor> paddle_tensor_feeds(1, tensor);
// 4. 创建输出 tensor
std::vector <paddle::PaddleTensor> outputs;
// 5. 预测
CHECK(predictor->Run(paddle_tensor_feeds, &outputs, batchsize));
CHECK_EQ(outputs.size(), 2UL);
int count0 = 0,count180=0;
const size_t num_elements = outputs.front().data.length() / sizeof(float);
printf("num_elements=%d\n", num_elements);
auto *data_out = static_cast<float *>(outputs.front().data.data());
float* result = (float*)outputs.front().data.data();
float a1 = *(result+i);
predictor.release();
}