Я написал Python-сервер, который использует сеть OpenVino для запуска вывода входящих запросов.Чтобы ускорить процесс, я получаю запросы в нескольких потоках и хотел бы выполнять выводы одновременно.Кажется, что что бы я ни делал, время, которое я получаю, такое же, как у неконкурентных решений - что заставляет меня думать, что я что-то упустил.
Я пишу это на Python, используя openvino 2019.1.144.Я использую несколько запросов к одному и тому же плагину и сети, чтобы попытаться сделать выводы одновременно.
def __init__(self, num_of_requests: int = 4):
self._plugin = IEPlugin("CPU", plugin_dirs=None)
model_path = './Det/'
model_xml = os.path.join(model_path, "ssh_graph.xml")
model_bin = os.path.join(model_path, "ssh_graph.bin")
net = IENetwork(model=model_xml, weights=model_bin)
self._input_blob = next(iter(net.inputs))
# Load network to the plugin
self._exec_net = self._plugin.load(network=net, num_requests=num_of_requests)
del net
def _async_runner(detect, images_subset, idx):
for img in images_subset:
request_handle = self._exec_net.start_async(request_id=idx, inputs={self._input_blob: img})
request_handle.wait()
def run_async(images): # These are the images to infer
det = Detector(num_of_requests=4)
multiplier = int(len(images)/4)
with ThreadPoolExecutor(4) as pool:
futures = []
for idx in range(0,3):
images_subset = images[idx*multiplier:(idx+1)*multiplier-1]
futures.append(pool.submit(_async_runner, det.detect, images_subset, idx))
Когда я выполняю 800 выводов в режиме синхронизации, я получаю среднее значение.время выполнения 290 мсек. Когда я работаю в асинхронном режиме, среднее время выполнения составляет 280 мсек.Это не существенные улучшения.Что я делаю не так?