Tăng tốc NPU bằng LiteRT

LiteRT cung cấp một giao diện hợp nhất để sử dụng Đơn vị xử lý thần kinh (NPU) mà không buộc bạn phải điều hướng các trình biên dịch, thời gian chạy hoặc phần phụ thuộc thư viện dành riêng cho nhà cung cấp. Việc sử dụng LiteRT để tăng tốc NPU giúp tăng hiệu suất cho việc suy luận theo thời gian thực và của mô hình lớn, đồng thời giảm thiểu việc sao chép bộ nhớ thông qua việc sử dụng bộ đệm phần cứng không sao chép.

Bắt đầu

Để bắt đầu, hãy xem hướng dẫn tổng quan về NPU:

  • Đối với các mô hình học máy cũ, hãy xem các phần sau để biết các bước chuyển đổi, biên dịch và triển khai.
  • Đối với Mô hình ngôn ngữ lớn (LLM), hãy sử dụng khung LiteRT-LM của chúng tôi:

Để biết ví dụ về cách triển khai LiteRT có hỗ trợ NPU, hãy tham khảo các ứng dụng minh hoạ sau:

Nhà cung cấp NPU

LiteRT hỗ trợ tính năng tăng tốc NPU với các nhà cung cấp sau:

Qualcomm AI Engine Direct

  • Đường dẫn thực thi biên dịch AOT và Trên thiết bị được hỗ trợ thông qua Compiled Model API.
  • Hãy xem phần Qualcomm AI Engine Direct để biết thông tin chi tiết về cách thiết lập.

MediaTek NeuroPilot

  • Các đường dẫn thực thi AOT và JIT được hỗ trợ thông qua Compiled Model API.
  • Hãy xem phần MediaTek NeuroPilot để biết thông tin chi tiết về cách thiết lập.

Chuyển đổi và biên dịch các mô hình cho NPU

Để sử dụng tính năng tăng tốc NPU, hãy chuyển đổi mô hình của bạn sang định dạng LiteRT và biên dịch cho SoC mục tiêu bằng Trình biên dịch AOT LiteRT. Trình biên dịch tạo ra một Gói AI, trong đó kết hợp mô hình đã biên dịch và cấu hình nhắm mục tiêu theo thiết bị.

Hãy sử dụng Sổ tay biên dịch AOT LiteRT để xem hướng dẫn toàn diện.

Triển khai bằng Gói AI của Play (AOT)

  1. Sao chép các gói AI đã tạo vào dự án Gradle của bạn trong ai_packs/.
  2. Thêm gói AI vào settings.gradle.kts bằng include(":ai_packs:your_pack").
  3. Thêm các thư viện thời gian chạy NPU (Qualcomm và MediaTek) và các mô-đun chuỗi vào dự án.
  4. Định cấu hình bundle.deviceTargetingConfig và thêm Gói AI vào assetPacks trong build.gradle.kts.
  5. Đặt minSdk = 31, ABI arm64-v8a và bật tính năng đóng gói JNI cũ cho các thư viện thời gian chạy Qualcomm.

Triển khai theo yêu cầu (AOT)

Khi bạn định cấu hình việc phân phối Gói AI, hãy chọn NPU trên các thiết bị có khả năng và quay lại GPU hoặc CPU khi cần:

val env = Environment.create(BuiltinNpuAcceleratorProvider(context))

val modelProvider = AiPackModelProvider(
    context, "my_model", "model/my_model.tflite") {
    if (NpuCompatibilityChecker.Qualcomm.isDeviceSupported())
      setOf(Accelerator.NPU) else setOf(Accelerator.CPU, Accelerator.GPU)
}
val mtkModelProvider = AiPackModelProvider(
    context, "my_model_mtk", "model/my_model.tflite") {
    if (NpuCompatibilityChecker.MediaTek.isDeviceSupported())
      setOf(Accelerator.NPU) else setOf(Accelerator.CPU, Accelerator.GPU)
}