7.10. CMSIS-NN

Operaattorilista, jonka TFLM käy läpi, koostuu enimmäkseen muutamasta raskaasta operaattorista: konvoluutio liu’uttaa pientä opittujen painojen ruudukkoa syötetensorin yli ja kirjoittaa painotetun summan jokaiseen kohtaan; depthwise-konvoluutio tekee saman kanavakohtaisesti; fully-connected suorittaa matriisikertolaskuja syötevektorin ja painomatriisin välillä; pooling kutistaa tensoria ottamalla maksimin tai keskiarvon pienistä naapurustoista; aktivointifunktiot kuten ReLU ja sigmoid suoritetaan pisteittäin jokaiselle arvolle. Konenäön päättely käyttää suurimman osan sykleistään näiden muutaman operaattorin sisällä.

Suoraviivaisesti toteutettuina ne olisivat hitaita mikro-ohjaimella. CMSIS-NN on Armin nopeiden toteutusten kirjasto – käsin viritetty assemblyssä, kokonaislukukvantisoitu int8- ja uint8-arvoihin, jotka tensor I/O kuvasi, ja kirjoitettu suorittimen SIMD-käskyjä vasten. SIMD – Single Instruction, Multiple Data – antaa suorittimen suorittaa yhden aritmeettisen operaation useamman arvon yli samassa syklissä. Tavallinen skalaarinen kerro-ja-lisää tuottaa yhden tuloksen sykliä kohti; SIMD-kerro-ja-lisää pakkaa useita arvoja leveään rekisteriin ja tuottaa ne kaikki kerralla.

H7:n ja RT1062:n Cortex-M7:ssä on Armin DSP-laajennus, joka pitää neljä int8-arvoa 32-bittisessä rekisterissä ja suorittaa kerro-ja-lisää-operaation kaikille neljälle yhdessä syklissä. AE3:n Cortex-M55:ssä on Helium – virallisesti MVE, M-profiilin vektorilaajennus – joka pitää kuusitoista int8-väylää 128-bittisessä rekisterissä, nelinkertaisen läpäisykyvyn sykliä kohti. Helium on leveämpi suorittimen käskykanta, ei kiihdytin; samalla piillä oleva Ethos-U55 NPU on kiihdytin.

Toimitettavat TFLM-käännökset on linkitetty CMSIS-NN:ää vasten, ja TFLM ohjaa jokaisen raskaan operaattorin kameralle oikeaan SIMD-variaattiin ajonaikaisesti. AE3:lla ohjaus on hieman monimutkaisempi: Vela-kääntäjä on jo käynyt mallin läpi etukäteen ja merkinnyt yhtenäiset viipaleet NPU-kelpoisia operaattoreita – aliverkot – ohjattaviksi Ethos-U:lle. Päättelyhetkellä nämä aliverkot suoritetaan kiihdyttimellä yhtenä lohkona, ja loput palautuvat Helium-CMSIS-NN:lle M55:ssä.

Liukulukuoperaattorit ohittavat CMSIS-NN:n kokonaan ja kulkevat TFLM:n siirrettävien referenssikernelien läpi. Tarkkuusero int8- ja liukulukumallin välillä on yleensä pieni; läpäisykykyero on suuri. Kameralle toimitettavat mallit kvantisoidaan tästä syystä int8-muotoon.