デバイス・プロパティーの照会 - 構成

ここでは、実行時にさまざまなデバイスのプロパティーと構成値を照会する方法の概要を説明します。

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_modelov::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"));