7.10. CMSIS-NN¶
Lista de operatori pe care o parcurge TFLM constă în mare parte dintr-o mână de operatori grei: convoluția care glisează o mică grilă de ponderi învățate peste un tensor de intrare și scrie suma ponderată la fiecare poziție; convoluția depthwise care face același lucru pentru fiecare canal; fully-connected care înmulțește matricial un vector de intrări cu o matrice de ponderi; pooling-ul care micșorează un tensor luând maximul sau media pe vecinătăți mici; funcțiile de activare precum ReLU și sigmoid care rulează punct cu punct peste fiecare valoare. O inferență de viziune își petrece majoritatea ciclurilor în interiorul acestor câțiva operatori.
Implementați în modul direct, ar fi lenți pe un microcontroler. CMSIS-NN este biblioteca de operatori rapizi a Arm – ajustați manual în assembly, cuantizați pe valori întregi la valorile int8 și uint8 descrise în I/O de tensori, și scriși folosind instrucțiunile SIMD ale CPU-ului. SIMD – Single Instruction, Multiple Data – permite CPU-ului să ruleze o operație aritmetică peste mai multe valori în același ciclu. O simplă înmulțire-adunare scalară produce un rezultat pe ciclu; o înmulțire-adunare SIMD împachetează mai multe valori într-un registru larg și le produce pe toate deodată.
Cortex-M7-ul de pe H7 și RT1062 are extensia DSP a Arm, care păstrează patru valori int8 într-un registru de 32 de biți și rulează o înmulțire-adunare peste toate patru într-un ciclu. Cortex-M55-ul de pe AE3 are Helium – formal MVE, M-profile Vector Extension – care păstrează șaisprezece benzi int8 într-un registru de 128 de biți, de patru ori mai mult debit pe ciclu. Helium este un set de instrucțiuni CPU mai larg, nu un accelerator; NPU-ul Ethos-U55 de pe același cip este acceleratorul.
Versiunile livrate ale TFLM sunt legate la CMSIS-NN, iar TFLM distribuie fiecare operator greu către varianta SIMD potrivită pentru cameră la momentul execuției. Pe AE3 distribuirea este puțin mai complexă: compilatorul Vela a parcurs deja modelul offline și a marcat porțiuni conectate de operatori eligibili pentru NPU – subgrafuri – pentru distribuire către Ethos-U. La momentul inferenței aceste subgrafuri rulează pe accelerator într-un singur bloc, iar restul revin la Helium CMSIS-NN pe M55.
Operatorii float ocolesc complet CMSIS-NN și rulează prin kernel-urile portabile de referință ale TFLM. Diferența de acuratețe dintre un model int8 și unul float este de obicei mică; diferența de debit este mare. Modelele livrate pe cameră sunt cuantizate la int8 din acest motiv.