高通工业 AI Edge Box7×24 小时运行视觉质检任务,长期运行后图形预处理显存持续泄漏,定时重启进程才能恢复,如何实现无重启长效显存回收?

柯兰和小男 2026-07-16 09:15:42

高通工业 AI Edge Box7×24 小时运行视觉质检任务,长期运行后图形预处理显存持续泄漏,定时重启进程才能恢复,如何实现无重启长效显存回收?
 

...全文
23 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38498942 07-16 11:29
  • 打赏
  • 举报
回复

问题根因
图像预处理循环内创建的 GL 纹理、帧缓冲、着色器对象未主动销毁,循环推理持续新建图形资源,无自动回收逻辑;图形 SDK 底层缓存池无过期清理机制,显存占用持续线性上涨,最终显存耗尽进程崩溃。
长效显存管控全套优化方案
单帧推理后主动销毁临时图形资源
C++ 图形预处理循环完整资源释放代码,每帧运算完成立刻销毁纹理、缓冲对象,不等待循环结束统一释放:

void run_single_frame_preprocess(cv::Mat frame){
    GLuint input_texture, render_fbo;// 创建GPU纹理与帧缓冲create_gl_texture(&input_texture, frame.data, frame.cols, frame.rows);create_fbo(&render_fbo);// GPU图像缩放、降噪预处理运算execute_gpu_preprocess_shader(input_texture, render_fbo);copy_fbo_to_cpu_buffer(render_fbo, output_tensor_data);// 核心:单帧运算完成立刻释放显存资源,杜绝累积泄漏glDeleteTextures(1, &input_texture);glDeleteFramebuffers(1, &render_fbo);}

定时全局缓存回收机制
每 300 帧推理执行一次全局闲置资源清理,释放 SDK 缓存池内超过 10 分钟未使用的纹理、缓冲对象:

frame_count = 0def full_pipeline(frame):global frame_count
    frame_count +=1
    run_single_frame_preprocess(frame)# 每300帧执行一次全局显存回收if frame_count % 300 == 0:
        gpu_sdk.clear_idle_cache()
        gc.collect() # 释放上层内存残留

限制单次批量处理图像数量
禁止一次性送入超过 8 张图像并行预处理,控制 GPU 显存峰值,避免批量资源堆积无法释放。
升级配套图形 SDK 稳定版本
修复旧版 SDK 已知的纹理缓存泄漏底层 bug,同步适配对应版本 QNN,保证图形与 AI 推理资源调度接口兼容。
显存占用监控告警
增加显存占用埋点,当显存占用超过阈值时自动触发缓存清理,无需重启进程即可释放闲置显存。
参考资料
高通工业边缘设备运维文档《Long-Running Vision App GPU Memory Leak Troubleshooting》
工业视觉落地文章《7×24 小时边缘视觉程序显存泄漏长效解决实践》

7,646

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能物联网机器学习 技术论坛(原bbs) 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧