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
- Volba úlohy a metrik → stanovení přijatelných kompromisů.
- Návrh architektury (NAS/ruční návrh) cílené na MCU/NPU.
- Trénink s ohledem na nasazení (QAT, distilace, augmentace dat).
- Komprese modelu (kvantizace, prořezávání, sdílení vah, low-rank).
- Kompatibilní export (TFLite Micro, ONNX Micro, TVM micro, Glow, mikrovarianty IREE).
- Sestavení grafu a plánování paměti (slučování operátorů, in-place, tiling).
- Portování na cílové SDK (CMSIS-NN, knihovny výrobce, NPU kernels).
- 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.
