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) استفاده کنید.

رابط برنامه‌نویسی کاربردی سی‌پلاس‌پلاس

پیش‌نیازها و تنظیمات ساخت

پیش‌نیازهای ساخت:

  • ویژوال استودیو ۲۰۲۲ یا بالاتر (ابزارهای توسعه ++C باید نصب شده باشند).
  • git: گیت را از https://git-scm.com/install/ نصب کنید. مطمئن شوید که C:\Program Files\Git\bin and C:\Program Files\Git\cmd در متغیر محیطی PATH سیستم شما گنجانده شده‌اند تا به bash.exe و git.exe اجازه داده شود تا توسط فرآیندهای ساخت LiteRT/LiteRT-LM پیدا شوند.
  • bazelisk: bazelisk را نصب کنید و مکان آن را در متغیر محیطی PATH سیستم خود قرار دهید: https://bazel.build/install/bazelisk.
  • Cmake: نسخه ۴.۳.۰ یا بالاتر Cmake را از https://cmake.org/download/ نصب کنید و مطمئن شوید که Cmake در PATH سیستم شما موجود است.
  • پایتون: مطمئن شوید که پایتون ۳.۱۱ یا بالاتر نصب شده است و فایل python.exe در مسیر (PATH) شما قرار دارد.
  • تنظیمات ویندوز: حالت توسعه‌دهنده را در تنظیمات ویندوز فعال کنید.

ساخت ابزارها و افزونه‌های LiteRT برای Intel NPU

برای اجرای مدل‌ها روی Intel NPU با LiteRT، لازم است که آن‌ها با استفاده از افزونه کامپایلر LiteRT Intel OpenVINO کامپایل شوند؛ علاوه بر این، هر مدل کامپایل شده‌ای که برای اجرا روی Intel NPU در نظر گرفته شده است، باید به افزونه ارسال LiteRT Intel OpenVINO واگذار شود.

مکانیسمی که LiteRT از طریق آن این افزونه‌ها را فراخوانی می‌کند، متعاقباً نشان داده شده است:

افزونه‌های LiteRT Intel

مراحل ساخت ابزارهای LiteRT و افزونه‌های Intel.

قبل از ساخت هرگونه فایل اجرایی یا کتابخانه‌ای از LiteRT، یک دایرکتوری محلی، مثلاً C:\bzl، ایجاد کنید. فایل باینری خروجی ساخت از این دایرکتوری جمع‌آوری خواهد شد. افزونه‌ی اعزام Intel OpenVINO را بسازید.

# At the top-level directory of LiteRT repository
bazelisk --output_base=C:\bzl build //litert/vendors/intel_openvino/dispatch:LiteRtDispatch --config=windows

به عنوان یک روش جایگزین، می‌توانید افزونه dispatch را از مخزن LiteRT-LM با اضافه کردن پیشوند @litert به هدف، بسازید. این روش برای همه اهداف زیر از مخزن LiteRT مشابه است.

# At the top-level directory of LiteRT-LM repository
bazelisk --output_base=C:\bzl build @litert//litert/vendors/intel_openvino/dispatch:LiteRtDispatch --config=windows

ساخت افزونه کامپایلر Intel OpenVINO

bazelisk --output_base=C:\bzl build //litert/vendors/intel_openvino/compiler:LiteRtCompilerPlugin --config=windows

ابزار کامپایلر LiteRT Ahead-of-Time (AOT) را بسازید. برخی از ابزارهای LiteRT قبل از اجرای مدل‌ها روی Intel NPU، نیاز به کامپایل صریح AOT دارند. دستورالعمل ساخت ابزار کامپایلر LiteRT AOT:

bazelisk --output_base=C:\bzl build
//litert/tools:apply_plugin_main --config=windows

ساخت اجراکننده مدل LiteRT اجراکننده مدل LiteRT می‌تواند برای اجرای یک مدل روی Intel NPU، چه مدل از پیش کامپایل نشده و چه مدل کامپایل شده با AOT، استفاده شود. دستورالعمل ساخت اجراکننده مدل:

bazelisk --output_base=C:\bzl build //litert/tools:run_model --config=windows

ابزار ساخت مدل بنچمارک LiteRT ابزار بنچمارک مدل LiteRT می‌تواند برای سنجش عملکرد استنتاج یک مدل روی Intel NPU استفاده شود. اگر دستورالعمل ساخت ابزار بنچمارک:

bazelisk --output_base=C:\bzl build //litert/tools:benchmark_model --config=windows --define=protobuf_allow_msvc=true

ساخت ابزار بررسی عددی LiteRT

bazelisk --output_base=C:\bzl build //litert/tools:npu_numerics_check --config=windows

استفاده پیشرفته: با Intel OpenVINO SDK سفارشی ساخته شده است

سیستم ساخت LiteRT هنگام کامپایل کامپایلر و ارسال افزونه‌ها، Intel OpenVINO SDK از پیش ساخته شده را به طور خودکار دریافت می‌کند.

اگر پروژه شما به نسخه‌ای خاص یا سفارشی از Intel OpenVINO SDK نیاز دارد، قبل از شروع ساخت افزونه، این مراحل پیکربندی اضافی را انجام دهید:

  1. آخرین نسخه باینری OpenVINO برای ویندوز را از https://www.intel.com/content/www/us/en/download/753640/intel-distribution-of-openvino-toolkit.html دانلود کنید و آن را در دیسک محلی، مثلاً C:\Intel\intel_openvino ، استخراج کنید.
  2. مطمئن شوید که تنها دایرکتوری فرزند در این مسیر «openvino» نام دارد و شامل زیرشاخه‌هایی مانند «runtime» و «include» نیز می‌شود.
  3. به دایرکتوری ریشه مخزن LiteRT کلون شده در کنسول خود (خط فرمان یا PowerShell) بروید و متغیر OPENVINO_NATIVE_DIR را تنظیم کنید (مطمئن شوید که هیچ \`), for example: set OPENVINO_NATIVE_DIR=C:\Intel\intel_openvino`

گردآوری AOT از مدل‌های سفارشی

این بخش محیط را آماده می‌کند و کامپایل AOT مدل‌های سفارشی TFLite، PyTorch یا JAX را برای LiteRT انجام می‌دهد.

در طول فرآیند کامپایل مدل برای Intel NPU، LiteRT گراف مدل را در برابر عملگرهای پشتیبانی شده توسط افزونه کامپایلر LiteRT Intel OpenVINO اعتبارسنجی می‌کند. برای عملگرها یا زیرگراف‌هایی که با افزونه کامپایلر سازگار هستند، LiteRT هر زیرگراف را در یک DISPATCH_OP کامپایل می‌کند که متعاقباً جایگزین زیرگراف اصلی در گراف می‌شود. عملگرهایی که در مجموعه پشتیبانی شده توسط کامپایلر Intel OpenVINO گنجانده نشده‌اند، در گراف بدون تغییر باقی می‌مانند. در نتیجه، کامپایل AOT ممکن است یک مدل کاملاً تفویض شده یا جزئی تفویض شده را ارائه دهد. در اینجا مثالی از مدل کامپایل شده AOT کاملاً تفویض شده آورده شده است:

مدل LiteRT کاملاً تفویض‌شده

ابزار LiteRT apply_plugin_main (apply_plugin_main.exe) یک ابزار کامپایل AOT است که می‌توانید برای این منظور از آن استفاده کنید. نمونه‌ای از کاربرد این ابزار در پلتفرم اینتل:

.\apply_plugin_main.exe -cmd apply --model="C:\models\model.tflite" -o C:\models\model_aot.tflite --soc_model=PTL --soc_manufacturer "IntelOpenVINO" --libs C:\litertlibs  

لطفاً توجه داشته باشید که کامپایلر NPU پیش‌فرض که در توزیع باینری Intel OpenVINO SDK گنجانده شده است، برای Intel Core Ultra Series 2 و SoC های بعدی استفاده می‌شود. اگر مدلی برای NPU که در لیست پشتیبانی شده نیست کامپایل می‌شود، نوع کامپایلر باید صریحاً مشخص شود (اگرچه این مورد برای Intel Core Ultra 2 و بالاتر اختیاری است).

set IE_NPU_COMPILER_TYPE=PLUGIN

کامپایل JIT در مقابل AOT در برنامه شما

برای کامپایل مدل‌ها در برنامه LiteRT خودتان، دو رویکرد وجود دارد: کامپایل AOT که قبلاً معرفی کردیم، و کامپایل Just-in-time (JIT).

با کامپایل AOT، این حالت قبل از استقرار به صورت آفلاین کامپایل می‌شود و می‌تواند برای استفاده بعدی ذخیره شود - معمولاً زمانی استفاده می‌شود که کامپایل برای اجرا روی دستگاه بیش از حد به منابع نیاز دارد. نیازی نیست که روی همان دستگاهی که مدل را مستقر می‌کنید، انجام شود. نمونه‌ای از کامپایل AOT در کد شما:

void AotCompileForOpenVINO() {
  auto run = std::make_unique<ApplyPluginRun>();

  // Full pipeline: partition → compile → embed bytecode in .tflite
  run->cmd = ApplyPluginRun::Cmd::APPLY;

  // Path to directory containing LiteRtComplilerPlugin.dll
  run->lib_search_paths.push_back("/path/to/plugin/dir/");

  // Input model
  run->model.emplace("model.tflite");

  // Intel OpenVINO target
  run->soc_manufacturer.emplace("IntelOpenVINO");
  run->soc_models.push_back("PTL");  // or "LNL"

  // Output stream for the AOT-compiled model
  std::stringstream compiled_output;
  run->outs.push_back(compiled_output);

  // Run AOT compilation
  auto status = ApplyPlugin(std::move(run));
  // compiled_output now contains .tflite with embedded OpenVINO bytecode
}

روش استنتاج با یک مدل کامپایل شده توسط AOT:

void RunAotCompiledModel() {
  auto env = litert::Environment::Create({}).value();

  // Load AOT-compiled model, still must specify NPU accelerator
  auto compiled_model = litert::CompiledModel::Create(
      env, "model_aot.tflite", litert::HwAccelerators::kNpu).value();

  auto input_buffers = compiled_model.CreateInputBuffers().value();
  auto output_buffers = compiled_model.CreateOutputBuffers().value();

  input_buffers[0].Write<float>({/* data */});
  compiled_model.Run(input_buffers, output_buffers);
}

رویکرد جایگزین، کامپایل JIT مدل در زمان اجرا روی دستگاه است. این روش انعطاف‌پذیرتر است: فقط به یک فایل مدل backend-agnostic نیاز دارد.

// Create environment
auto env = litert::Environment::Create({}).value();

// JIT compile for NPU
auto compiled_model = litert::CompiledModel::Create(
    env, "model.tflite", litert::HwAccelerators::kNpu).value();

// Create I/O buffers
auto input_buffers = compiled_model.CreateInputBuffers().value();
auto output_buffers = compiled_model.CreateOutputBuffers().value();

// Fill inputs
input_buffers[0].Write<float>({/* input data */});

// Run inference
compiled_model.Run(input_buffers, output_buffers);

بنچمارک با benchmark_model

ابزار LiteRT benchmark_model (benchmark_model.exe) به طور خاص برای ارزیابی عملکرد یک مدل کامپایل شده توسط AOT در NPU طراحی شده است و می‌تواند برای مقایسه عملکرد در برابر CPU backend (XNNPack) در LiteRT مورد استفاده قرار گیرد. دستور نمونه برای ارزیابی عملکرد یک مدل کامپایل شده توسط AOT در Intel NPU:

.\benchmark_model.exe --graph=C:\models\model_aot.tflite --use_npu=true --compiler_plugin_library_path=C:\litertlib --dispatch_library_path=C:\litertlib --compiler_cache_path=C:\models

بررسی دقت با npu_numerics_check

ابزار npu_numerics_check برای تأیید دقت عددی یک مدل کامپایل شده توسط NPU در مقایسه با یک خط مبنا (معمولاً CPU backend، XNNPack) استفاده می‌شود. این مرحله برای اطمینان از اینکه تفویض اختیار به NPU انحرافات عددی غیرقابل قبولی را که می‌تواند بر کیفیت مدل تأثیر بگذارد، ایجاد نمی‌کند، بسیار مهم است.

این ابزار به مدل کامپایل شده توسط AOT نیاز دارد و خروجی‌های آن را با مدل اصلی و غیر تفویض شده که روی CPU اجرا می‌شود، مقایسه می‌کند.

.\npu_numerics_check.exe --npu_model=C:\models\model_aot.tflite --cpu_model=C:\models\model.tflite --dispatch_library_path=C:\litertlib

مراحل بعدی

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