NPU デバイス#
ニューラル・プロセシング・ユニットは、インテル® Core™ Ultra 世代の CPU (開発コード名 Meteor Lake) で導入された低電力ハードウェア・ソリューションです。これにより、特定のニューラル・ネットワーク計算タスクを他のデバイスからオフロードして、リソース管理をより合理化できます。
NPU プラグインは、関連するすべての OpenVINO 配布チャネルを通じて入手できるようになりました。
NPU プラグインでは、モデルのコンパイルと実行の両方で、システムに NPU ドライバーがインストールされている必要があります。最新の NPU ドライバーをインストールするには、以下の手順に従ってください:
プラグインは、ドライバーによって公開されるグラフ拡張 API を使用して、モデルの OpenVINO 固有の表現を独自の形式に変換します。ユーザー・モード・ドライバー (UMD) に含まれるコンパイラーは、さまざまな NPU ハードウェア・サブモジュール上のネットワーク・レイヤーとメモリー・トランザクションの実行を効率的にスケジュールするため、プラットフォーム固有の最適化を行います。
推論に NPU を使用するには、デバイス名を ov::Core::compile_model()
メソッドに渡します:
core = ov.Core()
compiled_model = core.compile_model(model, "NPU")
ov::Core core;
auto model = core.read_model("model.xml");
auto compiled_model = core.compile_model(model, "NPU");
モデルのキャッシュ#
モデルのキャッシュは、コンパイルされたモデルを自動的にエクスポートして再利用することで、アプリケーションの起動遅延を軽減します。この分野では、次の 2 つのコンパイル関連のメトリックが重要です:
UMD 動的モデルのキャッシュ#
UMD モデルのキャッシュは、現在の NPU ドライバーでデフォルトで有効化されているソリューションです。ハッシュキーに基づいて、コンパイル (FEIL に含まれる) 後にモデルをキャッシュに保存することで、初回推論 (FIL) までの時間を短縮します。このプロセスは次の 3 つのステージに要約できます:
UMD は入力 IR モデルとビルド引数からキーを生成します
UMD は、計算されたキーを使用してモデルを保存するように DirectX シェーダー・キャッシュ・セッションを要求します。
同じ引数を使用して同じ IR モデルをコンパイルする後続のすべての要求では、コンパイル済みのモデルが使用され、再コンパイルする代わりにキャッシュから読み取られます。
OpenVINO モデルのキャッシュ#
OpenVINO モデルのキャッシュは、すべての OpenVINO デバイスプラグインに共通のメカニズムであり、ov::cache_dir
プロパティーを設定することで有効にできます。UMD モデルのキャッシュは NPU プラグインによって自動的にバイパスされます。つまり、モデルはコンパイル後にのみ OpenVINO キャッシュに保存されます。後続のコンパイル要求でキャッシュにヒットすると、プラグインはモデルを再コンパイルする代わりにキャッシュからインポートします。
OpenVINO モデルのキャッシュの詳細については、モデルのキャッシュの概要を参照してください。
サポートされる機能とプロパティー#
NPU デバイスは現在、AUTO 推論モードでサポートされています (一部のモデルでは、HETERO 実行が部分的にサポートされています)。
OpenVINO の NPU サポートは現在も積極的に開発中であり、サポートされている OpenVINO 機能のセットが限定される可能性があります。
サポートされるプロパティー:
ov::device::id
ov::log::level
ov::hint::enable_cpu_pinning
ov::hint::inference_precision
ov::hint::model_priority
ov::hint::num_requests
ov::hint::performance_mode
ov::hint::execution_mode
ov::cache_dir
ov::compilation_num_threads
ov::enable_profiling
ov::workload_type
ov::intel_npu::compilation_mode_params
ov::intel_npu::turbo
ov::supported_properties
ov::available_devices
ov::optimal_number_of_infer_requests
ov::range_for_async_infer_requests
ov::range_for_streams
ov::num_streams
ov::execution_devices
ov::device::architecture
ov::device::capabilities
ov::device::full_name
ov::device::uuid
ov::device::pci_info
ov::device::gops
ov::device::type
ov::intel_npu::device_alloc_mem_size
ov::intel_npu::device_total_mem_size
ov::intel_npu::driver_version
注
パフォーマンス・モードに基づいてプラグインによって返される推論要求の最適数は、THROUGHPUT の場合は 4、LATENCY の場合は 1 です。NPU デバイスのデフォルトモードは LATENCY です。
ov::intel_npu::compilation_mode_params
ov::intel_npu::compilation_mode_params
は、NPU のモデルコンパイルの制御を可能にする NPU 固有のプロパティーです。
注
この機能は現在実験段階にあり、廃止される可能性、または将来の OV リリースでは汎用 OV API に置き換えられる可能性があります。
次の構成オプションがサポートされています:
最適化レベル
コンパイラーへの最適化のヒントを定義。
値 |
説明 |
---|---|
0 |
最適化パスのサブセットが削減されました。コンパイル時間が短縮される可能性があります。 |
1 |
デフォルトです。バランスのとれたパフォーマンスとコンパイル時間。 |
2 |
問題となる可能性のあるコンパイル時間よりもパフォーマンスを優先します。 |
パフォーマンス・ヒントのオーバーライド
LATENCY モードは、ov::hint::performance_mode
を指定することで上書きできます。他の ov::hint::PerformanceMode
ヒントには影響しません。
値 |
説明 |
---|---|
効率 |
デフォルトです。バランスのとれたパフォーマンスと電力消費。 |
レイテンシー |
電力効率よりもパフォーマンスを優先します。 |
以下に使用例を示します:
map<str, str> config = {ov::intel_npu::compilation_mode_params.name(),
ov::Any("optimization-level=1 performance-hint-override=latency")};
compile_model(model, config);
npu_turbo
ターボモードが利用可能な場合、プラットフォームの TDP 範囲内で最大 NPU 周波数とメモリー・スループットを維持するヒントがシステムに提供されます。ターボモードは、消費電力が高く、他のコンピューティング・リソースに影響を及ぼす可能性があるため、持続可能なワークロードには推奨されません。
core.set_property("NPU", ov::intel_npu::turbo(true));
または
core.compile_model(ov_model, "NPU", {ov::intel_npu::turbo(true)});
制限事項#
現在、NPU では静的形状を持つモデルのみがサポートされています。
インポート/エクスポート
オフラインコンパイルと BLOB インポートはサポートされていますが、開発目的で使用されます。事前コンパイルされたモデル (BLOB) を運用環境で使用することは推奨されません。異なる OpenVINO / NPU ドライバーバージョン間での BLOB の互換性は保証されません。