推論デバイスとモード#
OpenVINO ランタイムは、さまざまな条件下で最適なハードウェアの利用を可能にする複数の推論モードを提供します:
single-device 推論
自動推論モード
推論デバイスの選択において一定レベルの自動化を前提としています。導入されたソリューションのパフォーマンスと移植性が向上する可能性があります。次の自動化モードがあります:
デバイス構成を変更する方法については、デバイス・プロパティーの照会を参照してください。
利用可能なデバイスの列挙#
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));
1 度のセットアップで 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));