推論デバイスとモード

OpenVINO ランタイムは、さまざまな条件下で最適なハードウェアの利用を可能にする複数の推論モードを提供します。

single-device 推論
推論ワークロード全体を実行するデバイスを 1 つだけ定義します。ランタイム・ライブラリーに埋め込まれた次のプラグインによって、さまざまなプロセッサーがサポートされます。
自動推論モード
推論デバイスの選択において一定レベルの自動化を前提としています。導入されたソリューションのパフォーマンスと移植性が向上する可能性があります。次の自動化モードがあります。

利用可能なデバイス

OpenVINO ランタイム API は、デバイスとその機能を列挙する専用のメソッドを備えています。デバイスの複数のインスタンスが使用可能な場合、一般的な “CPU” や “GPU” デバイス名以外に、より修飾された名前が使用されます (iGPU は常に GPU.0)。出力は次のようになります (デバイス名のみに短縮され、例として 2 つの GPU がリストされています)。

./hello_query_device
Available devices:
    Device: CPU
...
    Device: GPU.0
...
    Device: GPU.1

この情報の取得方法については、Hello デバイス照会サンプルを参照してください。以下は、デバイスを列挙して、マルチデバイス・モードで使用する簡単なプログラムの例です。

ov::Core core;
std::shared_ptr<ov::Model> model = core.read_model("sample.xml");
std::vector<std::string> availableDevices = core.get_available_devices();
std::string all_devices;
for (auto && device : availableDevices) {
    all_devices += device;
    all_devices += ((device == availableDevices[availableDevices.size()-1]) ? "" : ",");
}
ov::CompiledModel compileModel = core.compile_model(model, "MULTI",
    ov::device::priorities(all_devices));

一度のセットアップで 2 つの GPU デバイスが使用される場合、構成は “MULTI:GPU.1,GPU.0” になります。また、使用可能なすべての “GPU” デバイスタイプのみをループするコードは次のようになります。

ov::Core core;
std::vector<std::string> GPUDevices = core.get_property("GPU", ov::available_devices);
std::string all_devices;
for (size_t i = 0; i < GPUDevices.size(); ++i) {
    all_devices += std::string("GPU.")
                            + GPUDevices[i]
                            + std::string(i < (GPUDevices.size() -1) ? "," : "");
}
ov::CompiledModel compileModel = core.compile_model("sample.xml", "MULTI",
    ov::device::priorities(all_devices));