Toybrick

标题: rknn-api-1.3.0 内存泄露 [打印本页]

作者: buyishengun    时间: 2020-4-10 17:07
标题: rknn-api-1.3.0 内存泄露
调用rknn-api加载yolov3模型不断循环调用rknn_init,然后rknn_destroy

while(1)
        {
                printf("rknn_init...\r\n");
                //ret = rknn_init(&ctx,model,model_len,RKNN_FLAG_PRIOR_MEDIUM);
                ret = rknn_init(&ctx,model,model_len,RKNN_FLAG_PRIOR_HIGH);
                if(ret < 0)
                {
                        printf("rknn_init fail! ret=%d\r\n", ret);
                        return -1;
                }
                printf("rknn_destroy...\r\n");
                rknn_destroy(ctx);
                sleep(1);
        }

通过free命令,发现使用内存不断上涨,大概循环两三次涨个1M,是不是存在内存泄露?
我看rknn_init是创建了一个线程,是不是在线程退出时,没有清理干净导致的?

作者: jefferyzhang    时间: 2020-4-10 19:59
我报给相关同事看看。
一般来说不至于,不确定你说的涨1M是哪里看到的,linux有cache机制,free memory + cache才是空闲内存。
如果按你这么测,那应该训练几百次就会OOM,可以试试会不会出现OOM。
作者: jefferyzhang    时间: 2020-4-13 09:01
本帖最后由 jefferyzhang 于 2020-4-13 09:22 编辑

NPU部门同事问,这个是在1808上还是在3399pro上跑发现内存泄漏的?

我们在x86上测试了下,测试进程并无内存泄露。
linux,跟3399pro应该没区别,代码都是一样的,也看了代码,都有释放。


作者: buyishengun    时间: 2020-4-13 09:22
rknn_init...
rknn_destroy...
rknn_init...
rknn_destroy...
rknn_init...
rknn_destroy...
rknn_init...
rknn_destroy...
rknn_init...
rknn_destroy...
rknn_init...
rknn_destroy...
rknn_init...
rknn_destroy...
rknn_init...
rknn_destroy...
rknn_init...
Killed
[root@rk1808 yolov3_test]#

我这边跑个20分钟左右,就OOM了
我是用命令行:free看内存使用情况
作者: buyishengun    时间: 2020-4-13 09:23
jefferyzhang 发表于 2020-4-13 09:01
NPU部门同事问,这个是在1808上还是在3399pro上跑发现内存泄漏的?

我们在x86上测试了下,测试进程并无内 ...

1808上跑的。
作者: jefferyzhang    时间: 2020-4-13 09:54
buyishengun 发表于 2020-4-13 09:23
1808上跑的。

我们这边测了1808的,使用的模型是mobilenetv1,好像也没有发现泄露。
怀疑跟模型有关,你们的模型是用哪个?
作者: buyishengun    时间: 2020-4-13 10:14
jefferyzhang 发表于 2020-4-13 09:54
我们这边测了1808的,使用的模型是mobilenetv1,好像也没有发现泄露。
怀疑跟模型有关,你们的模型是用哪 ...

用的是yolov3,coco数据集,416的,
rknn名称:yolov3_416x416_pre.rknn
这个也是你们转好的,直接拿来用。
作者: jefferyzhang    时间: 2020-4-13 17:19
我们从上午跑到现在,都没发现yolov3 416的模型init/release会出现内存泄漏。。。。

请问下你计算棒的DRV和API版本是多少?

作者: buyishengun    时间: 2020-4-14 09:48
jefferyzhang 发表于 2020-4-13 17:19
我们从上午跑到现在,都没发现yolov3 416的模型init/release会出现内存泄漏。。。。

请问下你计算棒的DRV ...

要怎么看那些版本
作者: jefferyzhang    时间: 2020-4-14 09:53
buyishengun 发表于 2020-4-14 09:48
要怎么看那些版本

运行时候不是应该会print出来么。你也可以用rknn toolkit去跑下,就会打印了
作者: lilisai2019    时间: 2023-3-31 09:54
您好,请问这个 泄漏问题 最终 解决方法是什么? 我现在用  1.7.3 的版本,和您这边同样的现在。抓包工具直接抓到 内存泄漏。
librga:RGA_GET_VERSION:4.00,4.000000
ctx=0x7f8d602860,ctx->rgaFd=4

=================================================================
==16082==ERROR: LeakSanitizer: detected memory leaks

Indirect leak of 678912 byte(s) in 3 object(s) allocated from:
    #0 0x7f947b83ff in __interceptor_malloc (/usr/lib64/libasan.so.3+0x983ff)
    #1 0x7f8bc40417 in gcoOS_AllocateMemory (/usr/lib/libGAL.so+0x15a417)
    #2 0x7f8bc404af in gcoOS_Allocate (/usr/lib/libGAL.so+0x15a4af)
    #3 0x7f8bb013e3  (/usr/lib/libGAL.so+0x1b3e3)
    #4 0x7f8bb01533  (/usr/lib/libGAL.so+0x1b533)
    #5 0x7f8bb5365b  (/usr/lib/libGAL.so+0x6d65b)
    #6 0x7f8bb459b3 in gcoVX_CreateHW (/usr/lib/libGAL.so+0x5f9b3)
    #7 0x7f8bb45bd3 in gcoVX_Construct (/usr/lib/libGAL.so+0x5fbd3)
    #8 0x7f8bb45d9f in gcoVX_SwitchContext (/usr/lib/libGAL.so+0x5fd9f)
    #9 0x7f8cc2807b in vxCreateContext (/usr/lib64/libOpenVX.so.1+0x4407b)
    #10 0x7f8ceef83f in vsi_nn_CreateContext (/usr/lib64/librknn_runtime.so+0xb883f)
    #11 0x7f8ce8895f in vnn_CreateRKNN (/usr/lib64/librknn_runtime.so+0x5195f)
    #12 0x7f8ce90c67 in BuildGraph (/usr/lib64/librknn_runtime.so+0x59c67)
    #13 0x7f8ce8e9af in rknn_init (/usr/lib64/librknn_runtime.so+0x579af)
    #14 0x45da57  (/userdata/testAI/ai-test+0x45da57)
    #15 0x7f91e9dc1f in __libc_start_main (/lib/libc.so.6+0x20c1f)
    #16 0x40351b  (/userdata/testAI/ai-test+0x40351b)




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