TF Lite Delegate: nədir, GPU və NNAPI delegatları

Müəllif: IT Sectr Dərc olunub: 2026-07-18 Oxuma vaxtı: 10 dəq

TF Lite Delegate — TensorFlow Lite komponentidir, neyron şəbəkə əməliyyatlarının icrasını ixtisaslaşmış aparat təminatına yönləndirir: GPU, NPU, DSP və ya optimallaşdırılmış CPU. Delegate olmadan model CPU-da tam uyğunluq rejimində işləyir — yavaş, lakin proqnozlaşdırıla bilər. Delegate çip və modeldən asılı olaraq inferensı 3–10 dəfə sürətləndirir. TensorFlow, 2025 məlumatlarına görə, GPU və NNAPI delegatları inferens gecikməsini 60–90% azaldır və dəqiqlik əhəmiyyətli dərəcədə itirilmir.

Əsas məqamlar

  • TF Lite Delegate — TensorFlow Lite modelləri üçün aparat sürətləndirmə qatı
  • GPU Delegate — OpenGL/Metal vasitəsilə üzən nöqtə əməliyyatlarını sürətləndirir
  • NNAPI Delegate — NPU və DSP üçün Android Neural Networks API-dən istifadə edir
  • XNNPACK Delegate — SIMD təlimatları (ARM NEON, SSE) vasitəsilə CPU optimallaşdırması
  • Core ML Delegate — iOS-da Apple Neural Engine ilə yerli inteqrasiya

TF Lite Delegate nədir: arxitektura və iş prinsipi

TF Lite Delegate — TensorFlow Lite Runtime ilə cihazın aparat sürətləndiricisi arasında proqram adapteridir. Delegate model qrafının əməliyyatlarını (konvolyusiya, pooling, matris vurma) ələ keçirir və onları CPU əvəzinə ixtisaslaşmış hesablama qurğusunda yerinə yetirir. Əgər delegate konkret əməliyyatı dəstəkləmirsə, o, CPU-da icra olunur — buna partial delegation deyilir.

TF Lite Delegate arxitekturası SimpleDelegate API interfeysi və C++ dilində TfLiteDelegate strukturu ətrafında qurulur. Hər bir delegate qraf düyünlərinin həvalə edilməsi, yaddaşın ayrılması və hədəf cihazda icra üsullarını tətbiq edir. Tərtibatçı Invoke çağırışından əvvəl delegate-ni Interpreter::ModifyGraphWithDelegate vasitəsilə birləşdirir. TensorFlow Guide-a görə, delegate avtomatik olaraq modelin bütün dəstəklənən əməliyyatlarına tətbiq olunur.

Uyğunluğun yoxlanılması — məcburi mərhələdir. Bütün əməliyyatlar hər bir delegate tərəfindən dəstəklənmir. TensorFlow Lite Delegation Compatibility Check alətini təqdim edir: modeli delegate ilə işə salın və neçə əməliyyatın (ops) həvalə edildiyini yoxlayın. Əgər 80%-dən azdırsa — başqa delegate seçmək və ya CPU-da qalmaq daha yaxşıdır. TensorFlow (2025) məlumatlarına görə, GPU Delegate 45 əməliyyatı, NNAPI isə 60+ əməliyyatı dəstəkləyir.

IT Sectr layihələrində biz iOS üçün GPU delegatlarından və Android üçün XNNPACK-dən daxili uyğunluq yoxlaması ilə istifadə edirik: model bütün delegatlarda sınaqdan keçirilir, həvalə tamlığı ən azı 90% olan ən sürətli seçilir.

kotlin
// Android-də GPU Delegate qoşulması
val gpuDelegate = GpuDelegate()
val options = Interpreter.Options().apply {
    addDelegate(gpuDelegate)
    setNumThreads(4)
}
val interpreter = Interpreter(modelBuffer, options)
interpreter.run(input, output)
gpuDelegate.close()

Həvalə edilmiş əməliyyatların yoxlanılması — Interpreter vasitəsilə uyğunluğa nəzarət. Varsayılan olaraq, delegate dəstəklədiyi bütün əməliyyatları qəbul edir. Debug üçün həvalə edilmiş düyünlərin sayının jurnallaşdırılmasından istifadə edin. Model fərdi əməliyyatlar (custom ops) ehtiva edərsə, delegate onları sürətləndirmir, lakin pozmur da — onlar CPU-da icra olunur.

kotlin
// Həvalə edilmiş əməliyyatların sayını yoxlayın
val delegateCount = interpreter.getDelegateOpsCount(gpuDelegate)
val totalNodes = interpreter.getNodesCount()
Log.d("TFLite", "Həvalə edildi: $delegateCount / $totalNodes")
if (delegateCount < totalNodes * 0.8) {
    // 80% həddi — başqa delegate seçin
}

GPU Delegate: qrafik prosessorda sürətləndirmə

GPU Delegate — modeli OpenGL ES 3.1+ (Android) və ya Metal (iOS) vasitəsilə GPU-da icra etmək üçün TensorFlow Lite delegatı. Qrafik prosessorlar paralel matris əməliyyatları üçün optimallaşdırılıb — Core ML və konvolyusiya neyron şəbəkələri (CNN) ən böyük artımı əldə edir. GPU Delegate MobileNet, EfficientNet, Inception kimi modellər üçün inferens gecikməsini 4–8 dəfə azaldır.

GPU Delegate məhdudiyyətləri: bütün əməliyyatları dəstəkləmir (TF Lite-da ~120-dən yalnız 45-i), OpenGL ES 3.1 və ya Metal tələb edir, CPU-dan daha çox enerji sərf edir. GPU mobil ssenarilərdə batch size > 1 üçün səmərəsizdir. TensorFlow benchmarklarına (2025) görə, Pixel 8 cihazında Adreno 740 GPU ilə MobileNetV2 modeli GPU-da 4.2 ms, CPU-da 18.7 ms işləyir — 4.4x sürətlənmə.

GPU Delegate quraşdırılması dəqiqlik seçimini əhatə edir: float16 dəqiqliyi azaldır, lakin inferensı 30–40% sürətləndirir və keyfiyyət nəzərəçarpacaq dərəcədə itmir (əksər tapşırıqlar üçün). GPU-da maksimum performans üçün allow_precision_loss=true aktiv edin. Yüksək dəqiqlik tələb edən tapşırıqlar üçün (tibb, maliyyə) float32 istifadə edin.

kotlin
// Dəqiqlik optimallaşdırması ilə GPU Delegate
val gpuOptions = GpuDelegateFactory.Options().apply {
    isPrecisionLossAllowed = true
    inferencePreference = GpuDelegateFactory.Options.InferencePreference.SUSTAINED_SPEED
}
val delegate = GpuDelegateFactory.create(gpuOptions)

iOS-da GPU Delegate Metal Performance Shaders-dən Metal Delegate vasitəsilə istifadə edir. iOS-da delegate Apple Neural Engine üçün Core ML delegate və ya birbaşa Metal vasitəsilə işləyir. Apple A17 Pro MobileNetV2-ni 1.3 ms-də icra edir — CPU-dan 6 dəfə sürətli. Metal delegate iOS 12-dən etibarən mövcuddur və A7+ çipi olan bütün cihazları dəstəkləyir.

NNAPI Delegate: Android-də Neural Networks API vasitəsilə neyron şəbəkələr

NNAPI Delegate (Android Neural Networks API) — Android NN HAL (Hardware Abstraction Layer) vasitəsilə aparat sürətləndirməsindən istifadə edən TF Lite delegatı. NNAPI model əməliyyatlarını cihazın mövcud sürücülərindən asılı olaraq NPU, DSP və ya GPU-ya yönləndirir. Android 8.1+ (API 27+) dəstəklənir və Android üçün tövsiyə olunan defolt delegatdır.

NNAPI-nin üstünlüyü — avtomatik sürətləndirici seçimi. Cihazda NPU varsa (Qualcomm Hexagon, MediaTek APU, Samsung NPU), NNAPI əməliyyatları ona həvalə edir. NPU yoxdursa — OpenCL vasitəsilə GPU-ya. GPU da dəstəkləmirsə — DSP optimallaşdırmaları ilə CPU-ya. Tərtibatçı konkret sürətləndiricini göstərmir — NNAPI optimal olanı seçir. Google I/O 2024 məlumatlarına görə, Snapdragon 8 Gen 3-də NNAPI delegate LLM modellərini 12 dəfə sürətləndirir.

NNAPI məhdudiyyətləri: müxtəlif cihazlarda qeyri-bərabər dəstək. Köhnə cihazlar (Android 8.1) məhdud sürücü dəstinə malikdir. Kirin prosessorlu Huawei Google Services vasitəsilə NNAPI-ni dəstəkləmir — GPU Delegate istifadə edin. Zəmanətli uyğunluq üçün Google NNAPI Delegate-i ilk seçim kimi, GPU və ya XNNPACK-a fallback ilə tövsiyə edir.

kotlin
// CPU fallback ilə NNAPI Delegate
val nnApiOptions = NnApiDelegate.Options().apply {
    acceleratorName = null // null = avtomatik seçim
    allowFp16 = true
    executionPreference = NnApiDelegate.ExecutionPreference.SUSTAINED_SPEED
}
val delegate = NnApiDelegate(nnApiOptions)
val interpreter = Interpreter(model, Interpreter.Options().apply {
    addDelegate(delegate)
    setNumThreads(4)
})

NNAPI Accelerator Name — sürətləndiricinin açıq seçimi üçün parametr. null ötürülərsə, NNAPI avtomatik seçir. Test üçün konkret göstərin: "qti", "google-edgetpu", "mediatek". Mövcud sürətləndiricilərin siyahısı NnApiDelegate.getAvailableAccelerators() vasitəsilə göstərilir. Production-da uyğunluq həddi ilə avtoseçimdən istifadə edin.

XNNPACK Delegate: SIMD vasitəsilə CPU optimallaşdırması

XNNPACK Delegate — SIMD təlimatları (ARM NEON, SSE, AVX) vasitəsilə optimallaşdırılmış CPU icrası üçün TensorFlow Lite delegatı. XNNPACK GPU və ya NPU tələb etmir — bu təmiz CPU delegatıdır, lakin SIMD, operator fusion, memory pre-fetching və quantized inference (INT8) sayəsində 2–4x sürətlənmə ilə. Ayrılmış NPU olmayan cihazlar və ya zəmanətli uyğunluq lazım olduqda idealdır.

XNNPACK Google tərəfindən CPU üçün defolt TF Lite delegatı kimi hazırlanmışdır (TFLite Runtime-a defolt olaraq daxildir). 90+ əməliyyatı dəstəkləyir — GPU və ya NNAPI-dən çox. XNNPACK kvantlaşdırılmış modellər (INT8, INT16) üçün xüsusilə səmərəlidir: əməliyyatlar float32 versiyasından 2–3 dəfə sürətli işləyir. Google benchmarklarına (2025) görə, XNNPACK INT8 MobileNetV2-ni baza CPU-ya nisbətən 2.8x sürətləndirir.

XNNPACK vs GPU: NPU olmayan cihazlarda XNNPACK çox vaxt kiçik batch (1–4) üçün GPU Delegate-dən daha sürətlidir — GPU-nun CPU ilə GPU arasında məlumat ötürmə əlavə yükü var. XNNPACK eyni CPU ünvan məkanında işləyir — yaddaş kopyalanması yoxdur. 5MB-dək modellər üçün XNNPACK GPU-dan daha sürətli ola bilər. Böyük CNN modelləri üçün GPU paralellik hesabına qalib gəlir.

kotlin
// XNNPACK Delegate TFLite 2.18+-da defolt olaraq aktivdir
// XnnpackDelegate vasitəsilə açıq istifadə
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)
})

XNNPACK Flags: USE_XNNPACK — məcburi delegate aktivləşdirmə, FLUSH_TO_ZERO — sürətləndirmə üçün denormalizə olunmuş ədədlərin işlənməsi, ENABLE_XNNPACK_SHAPES — dinamik giriş ölçüləri. Maksimum uyğunluq üçün defolt seçimlərdən istifadə edin. Köhnə cihazlarda səhvlər yaranarsa, XNNPACK-i söndürün — model hələ də CPU-da işləyir, lakin daha yavaş.

Core ML və Metal Delegate: iOS-da sürətləndirmə

Core ML Delegate — Apple Core ML Framework-dən istifadə edən iOS üçün TensorFlow Lite delegatı. Core ML TF Lite modelini .mlmodel formatına çevirir və Apple Neural Engine (ANE), GPU (Metal) və ya CPU-da icra edir. Apple A17 Pro və M3 ayrılmış Neural Engine-ə malikdir və Core ML onu avtomatik istifadə edir. Core ML Delegate müasir iOS cihazlarında inferensı CPU-ya nisbətən 5–10 dəfə sürətləndirir.

iOS-da Core ML flex delegate (Core ML üçün əlçatan əməliyyatların dinamik həvaləsi) və full model conversion (bütün modelin .mlmodel-ə çevrilməsi) dəstəkləyir. Apple flex delegate-i tövsiyə edir — daha sürətlidir, çünki əvvəlcədən çevirmə olmadan icra zamanı işləyir. Core ML Delegate float32, float16 və kvantlaşdırılmış modelləri (INT8) dəstəkləyir.

Metal Delegate — birbaşa Metal Performance Shaders ilə işləyən aşağı səviyyəli delegatdır. Core ML ayrı-ayrı əməliyyatları dəstəkləmədikdə Metal-dan istifadə edin. Metal Delegate GPU üzərində maksimum nəzarət verir, lakin daha çox kod tələb edir. Apple (WWDC 2024) məlumatlarına görə, yerli Swift modelləri üçün Metal Delegate çevirmə əlavə yükü olmadığı üçün Core ML-dən 15–20% daha sürətli ola bilər.

swift
// TFLite Swift API vasitəsilə iOS-da Core ML Delegate
import TensorFlowLite

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

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

Core ML və Metal arasında seçim: Core ML — production üçün, Metal — kənar hallar üçün. Core ML NE yaddaşını avtomatik idarə edir, CPU-ya düşməni (fallback) dəstəkləyir və əl ilə çevirmə tələb etmir. Metal buferlər üzərində nəzarət verir və fərdi əməliyyatlar üçün uyğundur. IT Sectr layihələrində biz bütün iOS modelləri üçün Core ML Delegate-dən, Metal-dan isə yalnız real vaxt videoanalitikası tapşırıqları üçün istifadə edirik.

Layihə üçün delegatı necə seçmək

TF Lite Delegate seçimi hədəf platformadan, modeldən və gecikmə tələblərindən asılıdır. Universal ən yaxşı delegate yoxdur — hər birinin güclü və zəif tərəfləri var. Optimal strategiya: bütün mövcud delegatları hədəf cihazda sınayın və minimal sürətli olanı seçin — ən sürətli yox, minimal kifayət qədər.

DelegatePlatformaSürətlənməUyğunluq
GPUAndroid, iOS4–8x45 əməliyyat
NNAPIAndroid 8.1+3–12x60+ əməliyyat
XNNPACKAndroid, iOS2–4x90+ əməliyyat
Core MLiOS 12+5–10x50+ əməliyyat

Seçim tövsiyələri: NPU olan Android üçün (Snapdragon 8 Gen 2+, Dimensity 9000+) — NNAPI Delegate. NPU olmayan Android üçün — XNNPACK Delegate (defolt). iOS üçün — Core ML Delegate. Platformalararası layihələr üçün strategiyadan istifadə edin: Android-də NNAPI, iOS-da Core ML, fallback kimi XNNPACK. GPU Delegate — NNAPI mövcud olmadıqda və XNNPACK kifayət qədər sürətli olmadıqda.

Gecikmənin test edilməsi — seçimin məcburi mərhələsidir. Minimal temperaturda (cihaz soyuq) və 5 dəqiqə fasiləsiz işdən sonra (termal tənzimləmə) inferensı ölçün. GPU və NNAPI qızdıqda performansı aşağı sala bilər. XNNPACK (CPU) daha az əziyyət çəkir. Cihazınızda bütün delegatların avtomatik testi üçün TensorFlow Lite Benchmark Tool-dan istifadə edin.

kotlin
// Delegate seçim strategiyası
fun selectDelegate(): TfLiteDelegate {
    return when {
        NnApiDelegate.getAvailableAccelerators()?.isNotEmpty == true ->
            NnApiDelegate()
        GpuDelegateFactory.isGpuDelegateAvailable() ->
            GpuDelegate()
        else -> XnnpackDelegate()
    }
}

Fallback strategiyası — modeli istisnasız yükləyin: delegate dəstəklənmirsə, CPU-da işə salın. TensorFlow Lite delegate yaradılmasında səhv olduqda IllegalArgumentException atır. Delegate yaradılmasını try-catch-ə sarın və səhv olduqda modeli delegatesiz işə salın. Yavaş, lakin işləyən AI istifadəçi üçün səhvdən yaxşıdır.

Tez-tez verilən suallar

TF Lite Delegate sadə sözlərlə nədir?

TF Lite Delegate — mobil cihazda neyron şəbəkələr üçün sürətləndiricidir. Modeli CPU-da yavaş-yavaş icra etmək əvəzinə, delegate hesablamaları GPU-ya və ya xüsusi neyroçipə (NPU) göndərir. Təsəvvür edin ki, CPU universal alətdir, delegate isə konkret tapşırıqlar üçün xüsusi dəzgahdır: eyni şeyi edir, lakin dəfələrlə sürətli.

Hansı TF Lite delegate ən sürətlidir?

Ən sürətli delegate cihazdan asılıdır. Neural Engine (Apple A17 Pro, Snapdragon 8 Gen 3) olan cihazlarda — NNAPI (Android) və ya Core ML (iOS) 10–12x-ə qədər maksimum sürətlənmə verir. GPU Delegate sürət baxımından ikincidir. XNNPACK (CPU) delegatların ən yavaşıdır, lakin ən uyğun olanıdır. NPU olmayan cihazlarda XNNPACK və ya GPU optimal ola bilər.

TF Lite Delegate bütün əməliyyatları dəstəkləyir?

Xeyr, hər bir delegate məhdud əməliyyat dəstini dəstəkləyir. GPU Delegate — 45 əməliyyat, NNAPI — 60+, XNNPACK — 90+. Dəstəklənməyən əməliyyatlar CPU-da icra olunur (partial delegation). Fərdi əməliyyatlar (custom ops) üçün delegate tətbiq edilmir. İstifadədən əvvəl getDelegateOpsCount vasitəsilə uyğunluğu yoxlayın — düyünlərin 80%-dən azı həvalə edilibsə, başqa delegate seçin.

Android-də TF Lite Delegate-i necə qoşmaq olar?

build.gradle-ə asılılıq əlavə edin: implementation 'org.tensorflow:tensorflow-lite-gpu-delegate:+' və ya 'org.tensorflow:tensorflow-lite:x.x.x' (XNNPACK daxili). Delegate yaradın (GpuDelegate(), NnApiDelegate(), XnnpackDelegate()) və Interpreter.Options.addDelegate()-ə ötürün. İnterpretatoru işə salın — delegate avtomatik tətbiq olunur. İcradan sonra delegate-ni close() vasitəsilə bağlayın.

Eyni anda bir neçə delegate istifadə etmək olar?

Bəli, TF Lite multiple delegates dəstəkləyir — onlar ardıcıl tətbiq olunur. Interpretator əməliyyatı birinci delegate-yə həvalə etməyə çalışır, sonra ikinciyə və s. Heç bir delegate əməliyyatı dəstəkləmirsə — CPU-da icra olunur. Bu fallback üçün faydalıdır: əvvəlcə NNAPI, sonra GPU, sonra XNNPACK. Əlavə etmə sırası prioritetə təsir edir.

Nəticə

  • TF Lite Delegate — mobil cihazlarda TensorFlow Lite modelləri üçün aparat sürətləndiricisi
  • GPU Delegate — OpenGL ES (Android) və ya Metal (iOS) vasitəsilə sürətləndirmə, CPU-dan 4–8x sürətli
  • NNAPI Delegate — Android Neural Networks API vasitəsilə, NPU/DSP/GPU istifadə edir, 3–12x
  • XNNPACK Delegate — SIMD vasitəsilə CPU optimallaşdırması, 2–4x, maksimum uyğunluq (90+ ops)
  • Core ML Delegate — iOS sürətləndirməsi Neural Engine və Metal vasitəsilə, 5–10x
  • Delegate seçimi — hədəf cihazda sınayın, CPU-ya fallback istifadə edin
  • Partial delegation — dəstəklənməyən əməliyyatlar avtomatik CPU-da icra olunur

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun