7.10. CMSIS-NN¶
De operatorlijst die TFLM doorloopt bestaat grotendeels uit een handvol zware operatoren: convolutie die een klein raster van geleerde gewichten over een invoertensor schuift en op elke positie de gewogen som wegschrijft; depthwise convolution die hetzelfde per kanaal doet; fully-connected matrixvermenigvuldigingen tussen een vector van invoeren en een matrix van gewichten; pooling die een tensor verkleint door het maximum of gemiddelde over kleine buurten te nemen; activeringsfuncties zoals ReLU en sigmoid die puntsgewijs over elke waarde lopen. Een vision-inferentie besteedt de meeste van zijn cycli binnen die paar operatoren.
Op de eenvoudige manier geïmplementeerd zouden ze traag zijn op een microcontroller. CMSIS-NN is Arms bibliotheek met snelle varianten – met de hand afgesteld in assembly, integer-gekwantiseerd naar de int8- en uint8-waarden die tensor-I/O beschreef, en geschreven tegen de SIMD-instructies van de CPU. SIMD – Single Instruction, Multiple Data – laat de CPU één rekenkundige bewerking over meerdere waarden in dezelfde cyclus uitvoeren. Een gewone scalaire vermenigvuldig-optel produceert één resultaat per cyclus; een SIMD-vermenigvuldig-optel pakt meerdere waarden in een breed register en produceert ze allemaal tegelijk.
De Cortex-M7 op de H7 en de RT1062 heeft Arms DSP-extensie, die vier int8-waarden in een 32-bits register houdt en een vermenigvuldig-optel over alle vier in één cyclus uitvoert. De Cortex-M55 op de AE3 heeft Helium – formeel MVE, de M-profile Vector Extension – die zestien int8-banen in een 128-bits register houdt, vier keer de doorvoer per cyclus. Helium is een bredere CPU-instructieset, geen versneller; de Ethos-U55 NPU op dezelfde die is de versneller.
De uitgeleverde TFLM-builds zijn gelinkt tegen CMSIS-NN, en TFLM stuurt elke zware operator tijdens runtime naar de juiste SIMD-variant voor de cam. Op de AE3 is de dispatch iets ingewikkelder: de Vela-compiler heeft het model al offline doorlopen en samenhangende delen van NPU-geschikte operatoren – subgraphs – gemarkeerd voor dispatch naar de Ethos-U. Tijdens inferentie draaien die subgraphs in één blok op de versneller, en de rest valt terug op Helium CMSIS-NN op de M55.
Float-operatoren omzeilen CMSIS-NN volledig en lopen door TFLM’s portable referentiekernels. Het nauwkeurigheidsverschil tussen een int8- en een float-model is meestal klein; het doorvoerverschil is groot. Modellen die op de cam worden uitgeleverd zijn om deze reden gekwantiseerd naar int8.