0

私は、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 ミリ秒になります。これらは実質的な改善ではありません。私は何を間違っていますか?

4

2 に答える 2