Memory leaks 在模型上运行推断时mxnet cpu内存泄漏
在mxnet模型上执行推断时,我遇到内存泄漏(即,将图像缓冲区转换为张量,并在模型中运行一次前向传递) 下面是一个最小的可复制示例:Memory leaks 在模型上运行推断时mxnet cpu内存泄漏,memory-leaks,deep-learning,intel-mkl,mxnet,numpy-ndarray,Memory Leaks,Deep Learning,Intel Mkl,Mxnet,Numpy Ndarray,在mxnet模型上执行推断时,我遇到内存泄漏(即,将图像缓冲区转换为张量,并在模型中运行一次前向传递) 下面是一个最小的可复制示例: import mxnet from gluoncv import model_zoo from gluoncv.data.transforms.presets import ssd model = model_zoo.get_model('ssd_512_resnet50_v1_coco') model.initialize() for _ in range(
import mxnet
from gluoncv import model_zoo
from gluoncv.data.transforms.presets import ssd
model = model_zoo.get_model('ssd_512_resnet50_v1_coco')
model.initialize()
for _ in range(100000):
# note: an example imgbuf string is too long to post
# see gist or use requests etc to obtain
imgbuf =
ndarray = mxnet.image.imdecode(imgbuf, to_rgb=1)
tensor, orig = ssd.transform_test(ndarray, 512)
labels, confidences, bboxs = model.forward(tensor)
结果是RSS内存线性增加(从700MB增加到10GB+)
其他预训练模型和我尝试使用的自定义模型仍然存在此问题。使用垃圾收集器并没有显示出对象的任何增加
这有完整的代码片段,包括一个示例imgbuf
环境信息:
python 2.7.15
通用条款4.2.1
mxnet mkl 1.3.1
gluoncv 0.3.0MXNet正在运行一个异步引擎,以最大限度地提高操作的并行性和并行执行,这意味着对排队操作/复制数据的每次调用都会急切地返回,并且操作会在MXNet后端排队。通过按编写的方式运行循环,可以有效地提高操作排队速度 您可以添加一个显式的同步点,例如
.asnumpy()
或.mx.nd.waitall()
或.wait_to_read()
,这样MXNet将在继续执行python之前等待排队操作完成
这将解决您的问题:
import mxnet
from gluoncv import model_zoo
from gluoncv.data.transforms.presets import ssd
model = model_zoo.get_model('ssd_512_resnet50_v1_coco')
model.initialize()
for _ in range(100000):
# note: an example imgbuf string is too long to post
# see gist or use requests etc to obtain
imgbuf =
ndarray = mxnet.image.imdecode(imgbuf, to_rgb=1)
tensor, orig = ssd.transform_test(ndarray, 512)
labels, confidences, bboxs = model.forward(tensor)
mx.nd.waitall()
在此处阅读有关MXNet异步执行的更多信息: