NPU デバイス#

ニューラル・プロセシング・ユニットは、インテル® Core™ Ultra 世代の CPU (開発コード名 Meteor Lake) で導入された低電力ハードウェア・ソリューションです。これにより、特定のニューラル・ネットワーク計算タスクを他のデバイスからオフロードして、リソース管理をより合理化できます。

NPU プラグインは、関連するすべての OpenVINO 配布チャネルを通じて入手できるようになりました。

サポートされるプラットフォーム:
ホスト: インテル® Core™ Ultra (開発コード名 Meteor Lake)
NPU デバイス: NPU 3720
OS: Ubuntu* 22.04 64 ビット (Linux* kernel 6.6+)、Microsoft Windows* 11 64 ビット (22H2, 23H2)

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 つのコンパイル関連のメトリックが重要です:

初めての推論レイテンシー (FEIL)
デバイス上でモデルを初めてコンパイルして実行するのに必要なすべてのステップを測定します。これには、モデルのコンパイル時間、デバイス上でモデルをロードして初期化するのに必要な時間、および最初の推論の実行が含まれます。
初回推論レイテンシー (FIL)
事前コンパイルされたモデルをデバイスにロードして初期化し、最初の推論を実行するのに必要な時間を測定します。

UMD 動的モデルのキャッシュ#

UMD モデルのキャッシュは、現在の NPU ドライバーでデフォルトで有効化されているソリューションです。ハッシュキーに基づいて、コンパイル (FEIL に含まれる) 後にモデルをキャッシュに保存することで、初回推論 (FIL) までの時間を短縮します。このプロセスは次の 3 つのステージに要約できます:

  1. UMD は入力 IR モデルとビルド引数からキーを生成します

  2. UMD は、計算されたキーを使用してモデルを保存するように DirectX シェーダー・キャッシュ・セッションを要求します。

  3. 同じ引数を使用して同じ IR モデルをコンパイルする後続のすべての要求では、コンパイル済みのモデルが使用され、再コンパイルする代わりにキャッシュから読み取られます。

OpenVINO モデルのキャッシュ#

OpenVINO モデルのキャッシュは、すべての OpenVINO デバイスプラグインに共通のメカニズムであり、ov::cache_dir プロパティーを設定することで有効にできます。UMD モデルのキャッシュは NPU プラグインによって自動的にバイパスされます。つまり、モデルはコンパイル後にのみ OpenVINO キャッシュに保存されます。後続のコンパイル要求でキャッシュにヒットすると、プラグインはモデルを再コンパイルする代わりにキャッシュからインポートします。

OpenVINO モデルのキャッシュの詳細については、モデルのキャッシュの概要を参照してください。

サポートされる推論データタイプ
NPU プラグインは、内部プリミティブの推論精度として次のデータタイプをサポートします:
浮動小数点データタイプ: F32、F16
量子化データタイプ: U8 (量子化モデルは INT8 または FP16-INT8 混合の場合があります)
ハードウェアの演算精度は FP16 です。

量子化されたモデルを取得する方法の詳細については、モデル最適化ガイドおよび NNCF ツール量子化ガイドを参照してください。

サポートされる機能とプロパティー#

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 の場合は 4LATENCY の場合は 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 の互換性は保証されません。

関連情報#