デバイス・プロパティーの照会 - 構成¶
ここでは、実行時にさまざまなデバイスのプロパティーと構成値を照会する方法の概要を説明します。
OpenVINO ランタイムには 2 種類のプロパティーがあります。
デバイス名や実行機能などデバイスに関する情報と、モデルのコンパイルに使用される構成値に関する情報を提供する読み取り専用プロパティー -
ov::CompiledModel
。変更可能なプロパティーは、主に
ov::Core::compile_model
プロセスを構成するために使用され、特定のデバイスセットでの最終推論に影響を与えます。このようなプロパティーは、ov::Core::set_property
を介してデバイスごとにグローバルに設定することも、ov::Core::compile_model
およびov::Core::query_model
呼び出しで特定のモデルに対してローカルに設定することもできます。
OpenVINO プロパティーは、指定された文字列名とタイプを持つ名前付き constexpr 変数として表されます。次の例は、C++ 名が ov::available_devices
、文字列名が AVAILABLE_DEVICES
、タイプが std::vector<std::string>
である読み取り専用プロパティーを表しています。
static constexpr Property<std::vector<std::string>, PropertyMutability::RO> available_devices{"AVAILABLE_DEVICES"};
ユーザー・アプリケーションでのプロパティーの設定と取得の使用例については、Hello デバイス照会 C++ サンプルのソースとマルチデバイス実行のドキュメントを参照してください。
利用可能なデバイスを取得¶
ov::available_devices
読み取り専用プロパティーに基づいて、OpenVINO コアは、ov::Core::get_available_devices
メソッドを使用して、OpenVINO プラグインで有効になっている現在利用可能なデバイスに関する情報を収集して情報を返します。
core = ov.Core()
available_devices = core.available_devices
ov::Core core;
std::vector<std::string> available_devices = core.get_available_devices();
この関数は、次のような利用可能なデバイスリストを返します。
CPU
GPU.0
GPU.1
特定デバイスのインスタンスが複数ある場合、デバイスは、.suffix
と一意の文字列識別子で構成されるサフィックスを付けて列挙されます。各デバイス名を次に渡すことができます。
特定の設定プロパティーを持つデバイスにモデルをロードする
ov::Core::compile_model
。共通またはデバイス固有のプロパティーを取得する
ov::Core::get_property
。deviceName
を受け入れるov::Core
クラスの他のすべてのメソッド。
コード内でのプロパティーの操作¶
ov::Core
クラスは、デバイス情報を照会し、デバイス構成プロパティーを設定または取得する次のメソッドを提供します。
ov::Core::get_property
- 特定のプロパティーの現在の値を取得します。ov::Core::set_property
- 指定されたdevice_name
のプロパティーの新しい値をグローバルに設定します。
ov::CompiledModel
クラスも次のプロパティーをサポートするように拡張されています。
ov::CompiledModel::get_property
ov::CompiledModel::set_property
OpenVINO のデバイスに依存しない共通プロパティーに関連するドキュメントについては、properties.hpp (GitHub) を参照してください。デバイス固有の構成キーは、対応するデバイスフォルダー (openvino/runtime/intel_gpu/properties.hpp
など) にあります。
コアを介したプロパティーの操作¶
デバイスのプロパティーを取得¶
以下のコードは、モデルの推論に使用されるデバイスの HETERO
デバイス優先度を照会する方法を示しています。
device_priorites = core.get_property("HETERO", device.priorities)
auto device_priorites = core.get_property("HETERO", ov::device::priorities);
注
すべてのプロパティーにはタイプがあり、プロパティー宣言時に指定されます。これに基づいて、auto
のタイプは C++ コンパイラーによって自動的に推定されます。
使用可能なデバイス (ov::available_devices
)、デバイス名 (ov::device::full_name
)、サポートされているプロパティー (ov::supported_properties
) などのデバイス・プロパティーを抽出するには、ov::Core::get_property
メソッドを使用します。
cpu_device_name = core.get_property("CPU", device.full_name)
auto cpu_device_name = core.get_property("CPU", ov::device::full_name);
戻り値は次のように表示されます: Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz
。
注
ov::Core
または ov::CompiledModel
レベルでサポートされているプロパティーのリストを確認するには、サポートされているプロパティー名のベクトルを含む ov::supported_properties
を使用します。変更可能なプロパティーには、true
値を返す ov::PropertyName::is_mutable
があります。ov::Core
レベルで変更可能なプロパティーのほとんどは、モデルがコンパイルされると変更できないため、不変の読み取り専用プロパティーになります。
モデルを使用したワークの構成¶
次のような ov::Core
メソッドは、プロパティーの選択を最後の引数として受け入れます。
ov::Core::compile_model
ov::Core::import_model
ov::Core::query_model
各プロパティーは、指定されたプロパティー・タイプのプロパティー値を渡す関数呼び出しとして使用する必要があります。
config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT,
hints.inference_precision: ov.Type.f32}
compiled_model = core.compile_model(model, "CPU", config)
auto compiled_model = core.compile_model(model, "CPU",
ov::hint::performance_mode(ov::hint::PerformanceMode::THROUGHPUT),
ov::hint::inference_precision(ov::element::f32));
以下の例では、最高のスループットを達成するため複数の推論要求を並行して推論できるようにモデルをコンパイルする一方、FP32 精度で精度を損なうことなく推論を実行するヒントを指定しています。
プロパティーをグローバルに設定¶
ov::Core::set_property
を使用して、指定されたデバイス名のグローバル構成プロパティーを設定する必要があります。これらのプロパティーは、複数の ov::Core::compile_model
、ov::Core::query_model
およびその他の呼び出しにわたって同じです。ただし、特定の ov::Core::compile_model
呼び出しでプロパティーを設定すると、現在の呼び出しにのみプロパティーが適用されます。
# latency hint is a default for CPU
core.set_property("CPU", {hints.performance_mode: hints.PerformanceMode.LATENCY})
# compiled with latency configuration hint
compiled_model_latency = core.compile_model(model, "CPU")
# compiled with overriden performance hint value
config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
compiled_model_thrp = core.compile_model(model, "CPU", config)
// set letency hint is a default for CPU
core.set_property("CPU", ov::hint::performance_mode(ov::hint::PerformanceMode::LATENCY));
// compiled with latency configuration hint
auto compiled_model_latency = core.compile_model(model, "CPU");
// compiled with overriden ov::hint::performance_mode value
auto compiled_model_thrp = core.compile_model(model, "CPU",
ov::hint::performance_mode(ov::hint::PerformanceMode::THROUGHPUT));
CompiledModel レベルのプロパティー¶
プロパティーを取得¶
ov::CompiledModel::get_property
メソッドは、コンパイルされたモデルの作成に使用されたプロパティー値、または ov::optimal_number_of_infer_requests
などのコンパイルされたモデルレベルのプロパティーを取得するために使用されます。
compiled_model = core.compile_model(model, "CPU")
nireq = compiled_model.get_property(props.optimal_number_of_infer_requests)
auto compiled_model = core.compile_model(model, "CPU");
auto nireq = compiled_model.get_property(ov::optimal_number_of_infer_requests);
または、CPU
デバイス上の推論に使用されるスレッドの数:
compiled_model = core.compile_model(model, "CPU")
nthreads = compiled_model.get_property(props.inference_num_threads)
auto compiled_model = core.compile_model(model, "CPU");
auto nthreads = compiled_model.get_property(ov::inference_num_threads);
コンパイルされたモデルのプロパティーを設定¶
これをサポートする唯一のモードはマルチデバイス実行です。
config = {device.priorities: "CPU,GPU"}
compiled_model = core.compile_model(model, "MULTI", config)
# change the order of priorities
compiled_model.set_property({device.priorities: "GPU,CPU"})
auto compiled_model = core.compile_model(model, "MULTI",
ov::device::priorities("CPU", "GPU"));
// change the order of priorities
compiled_model.set_property(ov::device::priorities("GPU", "CPU"));