TF Lite Delegate: nó là gì, delegate GPU và NNAPI

Tác giả: IT Sectr Đã đăng: 2026-07-18 Thời gian đọc: 10 phút

TF Lite Delegate là một thành phần của TensorFlow Lite giúp chuyển hướng thực thi các thao tác mạng nơ-ron sang phần cứng chuyên dụng: GPU, NPU, DSP hoặc CPU được tối ưu hóa. Nếu không có delegate, mô hình chạy trên CPU ở chế độ tương thích đầy đủ — chậm nhưng có thể dự đoán được. Delegate tăng tốc suy luận lên 3–10 lần tùy thuộc vào chip và mô hình. Theo TensorFlow, 2025, delegate GPU và NNAPI giảm độ trễ suy luận 60–90% mà không mất độ chính xác đáng kể.

Những Điểm Chính

  • TF Lite Delegate — lớp tăng tốc phần cứng cho mô hình TensorFlow Lite
  • GPU Delegate — tăng tốc các thao tác dấu phẩy động qua OpenGL/Metal
  • NNAPI Delegate — sử dụng Android Neural Networks API cho NPU và DSP
  • XNNPACK Delegate — tối ưu hóa CPU qua lệnh SIMD (ARM NEON, SSE)
  • Core ML Delegate — tích hợp gốc với Apple Neural Engine trên iOS

TF Lite Delegate là gì: kiến trúc và nguyên lý hoạt động

TF Lite Delegate là một bộ chuyển đổi phần mềm giữa TensorFlow Lite Runtime và bộ tăng tốc phần cứng của thiết bị. Delegate chặn các thao tác đồ thị của mô hình (tích chập, gộp, nhân ma trận) và thực thi chúng trên một đơn vị tính toán chuyên dụng thay vì CPU. Nếu delegate không hỗ trợ một thao tác cụ thể, nó sẽ chạy trên CPU — đây được gọi là ủy quyền một phần.

Kiến trúc TF Lite Delegate được xây dựng dựa trên giao diện SimpleDelegate API và cấu trúc TfLiteDelegate trong C++. Mỗi delegate triển khai các phương thức ủy quyền nút đồ thị, cấp phát bộ nhớ và thực thi trên thiết bị đích. Nhà phát triển kết nối delegate qua Interpreter::ModifyGraphWithDelegate trước khi gọi Invoke. Theo Hướng dẫn TensorFlow, delegate được áp dụng tự động cho tất cả các thao tác được hỗ trợ của mô hình.

Kiểm tra tương thích là bước bắt buộc. Không phải tất cả thao tác đều được mọi delegate hỗ trợ. TensorFlow Lite cung cấp công cụ Delegation Compatibility Check: chạy mô hình với delegate và kiểm tra xem có bao nhiêu thao tác (ops) được ủy quyền. Nếu dưới 80% được ủy quyền, hãy cân nhắc chọn delegate khác hoặc giữ CPU. Theo TensorFlow (2025), GPU Delegate hỗ trợ 45 thao tác, NNAPI — 60+.

Trong các dự án IT Sectr, chúng tôi sử dụng delegate GPU cho iOS và XNNPACK cho Android với xác minh tương thích tích hợp: mô hình được kiểm tra trên tất cả delegate, chọn delegate nhanh nhất với mức độ ủy quyền hoàn chỉnh ít nhất 90%.

kotlin
// Kết nối GPU Delegate trên Android
val gpuDelegate = GpuDelegate()
val options = Interpreter.Options().apply {
    addDelegate(gpuDelegate)
    setNumThreads(4)
}
val interpreter = Interpreter(modelBuffer, options)
interpreter.run(input, output)
gpuDelegate.close()

Kiểm tra các thao tác đã ủy quyền — kiểm soát tương thích qua Interpreter. Theo mặc định, delegate chấp nhận tất cả thao tác mà nó hỗ trợ. Để gỡ lỗi, hãy sử dụng ghi nhật ký số lượng nút đã ủy quyền. Nếu mô hình chứa thao tác tùy chỉnh (custom ops), delegate không tăng tốc chúng nhưng cũng không làm hỏng — chúng chạy trên CPU.

kotlin
// Kiểm tra số lượng thao tác đã ủy quyền
val delegateCount = interpreter.getDelegateOpsCount(gpuDelegate)
val totalNodes = interpreter.getNodesCount()
Log.d("TFLite", "Đã ủy quyền: $delegateCount / $totalNodes")
if (delegateCount < totalNodes * 0.8) {
    // Ngưỡng 80% — chọn delegate khác
}

GPU Delegate: tăng tốc trên bộ xử lý đồ họa

GPU Delegate là delegate TensorFlow Lite để chạy mô hình trên GPU qua OpenGL ES 3.1+ (Android) hoặc Metal (iOS). Bộ xử lý đồ họa được tối ưu hóa cho các thao tác ma trận song song — Core ML và mạng nơ-ron tích chập (CNN) được hưởng lợi nhiều nhất. GPU Delegate giảm độ trễ suy luận 4–8 lần cho các mô hình như MobileNet, EfficientNet, Inception.

Hạn chế của GPU Delegate: không hỗ trợ tất cả thao tác (chỉ 45 trong số ~120 trong TF Lite), yêu cầu OpenGL ES 3.1 hoặc Metal, tiêu thụ nhiều điện hơn CPU. GPU không hiệu quả cho kích thước lô > 1 trong các kịch bản di động. Theo điểm chuẩn TensorFlow (2025), trên Pixel 8 với GPU Adreno 740, MobileNetV2 chạy trong 4,2 ms trên GPU so với 18,7 ms trên CPU — tăng tốc 4,4 lần.

Cấu hình GPU Delegate bao gồm lựa chọn độ chính xác: float16 giảm độ chính xác nhưng tăng tốc suy luận 30–40% mà không giảm chất lượng đáng kể (đối với hầu hết tác vụ). Bật allow_precision_loss=true để có hiệu suất GPU tối đa. Đối với tác vụ độ chính xác cao (y tế, tài chính), hãy sử dụng float32.

kotlin
// GPU Delegate với tối ưu hóa độ chính xác
val gpuOptions = GpuDelegateFactory.Options().apply {
    isPrecisionLossAllowed = true
    inferencePreference = GpuDelegateFactory.Options.InferencePreference.SUSTAINED_SPEED
}
val delegate = GpuDelegateFactory.create(gpuOptions)

GPU Delegate trên iOS sử dụng Metal Performance Shaders qua Metal Delegate. Trên iOS, delegate hoạt động qua delegate Core ML cho Apple Neural Engine hoặc Metal trực tiếp. Apple A17 Pro chạy MobileNetV2 trong 1,3 ms — nhanh hơn 6 lần so với CPU. Metal delegate khả dụng từ iOS 12 và hỗ trợ tất cả thiết bị có chip A7+.

NNAPI Delegate: mạng nơ-ron trên Android qua Neural Networks API

NNAPI Delegate (Android Neural Networks API) là delegate TF Lite sử dụng tăng tốc phần cứng qua Android NN HAL (Lớp trừu tượng hóa phần cứng). NNAPI chuyển hướng thao tác mô hình đến NPU, DSP hoặc GPU tùy theo trình điều khiển thiết bị khả dụng. Được hỗ trợ trên Android 8.1+ (API 27+) và là delegate được khuyến nghị mặc định cho Android.

Lợi thế của NNAPI — tự động chọn bộ tăng tốc. Nếu thiết bị có NPU (Qualcomm Hexagon, MediaTek APU, Samsung NPU), NNAPI ủy quyền thao tác cho nó. Nếu không có NPU — sang GPU qua OpenCL. Nếu GPU cũng không được hỗ trợ — sang CPU với tối ưu hóa DSP. Nhà phát triển không chỉ định bộ tăng tốc cụ thể — NNAPI chọn tối ưu nhất. Theo Google I/O 2024, delegate NNAPI trên Snapdragon 8 Gen 3 tăng tốc mô hình LLM lên 12 lần.

Hạn chế của NNAPI: hỗ trợ không đồng đều trên các thiết bị khác nhau. Thiết bị cũ (Android 8.1) có bộ trình điều khiển hạn chế. Huawei với Kirin không hỗ trợ NNAPI qua Google Services — hãy sử dụng GPU Delegate. Để đảm bảo tương thích, Google khuyến nghị NNAPI Delegate là lựa chọn đầu tiên, với dự phòng sang GPU hoặc XNNPACK.

kotlin
// NNAPI Delegate với dự phòng CPU
val nnApiOptions = NnApiDelegate.Options().apply {
    acceleratorName = null // null = tự động chọn
    allowFp16 = true
    executionPreference = NnApiDelegate.ExecutionPreference.SUSTAINED_SPEED
}
val delegate = NnApiDelegate(nnApiOptions)
val interpreter = Interpreter(model, Interpreter.Options().apply {
    addDelegate(delegate)
    setNumThreads(4)
})

Tên bộ tăng tốc NNAPI — tham số để chọn bộ tăng tốc rõ ràng. Nếu truyền null, NNAPI tự động chọn. Để kiểm tra, hãy chỉ định cụ thể: "qti", "google-edgetpu", "mediatek". Danh sách bộ tăng tốc khả dụng được xuất qua NnApiDelegate.getAvailableAccelerators(). Trong sản xuất, hãy sử dụng tự động chọn với ngưỡng tương thích.

XNNPACK Delegate: tối ưu hóa CPU qua SIMD

XNNPACK Delegate là delegate TensorFlow Lite để thực thi CPU tối ưu hóa qua lệnh SIMD (ARM NEON, SSE, AVX). XNNPACK không yêu cầu GPU hay NPU — nó là delegate CPU thuần túy, nhưng với khả năng tăng tốc 2–4 lần nhờ SIMD, hợp nhất toán tử, tìm nạp trước bộ nhớ và suy luận lượng tử hóa (INT8). Lý tưởng cho thiết bị không có NPU chuyên dụng hoặc khi cần tương thích đảm bảo.

XNNPACK được Google phát triển làm delegate TF Lite mặc định cho CPU (được bao gồm trong TFLite Runtime theo mặc định). Nó hỗ trợ 90+ thao tác — nhiều hơn GPU hay NNAPI. XNNPACK đặc biệt hiệu quả cho mô hình lượng tử hóa (INT8, INT16): thao tác chạy nhanh hơn 2–3 lần so với phiên bản float32. Theo điểm chuẩn Google (2025), XNNPACK tăng tốc INT8 MobileNetV2 gấp 2,8 lần so với CPU cơ sở.

XNNPACK so với GPU: trên thiết bị không có NPU, XNNPACK thường nhanh hơn GPU Delegate cho lô nhỏ (1–4) — GPU có chi phí truyền dữ liệu giữa CPU và GPU. XNNPACK hoạt động trong cùng không gian địa chỉ CPU — không sao chép bộ nhớ. Đối với mô hình đến 5MB, XNNPACK có thể nhanh hơn GPU. Đối với mô hình CNN lớn, GPU thắng nhờ song song hóa.

kotlin
// XNNPACK Delegate được bật mặc định trong TFLite 2.18+
// Sử dụng rõ ràng qua XnnpackDelegate
val xnnpackOptions = XnnpackDelegate.Options().apply {
    numThreads = 4
    flags = XnnpackDelegate.Flags.USE_XNNPACK
}
val delegate = XnnpackDelegate(xnnpackOptions)
val interpreter = Interpreter(modelBuffer, Interpreter.Options().apply {
    addDelegate(delegate)
})

Cờ XNNPACK: USE_XNNPACK — buộc bật delegate, FLUSH_TO_ZERO — xử lý số không chuẩn hóa để tăng tốc, ENABLE_XNNPACK_SHAPES — kích thước đầu vào động. Để tương thích tối đa, hãy sử dụng tùy chọn mặc định. Nếu xảy ra lỗi trên thiết bị cũ, hãy tắt XNNPACK — mô hình vẫn chạy trên CPU nhưng chậm hơn.

Core ML và Metal Delegate: tăng tốc trên iOS

Core ML Delegate là delegate TensorFlow Lite cho iOS sử dụng Apple Core ML Framework. Core ML chuyển đổi mô hình TF Lite sang định dạng .mlmodel và thực thi trên Apple Neural Engine (ANE), GPU (Metal) hoặc CPU. Apple A17 Pro và M3 có Neural Engine chuyên dụng mà Core ML tự động sử dụng. Core ML Delegate tăng tốc suy luận 5–10 lần so với CPU trên thiết bị iOS hiện đại.

Core ML trên iOS hỗ trợ flex delegate (ủy quyền động các thao tác khả dụng cho Core ML) và chuyển đổi toàn bộ mô hình (chuyển đổi toàn bộ mô hình sang .mlmodel). Apple khuyến nghị flex delegate — nhanh hơn vì hoạt động tại thời điểm chạy mà không cần chuyển đổi trước. Core ML Delegate hỗ trợ mô hình float32, float16 và lượng tử hóa (INT8).

Metal Delegate là delegate cấp thấp hơn hoạt động trực tiếp với Metal Performance Shaders. Sử dụng Metal khi Core ML không hỗ trợ thao tác cụ thể. Metal Delegate cung cấp kiểm soát tối đa GPU nhưng yêu cầu nhiều mã hơn. Theo Apple (WWDC 2024), Metal Delegate cho mô hình Swift gốc có thể nhanh hơn 15–20% so với Core ML do không có chi phí chuyển đổi.

swift
// Core ML Delegate trên iOS qua TFLite Swift API
import TensorFlowLite

let coreMLDelegate = CoreMLDelegate()
var options = InterpreterOptions()
options.addDelegate(coreMLDelegate)

let interpreter = try Interpreter(modelPath: modelPath, options: options)
try interpreter.invoke(at: 0)

Lựa chọn giữa Core ML và Metal: Core ML cho sản xuất, Metal cho các trường hợp đặc biệt. Core ML tự động quản lý bộ nhớ NE, hỗ trợ dự phòng CPU (fallback) và không yêu cầu chuyển đổi thủ công. Metal cung cấp kiểm soát bộ đệm và phù hợp cho thao tác tùy chỉnh. Trong các dự án IT Sectr, chúng tôi sử dụng Core ML Delegate cho tất cả mô hình iOS và chỉ sử dụng Metal cho tác vụ phân tích video thời gian thực.

Cách chọn delegate cho dự án của bạn

Chọn TF Lite Delegate phụ thuộc vào nền tảng mục tiêu, mô hình và yêu cầu độ trễ. Không có delegate tốt nhất phổ quát — mỗi loại có điểm mạnh và điểm yếu. Chiến lược tối ưu: kiểm tra tất cả delegate khả dụng trên thiết bị mục tiêu và chọn delegate nhanh tối thiểu — không phải nhanh nhất, mà là đủ nhanh tối thiểu.

DelegateNền tảngTăng tốcTương thích
GPUAndroid, iOS4–8x45 thao tác
NNAPIAndroid 8.1+3–12x60+ thao tác
XNNPACKAndroid, iOS2–4x90+ thao tác
Core MLiOS 12+5–10x50+ thao tác

Khuyến nghị lựa chọn: cho Android có NPU (Snapdragon 8 Gen 2+, Dimensity 9000+) — NNAPI Delegate. Cho Android không có NPU — XNNPACK Delegate (mặc định). Cho iOS — Core ML Delegate. Cho dự án đa nền tảng, sử dụng chiến lược: NNAPI trên Android, Core ML trên iOS, XNNPACK làm dự phòng. GPU Delegate — khi NNAPI không khả dụng và XNNPACK không đủ nhanh.

Kiểm tra độ trễ là bước bắt buộc trong lựa chọn. Đo suy luận ở nhiệt độ tối thiểu (thiết bị nguội) và sau 5 phút hoạt động liên tục (điều tiết nhiệt). GPU và NNAPI có thể giảm hiệu suất khi nóng. XNNPACK (CPU) ít bị ảnh hưởng hơn. Sử dụng TensorFlow Lite Benchmark Tool để kiểm tra tự động tất cả delegate trên thiết bị của bạn.

kotlin
// Chiến lược chọn delegate
fun selectDelegate(): TfLiteDelegate {
    return when {
        NnApiDelegate.getAvailableAccelerators()?.isNotEmpty == true ->
            NnApiDelegate()
        GpuDelegateFactory.isGpuDelegateAvailable() ->
            GpuDelegate()
        else -> XnnpackDelegate()
    }
}

Chiến lược dự phòng — tải mô hình không có ngoại lệ: nếu delegate không được hỗ trợ, chạy trên CPU. TensorFlow Lite ném IllegalArgumentException khi lỗi tạo delegate. Bọc việc tạo delegate trong try-catch và chạy mô hình không có delegate khi có lỗi. AI chậm nhưng hoạt động còn tốt hơn lỗi cho người dùng.

Câu Hỏi Thường Gặp

TF Lite Delegate là gì một cách đơn giản?

TF Lite Delegate là bộ tăng tốc cho mạng nơ-ron trên thiết bị di động. Thay vì chạy mô hình chậm trên CPU, delegate gửi tính toán đến GPU hoặc chip nơ-ron chuyên dụng (NPU). Hãy tưởng tượng CPU là công cụ đa năng và delegate là máy chuyên dụng cho các tác vụ cụ thể: nó làm cùng việc nhưng nhanh hơn nhiều lần.

Delegate TF Lite nào nhanh nhất?

Delegate nhanh nhất phụ thuộc vào thiết bị. Trên thiết bị có Neural Engine (Apple A17 Pro, Snapdragon 8 Gen 3) — NNAPI (Android) hoặc Core ML (iOS) cung cấp tăng tốc tối đa lên đến 10–12x. GPU Delegate nhanh thứ hai. XNNPACK (CPU) là chậm nhất trong số delegate nhưng tương thích nhất. Trên thiết bị không có NPU, XNNPACK hoặc GPU có thể tối ưu.

TF Lite Delegate có hỗ trợ tất cả thao tác không?

Không, mỗi delegate hỗ trợ một tập thao tác giới hạn. GPU Delegate — 45 thao tác, NNAPI — 60+, XNNPACK — 90+. Thao tác không được hỗ trợ chạy trên CPU (ủy quyền một phần). Đối với thao tác tùy chỉnh (custom ops), delegate không được áp dụng. Trước khi sử dụng, kiểm tra tương thích qua getDelegateOpsCount — nếu dưới 80% nút được ủy quyền, hãy chọn delegate khác.

Cách thiết lập TF Lite Delegate trên Android?

Thêm phụ thuộc trong build.gradle: implementation 'org.tensorflow:tensorflow-lite-gpu-delegate:+' hoặc 'org.tensorflow:tensorflow-lite:x.x.x' (XNNPACK được tích hợp sẵn). Tạo delegate (GpuDelegate(), NnApiDelegate(), XnnpackDelegate()) và truyền vào Interpreter.Options.addDelegate(). Chạy trình thông dịch — delegate được áp dụng tự động. Sau khi thực thi, đóng delegate qua close().

Có thể sử dụng nhiều delegate cùng lúc không?

Có, TF Lite hỗ trợ nhiều delegate — chúng được áp dụng tuần tự. Trình thông dịch thử ủy quyền thao tác cho delegate đầu tiên, sau đó delegate thứ hai, và cứ thế. Nếu không delegate nào hỗ trợ thao tác, nó chạy trên CPU. Điều này hữu ích cho dự phòng: đầu tiên NNAPI, sau đó GPU, sau đó XNNPACK. Thứ tự thêm ảnh hưởng đến ưu tiên.

Tóm tắt

  • TF Lite Delegate — bộ tăng tốc phần cứng cho mô hình TensorFlow Lite trên thiết bị di động
  • GPU Delegate — tăng tốc qua OpenGL ES (Android) hoặc Metal (iOS), nhanh hơn CPU 4–8x
  • NNAPI Delegate — qua Android Neural Networks API, sử dụng NPU/DSP/GPU, 3–12x
  • XNNPACK Delegate — tối ưu hóa CPU qua SIMD, 2–4x, tương thích tối đa (90+ thao tác)
  • Core ML Delegate — tăng tốc iOS qua Neural Engine và Metal, 5–10x
  • Chọn delegate — kiểm tra trên thiết bị mục tiêu, sử dụng dự phòng CPU
  • Ủy quyền một phần — thao tác không được hỗ trợ tự động chạy trên CPU

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm