Flask 推理MXnet 模型时显存泄漏

1.问题描述

使用FlaskMXnet模型推理API时,每调用一次API,显存持续增长,直至最终显存爆炸强制退出程序。 注:使用MXnet做模型推理时,存在输入图片size不固定的情况。

2.解决方法

1)flask2.0的app.run()中默认打开了threaded=True来支持多线程并发请求,从而导致显存泄漏。

最简单的解决方法为:把多线程改为单线程,设置app.run()中threaded和debug为False。示例如下:

2)使用MXnet做图片的模型推理时,若不固定输入图片的size,每次resize图片尺寸,mxnet都将开启一块新的显存用于存储,导致显存增加,看着就像“显存泄漏”,但理论上存在着最大size的图片从而显存占用最大,不会再持续增加。经测试,随着持续输入不固定size的图片,显存持续增大到最大值将不再增加,并保持稳定。

3)解决2)最好的办法是:在输入模型前,固定输入图片的size,考虑等比例缩放图片可以使用mask扩充图片的边界,这样可以避免显存的增长。

4)还可能跟Python的GC策略有关,在每次跑完一张图过后强制执行一次Python的GC看看有没有用,执行指令为:gc.collect() 。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>