私は、OpenVino ネットワークを使用して着信要求の推論を実行する Python サーバーを作成しました。高速化するために、複数のスレッドでリクエストを受け取り、推論を同時に実行したいと考えています。私が何をしても、得られる時間は非並行ソリューションと同じであるようです。
openvino 2019.1.144 を使用して、Python で記述しています。推論を同時に実行するために、同じプラグインとネットワークに対して複数のリクエストを使用しています。
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 ミリ秒になります。これらは実質的な改善ではありません。私は何を間違っていますか?