MXNet использует асинхронный движок для максимизации параллелизма и параллельного выполнения операторов, что означает, что каждый вызов постановки в очередь операции / копирования данных возвращается с нетерпением, а операция ставится в очередь на бэкэнде 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 можно прочитать здесь: http://d2l.ai/chapter_computational-performance/async-computation.html