7.10. CMSIS-NN

Seznam operátorů, kterým TFLM prochází, tvoří většinou hrstka náročných operátorů: konvoluce posouvá malou mřížku naučených vah přes vstupní tenzor a na každou pozici zapisuje vážený součet; hloubková konvoluce dělá totéž po jednotlivých kanálech; plně propojené vrstvy provádějí maticové násobení mezi vektorem vstupů a maticí vah; pooling zmenšuje tenzor tím, že nad malými okolími bere maximum nebo průměr; aktivační funkce jako ReLU a sigmoid běží bodově přes každou hodnotu. Vizuální inference stráví většinu svých cyklů uvnitř těchto několika operátorů.

Pokud by byly implementovány přímočaře, byly by na mikrokontroléru pomalé. CMSIS-NN je knihovna těch rychlých od Armu – ručně laděných v assembleru, celočíselně kvantovaných na hodnoty int8 a uint8, které popisuje vstup/výstup tenzorů, a napsaných proti SIMD instrukcím procesoru. SIMD – Single Instruction, Multiple Data – umožňuje procesoru provést jednu aritmetickou operaci nad několika hodnotami ve stejném cyklu. Prosté skalární násobení s přičtením vyprodukuje jeden výsledek za cyklus; SIMD násobení s přičtením naskládá několik hodnot do širokého registru a vyprodukuje je všechny najednou.

Cortex-M7 na H7 a RT1062 má Armovo DSP rozšíření, které drží čtyři hodnoty int8 ve 32bitovém registru a provede násobení s přičtením nad všemi čtyřmi v jednom cyklu. Cortex-M55 na AE3 má Helium – formálně MVE, vektorové rozšíření profilu M – které drží šestnáct int8 linek ve 128bitovém registru, tedy čtyřnásobnou propustnost na cyklus. Helium je širší instrukční sada procesoru, nikoli akcelerátor; akcelerátorem je Ethos-U55 NPU na tomtéž čipu.

Dodávané sestavení TFLM jsou slinkovaná s CMSIS-NN a TFLM za běhu odesílá každý náročný operátor do správné SIMD varianty pro danou kameru. Na AE3 je odesílání o něco složitější: kompilátor Vela již model prošel offline a označil propojené úseky operátorů způsobilých pro NPU – podgrafy – k odeslání na Ethos-U. Při inferenci tyto podgrafy běží na akcelerátoru v jednom bloku a zbytek se vrátí k Helium CMSIS-NN na M55.

Operátory s plovoucí desetinnou čárkou CMSIS-NN zcela obcházejí a běží přes přenositelná referenční jádra TFLM. Rozdíl v přesnosti mezi modelem int8 a modelem s plovoucí desetinnou čárkou je obvykle malý; rozdíl v propustnosti je velký. Modely dodávané na kameře jsou z tohoto důvodu kvantovány na int8.