Toybrick

标题: npu 模型推理时内存泄漏 [打印本页]

作者: 我是大表书    时间: 2021-3-22 16:57
标题: npu 模型推理时内存泄漏
请问,我用Npu 模型推理时发生内存泄漏,内存泄露的的函数发生在rknn_run上,请问这是这个函数接口内部实现的问题么,还是我的代码问题,内存增加速度挺快的,一分钟差不多能加个1m

inputs[0].buf = rgbbuf;



ret = rknn_inputs_set(ctx, 1, inputs);
if(ret < 0)
{
  printf("rknn_input_set fail! ret=%d\n", ret);

}

ret = rknn_run(ctx, nullptr);
if(ret < 0)
{
  printf("rknn_run fail! ret=%d\n", ret);

}

outputs[0].want_float = true;
outputs[0].is_prealloc = false;
ret = rknn_outputs_get(ctx, 1, outputs, nullptr);
if(ret < 0)
{
  printf("rknn_outputs_get fail! ret=%d\n", ret);
}

// Process output
if(outputs[0].size == output0_attr.n_elems * sizeof(float))
{
  const size_t num_results = 1;
  const float threshold = 0.001f;

  std::vector<std::pair<float, int>> top_results;
  get_top_n<float>((float*)outputs[0].buf, output_elems, num_results, threshold, &top_results, true);

  std::vector<string> labels;
  size_t label_count;
  if (!ReadLabelsFile(lable_path, &labels, &label_count))
  {
   for (const auto& result : top_results)
   {
    const float confidence = result.first;
    const int index = result.second;
    centralStatus = result.second;
    //printf("%d\n", centralStatus);
    //std::cout << confidence << ": " << index << " " << labels[index] << "\n";
   }
  }
}
else
{
   printf("rknn_outputs_get fail! get output_size = [%d], but expect %u!\n",
   outputs[0].size, (uint32_t)(output0_attr.n_elems * sizeof(float)));
}

rknn_outputs_release(ctx, 1, outputs);



作者: jefferyzhang    时间: 2021-3-22 17:36
目前没有收到反馈rknn有内存泄漏现象。如果是3399pro,npu是独立ddr,内存泄漏影响不到上位机。
你代码问题可能性比较大。




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3