NPU ของ Intel (OpenVino) ที่มี LiteRT

LiteRT รองรับ Intel OpenVino ผ่าน API CompiledModel สำหรับการคอมไพล์ AOT และการคอมไพล์ในอุปกรณ์

ตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์

Linux (x86_64)

Windows (x86_64)

หากต้องการสร้างจากซอร์ส คุณต้องใช้ Bazel 7.4.1 ขึ้นไปโดยใช้ Bazelisk หรือการสร้าง Docker แบบ Hermetic

SoC ที่รองรับ

แพลตฟอร์ม NPU ชื่อเวอร์ชัน ระบบปฏิบัติการ
Intel Core Ultra Series 2 NPU4000 Lunar Lake (LNL) Linux, Windows
Intel Core Ultra Series 3 NPU5010 Panther Lake (PTL) Linux, Windows

คู่มือเริ่มต้นฉบับย่อ

1. ติดตั้งไดรเวอร์ NPU

ดูการตั้งค่า NPU ใน Linux หรือ การตั้งค่า NPU ใน Windows ข้ามขั้นตอนนี้หากคุณต้องการใช้ AOT เท่านั้น

คุณต้องใช้ไดรเวอร์ NPU ในระบบที่เรียกใช้ โมเดลในฮาร์ดแวร์ NPU เท่านั้น ระบบที่สร้าง AOT อย่างเดียวสามารถข้ามขั้นตอนนี้ได้

หมายเหตุ: ai-edge-litert-sdk-intel-nightly จะปักหมุดวงล้อ OpenVINO Nightly ที่ตรงกันตามเวอร์ชัน PEP 440 (เช่น openvino==2026.2.0.dev20260506) ดังนั้น pip จึงต้องใช้ --extra-index-url https://storage.openvinotoolkit.org/simple/wheels/nightly เพื่อค้นหาวงล้อดังกล่าว ใน Linux หากการตรวจหาอัตโนมัติของ distro เลือกไฟล์เก็บถาวรที่ไม่ถูกต้อง ให้ตั้งค่า LITERT_OV_OS_ID=ubuntu22 หรือ ubuntu24 ก่อน pip install

2. สร้างสภาพแวดล้อมเสมือนของ Python

ขอแนะนำให้แยกวงล้อ openvino Nightly ออกจากการติดตั้ง 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

3. ติดตั้งแพ็กเกจ 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 Nightly ที่ปักหมุดจากดัชนีของ OpenVINO พร้อมกับแพ็กเกจใน PyPI

4. ยืนยันการติดตั้ง

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 (Linux) หรือ openvino_intel_npu_compiler.dll (Windows) ซึ่งจำเป็นสำหรับ AOT
  • Available devices มี NPU ซึ่งยืนยันว่าได้ติดตั้งไดรเวอร์ NPU แล้วและ OpenVINO สามารถสื่อสารกับอุปกรณ์ได้ NPU จะไม่ปรากฏในระบบที่ใช้ AOT อย่างเดียว (ซึ่งไม่ได้ติดตั้งไดรเวอร์) และในระบบที่ไม่มีฮาร์ดแวร์ Intel NPU

5. คอมไพล์ AOT (ไม่บังคับ)

  • คอมไพล์ล่วงหน้า .tflite สำหรับเป้าหมาย Intel NPU ที่เฉพาะเจาะจง (PTL หรือ LNL) เพื่อให้รันไทม์ข้ามขั้นตอนปลั๊กอินคอมไพเลอร์
  • ไม่ จำเป็นต้องใช้ NPU จริงหรือไดรเวอร์ NPU แต่ต้องใช้ ai-edge-litert-nightly และ ai-edge-litert-sdk-intel-nightly
  • ระบบรองรับการคอมไพล์แบบข้ามระบบ: คอมไพล์แบบข้ามระบบในโฮสต์ Linux หรือ Windows แล้วส่ง .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)

6. เรียกใช้การอนุมาน NPU

LiteRT รองรับเส้นทางการอนุมาน 2 เส้นทางใน Intel NPU ดังนี้

  • JIT \- โหลด .tflite ดิบ โดยปลั๊กอินคอมไพเลอร์จะแบ่งพาร์ติชันและคอมไพล์ Op ที่รองรับสำหรับ NPU ในเวลา CompiledModel.from_file() เพิ่มเวลาในการตอบสนองในการเรียกใช้ครั้งแรก (แตกต่างกันไปตามโมเดล)
  • คอมไพล์ AOT \- โหลด <model>_IntelOpenVINO_<SoC>_apply_plugin.tflite ที่สร้างขึ้นในขั้นตอนที่ 4 ข้ามขั้นตอนการแบ่งพาร์ติชันและการคอมไพล์ในเวลาที่ใช้ในการโหลด

ข้อมูลโค้ดนี้ใช้ได้กับทั้ง 2 อย่าง

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 ใน Linux และ .dll ใน Windows)

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 แสดงว่าโมเดลทำงานใน XNNPACK CPU Fallback ไม่ใช่ใน NPU โปรดดูแถวการแก้ปัญหา JIT

7. เปรียบเทียบ

# 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 first คีย์ Signature ที่จะเรียกใช้
--use_cpu / --no_cpu เปิด สลับตัวเร่ง CPU / CPU Fallback
--use_gpu ปิด เปิดใช้ตัวเร่ง GPU
--use_npu ปิด เปิดใช้ตัวเร่ง Intel NPU
--require_full_delegation ปิด ล้มเหลวหากไม่ได้โหลดโมเดลไปยังตัวเร่งที่เลือกอย่างเต็มที่
--num_runs N 50 จำนวนการทำซ้ำการอนุมานที่กำหนดเวลา
--warmup_runs N 5 การทำซ้ำการวอร์มอัปที่ไม่ได้กำหนดเวลาไว้ก่อนการวัด
--num_threads N 1 จำนวนเธรด CPU
--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 จะจัดส่งปลั๊กอินคอมไพเลอร์สำหรับผู้ให้บริการที่ลงทะเบียนทุกราย (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/ จะโหลดเฉพาะปลั๊กอิน Intel เท่านั้น ระบบจะไม่แตะต้องปลั๊กอิน 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 จริง ให้ตรวจสอบสัญญาณทั้ง 2 รายการต่อไปนี้

  1. บันทึกมี Loading shared library: .../LiteRtDispatch_IntelOpenvino.{so,dll} ซึ่งหมายความว่าได้โหลดไลบรารีการส่ง Intel แล้ว (.so ใน Linux, .dll ใน Windows)
  2. model.is_fully_accelerated() แสดง True ซึ่งหมายความว่าได้โหลด Op ทั้งหมดไปยังตัวเร่งที่เลือกแล้ว

is_fully_accelerated() เพียงอย่างเดียวไม่ เพียงพอ หากไม่ได้โหลดไลบรารีการส่ง Op จะโหลดไปยัง XNNPACK/CPU อย่างเต็มที่ ไม่ใช่ NPU


การตั้งค่า NPU ใน Linux

หมายเหตุ: ข้ามส่วนนี้หากคุณต้องการใช้ AOT เท่านั้น เนื่องจากไม่จำเป็นต้องใช้ NPU จริง

ข้อมูล: ใช้ไดรเวอร์ NPU v1.32.1 (จับคู่กับ 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

จากนั้นเรียกใช้ข้อมูลโค้ดการติดตั้งและการยืนยันจาก คู่มือเริ่มต้นฉบับย่อ


การตั้งค่า NPU ใน Windows

หมายเหตุ: ข้ามส่วนนี้หากคุณต้องการใช้ AOT เท่านั้น เนื่องจากไม่จำเป็นต้องใช้ NPU จริง

  • ติดตั้งไดรเวอร์ Intel NPU (32.0.100.4724+) จาก ศูนย์ดาวน์โหลดของ Intel
  • ตรวจสอบว่าโปรแกรมจัดการอุปกรณ์แสดงรายการอุปกรณ์ NPU ในส่วนโปรเซสเซอร์ระบบประสาท (แสดงเป็น Intel(R) AI Boost หรือ Intel(R) NPU ขึ้นอยู่กับไดรเวอร์)
  • เรียกใช้ข้อมูลโค้ดการติดตั้งและการยืนยันจาก คู่มือเริ่มต้นฉบับย่อ โดยแทนที่ pip ด้วย python -m pip

ข้อมูล: import ai_edge_litert จะลงทะเบียนไดเรกทอรี DLL โดยอัตโนมัติโดยใช้ os.add_dll_directory() ดังนั้นสคริปต์ Python จึงไม่จำเป็นต้องตั้งค่า PATH สำหรับผู้ใช้ที่ไม่ใช่ Python ให้เรียกใช้ setupvars.bat หรือเพิ่ม <openvino>/libs ไว้ข้างหน้า PATH


สร้างจากซอร์ส

ใช้พร็อกซีอยู่ใช่ไหม ส่งออก http_proxy / https_proxy / no_proxy ก่อนเรียกใช้สคริปต์บิลด์ เนื่องจากสคริปต์จะส่งต่อข้อมูลเหล่านี้ไปยัง Docker และคอนเทนเนอร์

Linux (Docker, Hermetic)

cd LiteRT/docker_build && ./build_wheel_with_docker.sh

Windows (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 \- sdist ของผู้ให้บริการ
  • sdist ของ Intel มีขนาดประมาณ 5 KB ระบบจะดึงข้อมูลคอมไพเลอร์ NPU .so/.dll ในเวลา pip install ดังนั้น sdist เดียวกันจึงทำงานใน Linux และ Windows ได้

การทำ Unit Test

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 หากว่างเปล่า ให้ติดตั้งอีกครั้งโดยมีการเข้าถึงเครือข่าย หรือตั้งค่า LITERT_OV_OS_ID=ubuntu22/ubuntu24
JIT ทำงานใน CPU แทนที่จะเป็น NPU (ไม่มีบันทึก 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 (Linux) / openvino_intel_npu_compiler.dll (Windows) sdist ของ SDK จะคัดลอกคอมไพเลอร์ NPU ไปยัง openvino/libs/ เมื่อ import ai_edge_litert_sdk_intel ครั้งแรก หากระบบข้ามการคัดลอก (FS แบบอ่านอย่างเดียว, ไม่มี openvino) ให้ติดตั้ง ai-edge-litert-sdk-intel อีกครั้งหลังจากติดตั้ง openvino แล้ว จากนั้น import ai_edge_litert ในกระบวนการใหม่
Level0 pfnCreate2 result: ZE_RESULT_ERROR_UNSUPPORTED_FEATURE อัปเกรดไดรเวอร์ NPU เป็น v1.32.1 (Linux)
ไม่พบ /dev/accel/accel0 sudo dmesg | grep -i vpu เพื่อแก้ไขข้อบกพร่องของไดรเวอร์ และรีบูตหลังการติดตั้ง
สิทธิ์ถูกปฏิเสธใน NPU sudo gpasswd -a ${USER} render && newgrp render.
Windows: NPU ไม่อยู่ในตัวจัดการอุปกรณ์ ติดตั้งไดรเวอร์ NPU 32.0.100.4724+ จาก ศูนย์ดาวน์โหลดของ Intel
Windows: Failed to initialize Dispatch API / DLL หายไป ตรวจสอบว่า import ai_edge_litert ทำงานก่อน (ลงทะเบียนไดเรกทอรี DLL โดยอัตโนมัติ) สำหรับผู้เรียกที่ไม่ใช่ Python ให้เรียกใช้ setupvars.bat หรือเพิ่ม <openvino>/libs ไว้ข้างหน้า PATH
บิลด์ Windows: LNK2001 fixed_address_empty_string, C2491 dllimport, Python 3.12+ fails ข้อจำกัดเวอร์ชัน Protobuf ABI / Python - ดู ci/build_pip_package_with_bazel_windows.ps1 บิลด์ Windows ต้องใช้ Python 3.11

ข้อจำกัด

ระบบรองรับเฉพาะอุปกรณ์ NPU ผ่านเส้นทางการส่ง OpenVINO สำหรับการอนุมาน CPU ให้ใช้ HardwareAccelerator.CPU อย่างเดียว (XNNPACK)

ขั้นตอนถัดไป

  1. เริ่มต้นด้วยคู่มือ NPU แบบรวม: การเร่ง NPU ด้วย LiteRT
  2. ทำตามขั้นตอนการแปลงและการติดตั้งใช้งานที่นั่น โดยเลือก Qualcomm เมื่อมี
  3. สำหรับ LLM โปรดดู เรียกใช้ LLM ใน NPU โดยใช้ LiteRT-LM