Intel NPU (OpenVino) با LiteRT

LiteRT از طریق رابط برنامه‌نویسی کاربردی CompiledModel از Intel OpenVino برای AOT و کامپایل روی دستگاه پشتیبانی می‌کند.

محیط توسعه را تنظیم کنید

لینوکس (x86_64):

  • اوبونتو ۲۲.۰۴ یا ۲۴.۰۴ LTS
  • پایتون ۳.۱۰+ - از python.org یا توزیع مورد نظر خود نصب کنید ( sudo apt install python3 python3-venv )
  • درایور NPU اینتل نسخه ۱.۳۲.۱ - به تنظیمات NPU لینوکس مراجعه کنید

ویندوز (x86_64):

برای ساخت از منبع، Bazel 7.4.1+ با استفاده از Bazelisk یا نسخه هرمتیک Docker نیز مورد نیاز است.

SoC های پشتیبانی شده

پلتفرم ان پی یو نام رمز سیستم عامل
اینتل کور اولترا سری ۲ NPU4000 دریاچه قمری (LNL) لینوکس، ویندوز
اینتل کور اولترا سری ۳ NPU5010 دریاچه پلنگ (PTL) لینوکس، ویندوز

شروع سریع

۱. درایورهای NPU را نصب کنید

به بخش تنظیمات NPU لینوکس یا تنظیمات NPU ویندوز مراجعه کنید. اگر فقط به AOT نیاز دارید، از این مرحله صرف نظر کنید.

درایور NPU فقط در سیستم‌هایی که مدل را روی سخت‌افزار NPU اجرا می‌کنند مورد نیاز است. سیستم‌هایی که صرفاً از AOT-build استفاده می‌کنند می‌توانند از آن صرف نظر کنند.

توجه: ai-edge-litert-sdk-intel-nightly چرخ شبانه OpenVINO مطابق با نسخه PEP 440 (مثلاً openvino==2026.2.0.dev20260506 ) را پین می‌کند، بنابراین pip برای یافتن آن --extra-index-url https://storage.openvinotoolkit.org/simple/wheels/nightly نیاز دارد. در لینوکس، اگر تشخیص خودکار توزیع، بایگانی اشتباه را انتخاب کرد، قبل از pip install LITERT_OV_OS_ID=ubuntu22 یا ubuntu24 را تنظیم کنید.

۲. ایجاد یک محیط مجازی پایتون

توصیه می‌شود چرخ شبانه openvino را از هرگونه نصب OpenVINO در کل سیستم جدا نگه دارید.

python -m venv litert_env
# Linux / macOS
source litert_env/bin/activate
# Windows (PowerShell)
.\litert_env\Scripts\Activate.ps1

python -m pip install --upgrade pip

۳. بسته pip را نصب کنید

pip install --pre \
    --extra-index-url https://storage.openvinotoolkit.org/simple/wheels/nightly \
    ai-edge-litert-nightly ai-edge-litert-sdk-intel-nightly

دستور --extra-index-url به pip اجازه می‌دهد تا چرخ شبانه‌ی پین‌شده‌ی openvino را از فهرست OpenVINO در کنار بسته‌های موجود در PyPI شناسایی کند.

۴. تأیید نصب

python -c "
from ai_edge_litert.aot.vendors.intel_openvino import intel_openvino_backend
import ai_edge_litert_sdk_intel, openvino, os
print('Backend:', intel_openvino_backend.IntelOpenVinoBackend.id())
print('Dispatch:', intel_openvino_backend.get_dispatch_dir())
print('OpenVINO:', openvino.__version__)
print('SDK libs:', sorted(os.listdir(ai_edge_litert_sdk_intel.path_to_sdk_libs())))
print('Available devices:', openvino.Core().available_devices)
"

چه مواردی را در خروجی بررسی کنیم:

  • SDK libs libopenvino_intel_npu_compiler.so (لینوکس) یا openvino_intel_npu_compiler.dll (ویندوز) را فهرست می‌کنند - که برای AOT مورد نیاز است.
  • Available devices شامل NPU هستند - تأیید می‌کند که درایور NPU نصب شده است و OpenVINO می‌تواند با دستگاه ارتباط برقرار کند. NPU در سیستم‌های فقط AOT (که درایور نصب نشده است) و در سیستم‌های بدون سخت‌افزار Intel NPU وجود نخواهد داشت.

۵. کامپایل AOT (اختیاری)

  • یک فایل .tflite را برای یک هدف خاص Intel NPU (PTL یا LNL) از قبل کامپایل می‌کند، بنابراین زمان اجرا از مرحله افزونه کامپایلر صرف نظر می‌کند.
  • به واحد پردازش عصبی فیزیکی یا درایور NPU نیاز ندارد — فقط به ai-edge-litert-nightly و ai-edge-litert-sdk-intel-nightly نیاز دارد.
  • کامپایل متقابل پشتیبانی می‌شود: روی هر میزبان لینوکس یا ویندوز کامپایل کنید، فایل .tflite حاصل را به مقصد هر یک از سیستم عامل‌ها ارسال کنید و آن را در آنجا اجرا کنید.

فایل‌های خروجی با نام <model>_IntelOpenVINO_<SoC>_apply_plugin.tflite نامگذاری شده‌اند.

from ai_edge_litert.aot import aot_compile
from ai_edge_litert.aot.vendors.intel_openvino import target as intel_target

# Compile for a single Intel NPU target (PTL or LNL).
aot_compile.aot_compile(
    "model.tflite",
    output_dir="out",
    target=intel_target.Target(soc_model=intel_target.SocModel.PTL),
)

# Or omit target= to compile for every registered backend/target.
aot_compile.aot_compile("model.tflite", output_dir="out", keep_going=True)

۶. اجرای استنتاج NPU

LiteRT از دو مسیر استنتاج در واحد پردازش عصبی اینتل (NPU) پشتیبانی می‌کند:

  • JIT — یک فایل خام .tflite را بارگذاری می‌کند؛ افزونه کامپایلر، عملیات پشتیبانی‌شده برای NPU را در زمان CompiledModel.from_file() پارتیشن‌بندی و کامپایل می‌کند. مقداری تأخیر در اولین اجرا اضافه می‌کند (بسته به مدل متفاوت است).
  • کامپایل شده با AOT — یک <model>_IntelOpenVINO_<SoC>_apply_plugin.tflite تولید شده توسط مرحله ۴ را بارگذاری می‌کند. در زمان بارگذاری، مرحله پارتیشن‌بندی و کامپایل را رد می‌کند.

این قطعه کد برای هر دو کار می‌کند:

from ai_edge_litert.compiled_model import CompiledModel
from ai_edge_litert.hardware_accelerator import HardwareAccelerator

model = CompiledModel.from_file(
    "model.tflite",  # raw tflite (JIT) or ..._apply_plugin.tflite (AOT)
    hardware_accel=HardwareAccelerator.NPU | HardwareAccelerator.CPU,
)

sig_key = list(model.get_signature_list().keys())[0]
sig_idx = model.get_signature_index(sig_key)
input_buffers = model.create_input_buffers(sig_idx)
output_buffers = model.create_output_buffers(sig_idx)
model.run_by_index(sig_idx, input_buffers, output_buffers)
print("Fully accelerated:", model.is_fully_accelerated())

تأیید کنید که JIT واقعاً اجرا شده است

وقتی JIT با موفقیت اجرا شود، فایل گزارش شامل موارد زیر است (پسوند فایل در لینوکس .so و در ویندوز .dll است):

INFO: [compiler_plugin.cc:236] Loaded plugin at: .../LiteRtCompilerPlugin_IntelOpenvino.{so,dll}
INFO: [compiler_plugin.cc:690] Partitioned subgraph<0>, selected N ops, from a total of N ops
INFO: [compiled_model.cc:1006] JIT compilation changed model, reserializing...

اگر آن خطوط وجود ندارند اما Fully accelerated: True ، مدل روی CPU fallback XNNPACK اجرا شده است، نه روی NPU — به ردیف عیب‌یابی JIT مراجعه کنید.

۷. معیار

# Dispatch library and the NPU compiler are auto-discovered from the wheel.
litert-benchmark --model=model.tflite --use_npu --num_runs=50

پرچم‌های رایج:

پرچم پیش‌فرض توضیحات
--model PATH مسیر مدل .tflite ‎ (الزامی).
--signature KEY اول کلید امضا برای اجرا.
--use_cpu / --no_cpu روی شتاب‌دهنده CPU / پشتیبان CPU را تغییر دهید.
--use_gpu خاموش شتاب‌دهنده‌ی پردازنده‌ی گرافیکی (GPU) را فعال کنید.
--use_npu خاموش شتاب‌دهنده‌ی NPU اینتل را فعال کنید.
--require_full_delegation خاموش اگر مدل به طور کامل به شتاب‌دهنده انتخاب‌شده منتقل نشده باشد، با شکست مواجه می‌شود.
--num_runs N ۵۰ تعداد تکرارهای استنتاج زمان‌بندی‌شده.
--warmup_runs N ۵ تکرارهای گرم کردن بدون زمان قبل از اندازه‌گیری.
--num_threads N ۱ تعداد رشته‌های پردازنده (Threads)
--result_json PATH خلاصه‌ای از JSON بنویسید (آمار تأخیر، توان عملیاتی، فهرست شتاب‌دهنده).
--verbose خاموش ثبت وقایع اضافی در زمان اجرا.

پرچم‌های پیشرفته / لغو - فقط برای اشاره به ساخت‌های سفارشی مورد نیاز هستند: --dispatch_library_path ، --compiler_plugin_path ، --runtime_path .

چرخ‌های چندفروشنده‌ای: اتصال JIT به Intel OV

نکته: وقتی Environment.create() بدون مسیرهای صریح فراخوانی می‌شود، به طور خودکار فروشندگان را در ai_edge_litert/vendors/ به ترتیب حروف الفبا کشف می‌کند و اولین موردی را که پیدا می‌کند ثبت می‌کند. در یک نصب با فروشندگان مختلف، این ممکن است Intel OV نباشد - دایرکتوری‌های Intel OV را به صراحت ارسال کنید تا انتخاب صحیح را اعمال کند.

  • pip wheel افزونه‌های کامپایلر را برای هر فروشنده ثبت‌شده ( intel_openvino/ ، google_tensor/ ، mediatek/ ، qualcomm/ ، samsung/ ) ارائه می‌دهد.
  • برای اعمال مسیر Intel OV (که در صورت نصب چندین SDK از فروشندگان مختلف توصیه می‌شود)، دایرکتوری‌های Intel OV را به صورت دستی وارد کنید:
from ai_edge_litert.environment import Environment
from ai_edge_litert.compiled_model import CompiledModel
from ai_edge_litert.hardware_accelerator import HardwareAccelerator
from ai_edge_litert.aot.vendors.intel_openvino import intel_openvino_backend as ov

env = Environment.create(
    compiler_plugin_path=ov.get_compiler_plugin_dir(),   # JIT compiler
    dispatch_library_path=ov.get_dispatch_dir(),          # runtime
)
model = CompiledModel.from_file(
    "model.tflite",
    hardware_accel=HardwareAccelerator.NPU | HardwareAccelerator.CPU,
    environment=env,
)

زمان اجرا هر کتابخانه اشتراکی را که در دایرکتوری داده شده پیدا کند، بارگذاری می‌کند، بنابراین اشاره به vendors/intel_openvino/compiler/ فقط افزونه اینتل را بارگذاری می‌کند؛ افزونه‌های Google Tensor / MediaTek / Qualcomm / Samsung که در دایرکتوری‌های خواهر و برادر قرار دارند، هرگز دست‌کاری نمی‌شوند.

برای CLI، پرچم‌های معادل عبارتند از:

DISPATCH_DIR=$(python3 -c 'from ai_edge_litert.aot.vendors.intel_openvino import intel_openvino_backend as ov; print(ov.get_dispatch_dir())')
COMPILER_DIR=$(python3 -c 'from ai_edge_litert.aot.vendors.intel_openvino import intel_openvino_backend as ov; print(ov.get_compiler_plugin_dir())')

litert-benchmark --model=model.tflite --use_npu \
    --compiler_plugin_path=$COMPILER_DIR \
    --dispatch_library_path=$DISPATCH_DIR

تأیید اجرای NPU

برای تأیید اینکه مدل واقعاً روی NPU اجرا شده است، هر دو سیگنال را بررسی کنید:

  1. این گزارش شامل Loading shared library: .../LiteRtDispatch_IntelOpenvino.{so,dll} است - کتابخانه اعزام اینتل بارگذاری شده است ( .so در لینوکس، .dll در ویندوز).
  2. model.is_fully_accelerated() True را برمی‌گرداند - هر عملیات به شتاب‌دهنده انتخاب شده منتقل شد.

is_fully_accelerated() به تنهایی کافی نیست : اگر کتابخانه dispatch هرگز بارگذاری نشود، عملیات‌ها به طور کامل به XNNPACK/CPU منتقل می‌شوند، نه به NPU.


راه‌اندازی NPU لینوکس

توجه: اگر فقط به AOT نیاز دارید، از این بخش صرف نظر کنید - NPU فیزیکی لازم نیست.

اطلاعات: از درایور NPU نسخه ۱.۳۲.۱ (همراه با OpenVINO 2026.1) استفاده کنید. درایورهای قدیمی‌تر با Level0 pfnCreate2 result: ZE_RESULT_ERROR_UNSUPPORTED_FEATURE مواجه می‌شوند.

# 1. NPU driver (Ubuntu 24.04 use -ubuntu2204 tarball for 22.04).
sudo dpkg --purge --force-remove-reinstreq \
  intel-driver-compiler-npu intel-fw-npu intel-level-zero-npu intel-level-zero-npu-dbgsym || true
wget https://github.com/intel/linux-npu-driver/releases/download/v1.32.1/linux-npu-driver-v1.32.1.20260422-24767473183-ubuntu2404.tar.gz
tar -xf linux-npu-driver-v1.32.1.*.tar.gz
sudo apt update && sudo apt install -y libtbb12
sudo dpkg -i intel-fw-npu_*.deb intel-level-zero-npu_*.deb intel-driver-compiler-npu_*.deb

# 2. Level Zero loader v1.27.0.
wget https://snapshot.ppa.launchpadcontent.net/kobuk-team/intel-graphics/ubuntu/20260324T100000Z/pool/main/l/level-zero-loader/libze1_1.27.0-1~24.04~ppa2_amd64.deb
sudo dpkg -i libze1_*.deb

# 3. Permissions + verify.
sudo gpasswd -a ${USER} render && newgrp render
ls /dev/accel/accel0   # must exist after reboot

سپس قطعه کد install + verify را از Quick Start اجرا کنید.


تنظیمات NPU ویندوز

توجه: اگر فقط به AOT نیاز دارید، از این بخش صرف نظر کنید - NPU فیزیکی لازم نیست.

  • درایور Intel NPU ( نسخه 32.0.100.4724+ ) را از مرکز دانلود اینتل نصب کنید.
  • تأیید کنید که مدیر دستگاه، دستگاه NPU را در زیر پردازنده‌های عصبی (Neural processors) فهرست می‌کند (که بسته به درایور، با عنوان Intel(R) AI Boost یا Intel(R) NPU نشان داده می‌شود).
  • قطعه کد install + verify را از Quick Start اجرا کنید و pip با python -m pip جایگزین کنید.

اطلاعات: import ai_edge_litert دایرکتوری‌های DLL ثبت خودکار را با استفاده از os.add_dll_directory() وارد می‌کند، بنابراین اسکریپت‌های پایتون نیازی به تنظیم PATH ندارند. برای مصرف‌کنندگان غیر پایتون، setupvars.bat را اجرا کنید یا <openvino>/libs را به PATH اضافه کنید.


ساخت از منبع

پشت یک پروکسی؟ قبل از اجرای اسکریپت‌های ساخت، http_proxy / https_proxy / no_proxy را صادر کنید - آنها این اسکریپت‌ها را به داکر و کانتینر ارسال می‌کنند.

لینوکس (داکر، هرمتیک):

cd LiteRT/docker_build && ./build_wheel_with_docker.sh

ویندوز (PowerShell، Bazel در PATH):

.\ci\build_pip_package_with_bazel_windows.ps1

خروجی‌ها در dist/ قرار می‌گیرند:

  • ai_edge_litert-*.whl — چرخ زمان اجرا.
  • ai_edge_litert_sdk_{intel,qualcomm,mediatek,samsung}-*.tar.gz — فروشنده sdists.
  • sdist اینتل حدود ۵ کیلوبایت است؛ کامپایلر NPU .so / .dll در زمان pip install فراخوانی می‌شود، بنابراین sdist یکسانی روی لینوکس و ویندوز کار می‌کند.

تست‌های واحد

bazel test \
  //litert/python/aot/vendors/intel_openvino:intel_openvino_backend_test \
  //litert/c/options:litert_intel_openvino_options_test \
  //litert/cc/options:litert_intel_openvino_options_test \
  //litert/tools/flags/vendors:intel_openvino_flags_test

عیب‌یابی

مسئله رفع
خطای AOT: Device with "NPU" name is not registered کامپایلر NPU دریافت نشد. لیست‌های ai_edge_litert_sdk_intel.path_to_sdk_libs() libopenvino_intel_npu_compiler.so / .dll را در ai_edge_litert_sdk_intel.path_to_sdk_libs() بررسی کنید. اگر خالی بود، با دسترسی به شبکه دوباره نصب کنید، یا LITERT_OV_OS_ID=ubuntu22 / ubuntu24 را تنظیم کنید.
JIT به جای NPU روی CPU اجرا می‌شود (بدون لاگ Partitioned subgraph ، بدون لاگ Loaded plugin ، Fully accelerated: True هنوز هم چاپ می‌شود) افزونه کامپایلر پیدا نشد. تأیید کنید که ov.get_compiler_plugin_dir() مسیری را در زیر ai_edge_litert/vendors/intel_openvino/compiler/ برمی‌گرداند. اگر چندین SDK فروشنده نصب شده است، compiler_plugin_path=ov.get_compiler_plugin_dir() را صریحاً به Environment.create() (یا --compiler_plugin_path=... به litert-benchmark ) ارسال کنید.
JIT با خطا مواجه می‌شود: Cannot load library .../openvino/libs/libopenvino_intel_npu_compiler.so (لینوکس) / openvino_intel_npu_compiler.dll (ویندوز) SDK sdist با اولین import ai_edge_litert_sdk_intel ، کامپایلر NPU را در openvino/libs/ کپی می‌کند. اگر این کپی نادیده گرفته شده باشد (فایل سیستم فقط خواندنی باشد، openvino وجود نداشته باشد)، ai-edge-litert-sdk-intel را پس از نصب openvino دوباره نصب کنید، سپس import ai_edge_litert .
Level0 pfnCreate2 result: ZE_RESULT_ERROR_UNSUPPORTED_FEATURE درایور NPU را به نسخه ۱.۳۲.۱ (لینوکس) ارتقا دهید.
/dev/accel/accel0 پیدا نشد sudo dmesg | grep -i vpu برای اشکال‌زدایی درایور؛ پس از نصب، سیستم را مجدداً راه‌اندازی کنید.
مجوز برای NPU رد شد sudo gpasswd -a ${USER} render && newgrp render .
ویندوز: NPU در Device Manager نیست درایور NPU نسخه ۳۲.۰.۱۰۰.۴۷۲۴+ را از مرکز دانلود اینتل نصب کنید.
ویندوز: Failed to initialize Dispatch API / DLL ها از دست رفته اند مطمئن شوید که import ai_edge_litert ابتدا اجرا می‌شود (فایل‌های DLL را به صورت خودکار ثبت می‌کند)؛ برای فراخوانی‌کننده‌های غیر پایتون، setupvars.bat را اجرا کنید یا <openvino>/libs را به PATH اضافه کنید.
نسخه ویندوز: LNK2001 fixed_address_empty_string ، C2491 dllimport ، Python 3.12+ fails محدودیت نسخه Protobuf ABI / Python — به ci/build_pip_package_with_bazel_windows.ps1 مراجعه کنید؛ نسخه‌های ویندوز به پایتون ۳.۱۱ نیاز دارند.

محدودیت‌ها

فقط دستگاه NPU از طریق مسیر ارسال OpenVINO پشتیبانی می‌شود. برای استنتاج CPU، فقط از HardwareAccelerator.CPU (XNNPACK) استفاده کنید.

مراحل بعدی

  1. با راهنمای واحد پردازش عصبی یکپارچه شروع کنید: شتاب‌دهی NPU با LiteRT
  2. مراحل تبدیل و استقرار را در آنجا دنبال کنید و در صورت لزوم، کوالکام را انتخاب کنید.
  3. برای LLMها، به اجرای LLMها روی NPU با استفاده از LiteRT-LM مراجعه کنید.