Optimalizace výkonu AI na malých čipech: metody TinyML a hardwarová akcelerace

Optimalizace výkonu AI na malých čipech: Metody TinyML a hardvérová akcelerácia

Proč optimalizovat AI pro malé čipy

Optimalizace výkonu umělé inteligence na malých čipech (MCU, edge SoC, nízkonákladové NPU) je zásadní pro aplikace, které vyžadují nízkou latenci, nízkou spotřebu a vysokou spolehlivost bez závislosti na cloudu. Typickými scénáři jsou detekce klíčových slov, rozpoznávání gest, lokální vizuální inspekce, údržba strojů, nositelná zařízení a chytré senzory. Cílem je najít rovnováhu mezi přesností, rychlostí, paměťovou stopou a energií potřebnou na inferenci tak, aby řešení bylo udržitelné v reálném provozu.

Omezení a charakteristika cílového hardwaru

  • Výpočetní prostředky: nízké frekvence CPU (typicky do stovek MHz), omezená podpora SIMD (např. ARM Cortex-M s DSP/NEON u vyšších řad), případně malé akcelerátory NPU/DSP.
  • Paměť: desítky až stovky kB SRAM, někdy externí PSRAM; modely se často ukládají do QSPI flash s omezenou propustností.
  • Energetické limity: bateriový provoz, potřeba cyklického zapínání a vypínání (duty-cycling) a DVFS (Dynamic Voltage and Frequency Scaling).
  • Reálný čas: přísné požadavky na latenci (např. pod 10 ms pro HMI), determinismus, běh pod RTOS.

Klíčové metriky a cíle optimalizace

  • Latence inference (ms na vzorek) a její rozptyl (jitter).
  • Propustnost (počet inferencí za sekundu) při daném energetickém rozpočtu.
  • Paměťová stopa (flash pro váhy, SRAM pro aktivace a pracovní buffery).
  • Energetická náročnost (mJ na inferenci) a průměrná spotřeba (mW).
  • Přesnost / F1 / mAP po optimalizacích, včetně odolnosti vůči šumu a driftu dat.

Optimalizační pipeline: od modelu po firmware

  1. Volba úlohy a metrik → stanovení přijatelných kompromisů.
  2. Návrh architektury (NAS/ruční návrh) cílené na MCU/NPU.
  3. Trénink s ohledem na nasazení (QAT, distilace, augmentace dat).
  4. Komprese modelu (kvantizace, prořezávání, sdílení vah, low-rank).
  5. Kompatibilní export (TFLite Micro, ONNX Micro, TVM micro, Glow, mikrovarianty IREE).
  6. Sestavení grafu a plánování paměti (slučování operátorů, in-place, tiling).
  7. Portování na cílové SDK (CMSIS-NN, knihovny výrobce, NPU kernels).
  8. Profilování, měření a iterace v reálném kontextu RTOS/ISR.

Kvantizace: základní páka pro výkon a paměť

Kvantizace převádí váhy a aktivace z FP32/FP16 do nižší přesnosti (INT8, INT4, případně binární/ternární). Přináší menší model (flash), menší buffery (SRAM), rychlejší výpočty díky SIMD/NPU a nižší spotřebu energie. Existují dva přístupy:

  • PTQ (Post-Training Quantization): rychlá kalibrace na reprezentativním datasetu. Vhodná při malém poklesu přesnosti a rychlém vývoji.
  • QAT (Quantization-Aware Training): simulace kvantizačního šumu během tréninku. Obvykle zachovává vyšší přesnost, zejména u citlivých vrstev (např. attention, depthwise separable konvoluce).

Praktické tipy: udržujte škálování per-channel pro váhy konvolucí, použijte asymetrickou kvantizaci (asymmetric) pro aktivace, nezapomeňte na kalibraci rozsahů (min/max, KL-divergence) a validaci s reálným senzorem.

Prořezávání a strukturované prořezávání

Prořezávání snižuje počet parametrů a FLOPs. Na MCU nejlépe funguje strukturované prořezávání (odstraňování celých filtrů/kanálů), protože se lépe mapuje na husté výpočty a knihovny. Nestrukturované prořezávání (sparsity) může přinést menší užitek bez specializovaných implementací sparse kernels.

  • Prořezávání kanálů: řiďte se citlivostí vrstev; zachovávejte jejich šířku u vrstev, které mají velký vliv na výslednou přesnost.
  • Harmonogram prořezávání: postupné zvyšování sparsity s opakovaným tréninkem a knowledge distillation.
  • Mapování na NPU: některé NPU vyžadují konkrétní násobky počtu kanálů (např. násobky 8/16); tomu přizpůsobte cílové šířky.

Knowledge distillation a low-rank faktorizace

Knowledge distillation přenáší znalosti z velkého modelu teacher do menšího modelu student, který často dosahuje vyšší přesnosti při stejné velikosti. Low-rank dekompozice (SVD, TT/CP, adaptéry ve stylu LoRA) může zrychlit inferenci rozkladem náročných lineárních vrstev na dvě menší matice s menšími rozměry, což lépe využívá cache/SRAM.

Architektonické volby pro edge

  • Konvoluční sítě: upřednostňujte depthwise separable a grouped konvoluce (ve stylu MobileNet), ale ověřte jejich podporu v akcelerátoru a knihovnách kernels.
  • Lehké attention mechanismy: u malých čipů používejte local / linearized attention, případně varianty performer, nebo hybridní CNN-Transformer s omezeným kontextem.
  • RNN/TCN pro audio/časové řady: GRU/LSTM lze nahradit TCN (dilated conv), která umožňuje lepší paralelizaci a vyžaduje méně paměti pro aktivace.
  • Aktivační funkce: ReLU6/Hard-Swish/Hard-Sigmoid mají efektivní celočíselné aproximace.
  • Normalizace: při exportu slučte BatchNorm s konvolucí; na MCU se vyhněte normalizacím za běhu, pokud pro ně není k dispozici podpora.

Slučování operátorů, rozvrhování a plánování paměti

Slučování operátorů (Conv+BN+ReLU, Conv+Add+ReLU) omezuje počet průchodů a přesunů dat. Tiling a blocking přizpůsobují výpočty velikosti cache/SRAM. Memory planner recykluje buffery aktivací a využívá operace in-place, čímž výrazně snižuje špičkovou spotřebu SRAM. U externí PSRAM upřednostňujte streamování bloků im2col a dvojité bufferování (DMA).

Využití instrukcí SIMD/DSP/NPU

  • SIMD (ARM DSP/NEON u vyšších řad): zarovnejte tensory (např. po 4/8/16 prvcích), používejte zabalené formáty (packed, INT8) a vyhýbejte se nezarovnaným přístupům.
  • Knihovny DSP: CMSIS-NN, Helium, kernels NN specifické pro výrobce; ověřte, které operátory mají nejrychlejší implementace, a podle toho navrhujte síť.
  • NPU: respektujte omezení opsetu, velikost dlaždic, zarovnání kanálů a maximální rozměry tensorů; operátory bez podpory přesuňte na CPU s ohledem na režii přesunů.

Práce s pamětí: flash, SRAM, PSRAM a DMA

  • Umístění vah: komprimované váhy (např. INT8) ve flash s načítáním po blocích; kritické vrstvy přednačtěte do SRAM.
  • Aktivace: plánujte tak, aby špičková spotřeba SRAM nepřekročila limit – změňte pořadí vrstev nebo použijte menší batch (typicky 1).
  • DMA a dvojité bufferování: překrývejte I/O s výpočty, minimalizujte vytlačování dat z cache.
  • Rozložení dat: zvolte NCHW/NHWC podle preferencí kernels; pro vektorizaci zvažte prokládané formáty (interleaved).

Energetická optimalizace a řízení výkonu

  • DVFS: dynamicky přepínejte frekvenci a napětí mezi fázemi standby, sensor fusion a inference.
  • Cyklické zapínání a vypínání: plánujte inferenci v dávkách nebo podle událostí (wake-word) a uspávejte periferie.
  • Datové cesty: omezte počet přístupů k pomalé/externí paměti – jsou energeticky nejnáročnější.

RTOS, determinismus a integrace se senzory

U malých čipů je důležitá předvídatelnost. Oddělte vlákna pro sběr dat (ISR + DMA), předzpracování (FFT/MFCC), inferenci a odesílání výsledků. Používejte priority a kruhové buffery lock-free. Na kritických místech definujte watchdog a limity latence. Měřte latenci end-to-end od přerušení senzoru po provedení akce.

Předzpracování a kompaktní reprezentace vstupů

  • Audio: MFCC/Log-Mel s nízkým rozlišením, okna a kroky vyladěné pro cílové klíčové slovo.
  • Vize: odstíny šedi, zmenšování s vyhlazováním proti aliasingu, ořez ROI, normalizace pomocí škálovaných celočíselných operací.
  • Časové řady/IMU: agregace, filtr s pevnými koeficienty, výběr příznaků pomocí metod pro embedded systémy.

Bezpečnost a spolehlivost při optimalizacích

  • Deterministická kvantizace: stabilní výsledky napříč buildy (pevná kalibrační data, seed).
  • Kontrola integrity modelu: podpisy vah, secure boot, ochrana proti návratu ke starší verzi.
  • Nouzové režimy: při nedostatku SRAM přepněte na jednodušší model nebo snižte frekvenci inference.

Nástroje a knihovny

  • Frameworky pro micro inference: TensorFlow Lite for Microcontrollers, ONNX Runtime Micro, Apache TVM (microTVM), Glow, IREE (omezená podpora mikrozařízení).
  • Optimalizované kernels: CMSIS-NN, CMSIS-DSP, BSP/SDK výrobce (např. pro Xtensa, PULP, ARC, RISC-V NPU).
  • Profilování: stopky v ISR, trasování (SWO/ETM), měřiče energie (shunt + ADC), profilery výrobců.

Benchmarking a validace

Pro objektivní srovnání využijte standardy, jako jsou MLPerf Tiny nebo EEMBC MLMark. Proveďte tři úrovně testů: (1) unit testy kernelů operátorů, (2) metriky na úrovni modelu (model-level: latence, paměť, přesnost) na syntetických datech, (3) validaci na úrovni systému (system-level) E2E se senzorem a RTOS.

Typické výkonnostní zisky podle techniky

Technika Typický zisk Dopad na přesnost Poznámka
Kvantizace FP32→INT8 2–4× vyšší rychlost, 4× menší model 0–2 p. b. při QAT Váhy per-channel, asymetrické aktivace
Strukturované prořezávání 30–50 % 1,3–2× vyšší rychlost 1–3 p. b. po opakovaném tréninku Zachovat násobky počtu kanálů
Slučování operátorů O 10–30 % nižší latence 0 p. b. Méně přesunů dat
Tiling + plánování in-place O 20–50 % méně SRAM 0 p. b. Nižší špičkové využití paměti
Distilace Stejná přesnost s menším modelem −0 až +1 p. b. U náročných úloh výrazný přínos
Optimalizace kernelů SIMD/NPU 2–10× vyšší rychlost v kritických úsecích 0 p. b. Závisí na podpoře operátorů v HW

Kontrolní seznam pro nasazení na malý čip

  • Model v INT8 (přednostně QAT), ověřit rozsahy aktivací.
  • Strukturované prořezávání s ohledem na násobky počtu kanálů akcelerátoru.
  • Export se sloučenou BN a aktivační funkcí; používat pouze podporované operátory.
  • Memory planner: in-place, opětovné využití, dvouúrovňové bufferování s DMA.
  • Profilování kritických vrstev (hot-path) a validace jitteru pod RTOS.
  • Měření energie (mJ/inference) a strategie DVFS/cyklického zapínání a vypínání.
  • Nouzový režim a watchdog; kontrola integrity binárního souboru a vah.

Typické anti-patterny (čemu se vyhnout)

  • Nasazení FP32/FP16 bez kvantizace na MCU bez FPU nebo s pomalou FPU.
  • Nestrukturovaná sparsity bez specializovaných sparse kernels.
  • Nepodporované opsety (vlastní aktivační funkce) → záložní běh na CPU s vysokou režií.
  • Náhodné změny frekvence bez řízení DVFS → nestabilní latence.
  • Nekontrolované přístupy do PSRAM/flash → energetická penalizace.

Minipřípad: rozpoznávání klíčových slov na Cortex-M

Výchozí CNN (FP32) má 250 kB vah a latenci 120 ms. Po QAT INT8 klesne velikost na ~65 kB a latence na 35 ms díky kernelům CMSIS-NN. Strukturované prořezávání o 40 % s opakovaným tréninkem sníží latenci na 22 ms. Sloučení Conv+BN+ReLU a tiling aktivací sníží špičkové využití SRAM o 30 %. Po zavedení cyklického zapínání a vypínání (20 % aktivní provoz, 80 % spánek) klesne průměrná spotřeba pod 2 mW při zachování přesnosti v rozmezí −1 p. b.

Závěr

Optimalizace AI na malých čipech je systémový úkol: kombinuje techniky tréninku (QAT, distilace), architektonické volby (lehké sítě), kompilaci grafu (slučování, tiling, plánování paměti) a znalost hardwaru (SIMD/NPU, DVFS, DMA). Úspěch přichází s iteracemi založenými na měření – co nelze změřit, nelze optimalizovat. Dobře navržená pipeline umožňuje dosáhnout několikanásobného zrychlení a výrazných úspor paměti a energie při minimálním dopadu na přesnost, a tím otevřít cestu k inteligentním senzorům a embedded systémům nové generace.