7.10. CMSIS-NN¶
Operatorlistan som TFLM går igenom består mestadels av en handfull tunga operatorer: convolution som glider ett litet rutnät av inlärda vikter över en ingångstensor och skriver den viktade summan vid varje position; depthwise convolution som gör samma sak per kanal; fully-connected som matrismultiplicerar en vektor av indata mot en matris av vikter; pooling som krymper en tensor genom att ta maximum eller medelvärde över små grannskap; activation functions som ReLU och sigmoid som körs punktvis över varje värde. En visuell inferens spenderar merparten av sina cykler inuti dessa få operatorer.
Implementerade på det enkla sättet skulle de vara långsamma på en mikrokontroller. CMSIS-NN är Arms bibliotek av snabba sådana – handoptimerade i assembler, heltalskvantiserade till de int8- och uint8-värden som tensor I/O beskrev, och skrivna mot processorns SIMD-instruktioner. SIMD – Single Instruction, Multiple Data – låter processorn köra en aritmetisk operation över flera värden i samma cykel. En vanlig skalär multiplicera-och-addera ger ett resultat per cykel; en SIMD-multiplicera-och-addera packar flera värden i ett brett register och producerar alla på en gång.
Cortex-M7 på H7 och RT1062 har Arms DSP-tillägg, som rymmer fyra int8-värden i ett 32-bitarsregister och kör en multiplicera-och-addera över alla fyra i en cykel. Cortex-M55 på AE3 har Helium – formellt MVE, M-profile Vector Extension – som rymmer sexton int8-banor i ett 128-bitarsregister, fyra gånger genomströmningen per cykel. Helium är en bredare CPU-instruktionsuppsättning, inte en accelerator; Ethos-U55 NPU på samma kiselbricka är acceleratorn.
De levererade TFLM-byggena är länkade mot CMSIS-NN, och TFLM skickar varje tung operator till rätt SIMD-variant för kameran vid körning. På AE3 är dispatchningen lite mer involverad: Vela-kompilatorn har redan gått igenom modellen offline och markerat sammanhängande delar av NPU-dugliga operatorer – subgraphs – för dispatchning till Ethos-U. Vid inferens körs dessa subgrafer på acceleratorn i ett block, och resten faller tillbaka till Helium-CMSIS-NN på M55.
Flyttalsoperatorer kringgår CMSIS-NN helt och körs genom TFLM:s portabla referenskärnor. Noggrannhetsskillnaden mellan en int8-modell och en flyttalsmodell är vanligtvis liten; genomströmningsskillnaden är stor. Modeller som levereras på kameran kvantiseras till int8 av denna anledning.