TF Lite Delegate — je komponenta TensorFlow Lite, která přesměrovává provádění operací neuronové sítě na specializovaný hardware: GPU, NPU, DSP nebo optimalizovaný CPU. Bez delegáta běží model na CPU v režimu plné kompatibility — pomalu, ale předvídatelně. Delegát zrychluje inferenci 3–10krát v závislosti na čipu a modelu. Podle údajů TensorFlow, 2025, delegáti GPU a NNAPI snižují latenci inference o 60–90% bez významné ztráty přesnosti.
Hlavní body
TF Lite Delegate — je softwarový adaptér mezi TensorFlow Lite Runtime a hardwarovým akcelerátorem zařízení. Delegát zachycuje operace grafu modelu (konvoluce, pooling, maticové násobení) a provádí je na specializovaném počítači místo CPU. Pokud delegát nepodporuje konkrétní operaci, provádí se na CPU — tomu se říká partial delegation.
Architektura TF Lite Delegate je postavena kolem rozhraní SimpleDelegate API a struktury TfLiteDelegate v C++. Každý delegát implementuje metody delegování uzlů grafu, alokace paměti a provádění na cílovém zařízení. Vývojář připojí delegáta přes Interpreter::ModifyGraphWithDelegate před voláním Invoke. Podle TensorFlow Guide se delegát automaticky aplikuje na všechny podporované operace modelu.
Kontrola kompatibility — povinná fáze. Ne všechny operace jsou podporovány každým delegátem. TensorFlow Lite poskytuje nástroj Delegation Compatibility Check: spusťte model s delegátem a zkontrolujte, kolik operací (ops) bylo delegováno. Pokud méně než 80% — je lepší vybrat jiného delegáta nebo zůstat na CPU. Podle TensorFlow (2025), GPU Delegate podporuje 45 operací, NNAPI — 60+.
V projektech IT Sectr používáme delegáty GPU pro iOS a XNNPACK pro Android s vestavěnou kontrolou kompatibility: model je testován na všech delegátech, vybírá se nejrychlejší s úplností delegování alespoň 90%.
// Připojení GPU Delegate na Androidu
val gpuDelegate = GpuDelegate()
val options = Interpreter.Options().apply {
addDelegate(gpuDelegate)
setNumThreads(4)
}
val interpreter = Interpreter(modelBuffer, options)
interpreter.run(input, output)
gpuDelegate.close()
Kontrola delegovaných operací — kontrola kompatibility přes Interpreter. Ve výchozím nastavení delegát přijímá všechny operace, které podporuje. Pro ladění použijte logování počtu delegovaných uzlů. Pokud model obsahuje vlastní operace (custom ops), delegát je nezrychluje, ale ani nerozbíjí — provádějí se na CPU.
// Zkontrolujte počet delegovaných operací
val delegateCount = interpreter.getDelegateOpsCount(gpuDelegate)
val totalNodes = interpreter.getNodesCount()
Log.d("TFLite", "Delegováno: $delegateCount / $totalNodes")
if (delegateCount < totalNodes * 0.8) {
// Práh 80% — vyberte jiného delegáta
}
GPU Delegate — delegát TensorFlow Lite pro provádění modelu na GPU přes OpenGL ES 3.1+ (Android) nebo Metal (iOS). Grafické procesory jsou optimalizovány pro paralelní maticové operace — Core ML a konvoluční neuronové sítě (CNN) dosahují největšího zrychlení. GPU Delegate snižuje latenci inference 4–8krát pro modely jako MobileNet, EfficientNet, Inception.
Omezení GPU Delegate: nepodporuje všechny operace (pouze 45 z ~120 v TF Lite), vyžaduje OpenGL ES 3.1 nebo Metal, spotřebovává více energie než CPU. GPU je neefektivní pro batch size > 1 v mobilních scénářích. Podle benchmarků TensorFlow (2025) na zařízení Pixel 8 s GPU Adreno 740 běží model MobileNetV2 za 4.2 ms na GPU oproti 18.7 ms na CPU — zrychlení 4.4x.
Konfigurace GPU Delegate zahrnuje volbu přesnosti: float16 snižuje přesnost, ale zrychluje inferenci o 30–40% bez znatelné ztráty kvality (pro většinu úloh). Zapněte allow_precision_loss=true pro maximální výkon na GPU. Pro úlohy s vysokou přesností (medicína, finance) použijte float32.
// GPU Delegate s optimalizací přesnosti
val gpuOptions = GpuDelegateFactory.Options().apply {
isPrecisionLossAllowed = true
inferencePreference = GpuDelegateFactory.Options.InferencePreference.SUSTAINED_SPEED
}
val delegate = GpuDelegateFactory.create(gpuOptions)
GPU Delegate na iOS používá Metal Performance Shaders přes Metal Delegate. Na iOS delegát funguje přes Core ML delegate pro Apple Neural Engine nebo přímo přes Metal. Apple A17 Pro provádí MobileNetV2 za 1.3 ms — 6krát rychleji než CPU. Metal delegate je dostupný od iOS 12 a podporuje všechna zařízení s čipem A7+.
NNAPI Delegate (Android Neural Networks API) — delegát TF Lite, který využívá hardwarovou akceleraci přes Android NN HAL (Hardware Abstraction Layer). NNAPI přesměrovává operace modelu na NPU, DSP nebo GPU v závislosti na dostupných ovladačích zařízení. Podporován na Android 8.1+ (API 27+) a je doporučeným výchozím delegátem pro Android.
Výhoda NNAPI — automatický výběr akcelerátoru. Pokud má zařízení NPU (Qualcomm Hexagon, MediaTek APU, Samsung NPU), NNAPI na něj deleguje operace. Pokud NPU není — na GPU přes OpenCL. Pokud GPU také nepodporuje — na CPU s optimalizacemi DSP. Vývojář neurčuje konkrétní akcelerátor — NNAPI vybírá optimální. Podle Google I/O 2024, NNAPI delegate na Snapdragon 8 Gen 3 zrychluje LLM modely 12krát.
Omezení NNAPI: nerovnoměrná podpora na různých zařízeních. Stará zařízení (Android 8.1) mají omezenou sadu ovladačů. Huawei s Kirin nepodporuje NNAPI přes Google Services — použijte GPU Delegate. Pro zaručenou kompatibilitu Google doporučuje NNAPI Delegate jako první volbu s fallbackem na GPU nebo XNNPACK.
// NNAPI Delegate s CPU fallbackem
val nnApiOptions = NnApiDelegate.Options().apply {
acceleratorName = null // null = automatický výběr
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 — parametr pro explicitní výběr akcelerátoru. Pokud je předán null, NNAPI vybírá automaticky. Pro testování uveďte konkrétní: "qti", "google-edgetpu", "mediatek". Seznam dostupných akcelerátorů se zobrazuje přes NnApiDelegate.getAvailableAccelerators(). V produkci používejte automatický výběr s prahem kompatibility.
XNNPACK Delegate — delegát TensorFlow Lite pro optimalizované provádění na CPU přes instrukce SIMD (ARM NEON, SSE, AVX). XNNPACK nevyžaduje GPU ani NPU — je to čistý CPU delegát, ale s 2–4x zrychlením díky SIMD, operator fusion, memory pre-fetching a quantized inference (INT8). Ideální pro zařízení bez vyhrazeného NPU nebo když je potřeba zaručená kompatibilita.
XNNPACK byl vyvinut společností Google jako výchozí TF Lite delegát pro CPU (ve výchozím nastavení součástí TFLite Runtime). Podporuje 90+ operací — více než GPU nebo NNAPI. XNNPACK je zvláště účinný pro kvantované modely (INT8, INT16): operace běží 2–3krát rychleji než verze float32. Podle benchmarků Google (2025), XNNPACK zrychluje INT8 MobileNetV2 2.8x oproti základnímu CPU.
XNNPACK vs GPU: na zařízeních bez NPU je XNNPACK často rychlejší než GPU Delegate pro malé dávky (1–4) — GPU má režii přenosu dat mezi CPU a GPU. XNNPACK pracuje ve stejném adresním prostoru CPU — nedochází ke kopírování paměti. Pro modely do 5MB může být XNNPACK rychlejší než GPU. U velkých CNN modelů GPU vítězí díky paralelismu.
// XNNPACK Delegate ve výchozím nastavení zapnutý v TFLite 2.18+
// Explicitní použití přes 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)
})
XNNPACK Flags: USE_XNNPACK — vynutí zapnutí delegáta, FLUSH_TO_ZERO — zpracování denormalizovaných čísel pro zrychlení, ENABLE_XNNPACK_SHAPES — dynamické velikosti vstupu. Pro maximální kompatibilitu používejte výchozí možnosti. Při výskytu chyb na starých zařízeních vypněte XNNPACK — model stále běží na CPU, ale pomaleji.
Core ML Delegate — delegát TensorFlow Lite pro iOS, který využívá Apple Core ML Framework. Core ML převádí model TF Lite do formátu .mlmodel a provádí na Apple Neural Engine (ANE), GPU (Metal) nebo CPU. Apple A17 Pro a M3 mají vyhrazený Neural Engine, který Core ML automaticky používá. Core ML Delegate zrychluje inferenci 5–10krát oproti CPU na moderních iOS zařízeních.
Core ML na iOS podporuje flex delegate (dynamické delegování operací dostupných v Core ML) a full model conversion (konverze celého modelu do .mlmodel). Apple doporučuje flex delegate — je rychlejší, protože pracuje za běhu bez předchozí konverze. Core ML Delegate podporuje modely float32, float16 a kvantované (INT8).
Metal Delegate — delegát nižší úrovně, který pracuje přímo s Metal Performance Shaders. Použijte Metal, když Core ML nepodporuje jednotlivé operace. Metal Delegate poskytuje maximální kontrolu nad GPU, ale vyžaduje více kódu. Podle Apple (WWDC 2024) může být Metal Delegate pro nativní Swift modely o 15–20% rychlejší než Core ML kvůli absenci režie konverze.
// Core ML Delegate na iOS přes 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)
Výběr mezi Core ML a Metal: Core ML — pro produkci, Metal — pro okrajové případy. Core ML automaticky spravuje paměť NE, podporuje pád na CPU (fallback) a nevyžaduje ruční konverzi. Metal poskytuje kontrolu nad buffery a je vhodný pro vlastní operace. V projektech IT Sectr používáme Core ML Delegate pro všechny iOS modely a Metal pouze pro úlohy analýzy videa v reálném čase.
Výběr TF Lite Delegate závisí na cílové platformě, modelu a požadavcích na latenci. Neexistuje univerzální nejlepší delegát — každý má silné a slabé stránky. Optimální strategie: otestujte všechny dostupné delegáty na cílovém zařízení a vyberte minimálně dostatečně rychlého — ne nejrychlejšího, ale minimálně dostačujícího.
| Delegát | Platforma | Zrychlení | Kompatibilita |
|---|---|---|---|
| GPU | Android, iOS | 4–8x | 45 operací |
| NNAPI | Android 8.1+ | 3–12x | 60+ operací |
| XNNPACK | Android, iOS | 2–4x | 90+ operací |
| Core ML | iOS 12+ | 5–10x | 50+ operací |
Doporučení pro výběr: pro Android s NPU (Snapdragon 8 Gen 2+, Dimensity 9000+) — NNAPI Delegate. Pro Android bez NPU — XNNPACK Delegate (výchozí). Pro iOS — Core ML Delegate. Pro multiplatformní projekty použijte strategii: NNAPI na Androidu, Core ML na iOS, XNNPACK jako fallback. GPU Delegate — když NNAPI není k dispozici a XNNPACK není dostatečně rychlý.
Testování latence — povinná fáze výběru. Změřte inferenci při minimální teplotě (studené zařízení) a po 5 minutách nepřetržitého provozu (tepelný throttling). GPU a NNAPI mohou při zahřívání snižovat výkon. XNNPACK (CPU) trpí méně. Použijte TensorFlow Lite Benchmark Tool pro automatické testování všech delegátů na vašem zařízení.
// Strategie výběru delegáta
fun selectDelegate(): TfLiteDelegate {
return when {
NnApiDelegate.getAvailableAccelerators()?.isNotEmpty == true ->
NnApiDelegate()
GpuDelegateFactory.isGpuDelegateAvailable() ->
GpuDelegate()
else -> XnnpackDelegate()
}
}
Fallback strategie — nahrajte model bez výjimek: pokud delegát není podporován, spusťte na CPU. TensorFlow Lite vyhazuje IllegalArgumentException při chybě vytváření delegáta. Obalte vytváření delegáta do try-catch a při chybě spusťte model bez delegáta. Pomalé, ale fungující AI je lepší než chyba pro uživatele.
Často kladené otázky
TF Lite Delegate — je akcelerátor pro neuronové sítě na mobilním zařízení. Místo pomalého provádění modelu na CPU posílá delegát výpočty na GPU nebo speciální neuročip (NPU). Představte si, že CPU je univerzální nástroj a delegát je speciální stroj pro konkrétní úkoly: dělá to samé, ale mnohonásobně rychleji.
Nejrychlejší delegát závisí na zařízení. Na zařízeních s Neural Engine (Apple A17 Pro, Snapdragon 8 Gen 3) — NNAPI (Android) nebo Core ML (iOS) poskytují maximální zrychlení až 10–12x. GPU Delegate je druhý v rychlosti. XNNPACK (CPU) je nejpomalejší z delegátů, ale nejkompatibilnější. Na zařízeních bez NPU může být XNNPACK nebo GPU optimální.
Ne, každý delegát podporuje omezenou sadu operací. GPU Delegate — 45 operací, NNAPI — 60+, XNNPACK — 90+. Nepodporované operace se provádějí na CPU (partial delegation). Pro vlastní operace (custom ops) se delegát nepoužije. Před použitím zkontrolujte kompatibilitu přes getDelegateOpsCount — pokud je delegováno méně než 80% uzlů, vyberte jiného delegáta.
Přidejte závislost do build.gradle: implementation 'org.tensorflow:tensorflow-lite-gpu-delegate:+' nebo 'org.tensorflow:tensorflow-lite:x.x.x' (XNNPACK vestavěný). Vytvořte delegáta (GpuDelegate(), NnApiDelegate(), XnnpackDelegate()) a předejte do Interpreter.Options.addDelegate(). Spusťte interpret — delegát se aplikuje automaticky. Po provedení uzavřete delegáta přes close().
Ano, TF Lite podporuje multiple delegates — aplikují se postupně. Interpret se pokusí delegovat operaci prvnímu delegátovi, poté druhému a tak dále. Pokud žádný delegát operaci nepodporuje — provede se na CPU. To je užitečné pro fallback: nejprve NNAPI, poté GPU, poté XNNPACK. Pořadí přidávání ovlivňuje prioritu.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také