我编写了一个 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 毫秒。这些都不是实质性的改进。我究竟做错了什么?