7.10. CMSIS-NN¶
La liste d’opérateurs que TFLM parcourt se résume essentiellement à une poignée d’opérateurs lourds : la convolution, qui fait glisser une petite grille de poids appris sur un tenseur d’entrée et écrit la somme pondérée à chaque position ; la convolution séparable en profondeur, qui fait de même canal par canal ; les couches entièrement connectées, qui multiplient un vecteur d’entrées par une matrice de poids ; le pooling, qui réduit un tenseur en prenant le maximum ou la moyenne sur de petits voisinages ; et les fonctions d’activation comme ReLU et sigmoïde, qui s’appliquent point par point à chaque valeur. Une inférence de vision passe l’essentiel de ses cycles à l’intérieur de ces quelques opérateurs.
Implémentés de manière naïve, ils seraient lents sur un microcontrôleur. CMSIS-NN est la bibliothèque d’Arm regroupant des versions rapides – optimisées à la main en assembleur, quantifiées en entiers vers les valeurs int8 et uint8 décrites par les E/S de tenseurs, et écrites pour exploiter les instructions SIMD du CPU. Le SIMD – Single Instruction, Multiple Data – permet au CPU d’exécuter une opération arithmétique sur plusieurs valeurs dans le même cycle. Une multiplication-addition scalaire ordinaire produit un résultat par cycle ; une multiplication-addition SIMD empile plusieurs valeurs dans un registre large et les produit toutes en une fois.
Le Cortex-M7 du H7 et du RT1062 dispose de l”extension DSP d’Arm, qui place quatre valeurs int8 dans un registre 32 bits et exécute une multiplication-addition sur les quatre en un cycle. Le Cortex-M55 de l’AE3 dispose de Helium – formellement MVE, l’extension vectorielle du profil M – qui place seize voies int8 dans un registre 128 bits, soit quatre fois le débit par cycle. Helium est un jeu d’instructions CPU plus large, et non un accélérateur ; c’est le NPU Ethos-U55 situé sur la même puce qui constitue l’accélérateur.
Les builds TFLM livrés sont liés à CMSIS-NN, et TFLM aiguille chaque opérateur lourd vers la bonne variante SIMD pour la caméra, à l’exécution. Sur l’AE3 l’aiguillage est un peu plus élaboré : le compilateur Vela a déjà parcouru le modèle hors ligne et marqué des tranches connexes d’opérateurs éligibles au NPU – des sous-graphes – en vue de leur exécution sur l’Ethos-U. Au moment de l’inférence, ces sous-graphes s’exécutent sur l’accélérateur en un seul bloc, et le reste retombe sur Helium CMSIS-NN sur le M55.
Les opérateurs flottants contournent entièrement CMSIS-NN et passent par les noyaux de référence portables de TFLM. L’écart de précision entre un modèle int8 et un modèle flottant est généralement faible ; l’écart de débit est important. Les modèles livrés sur la caméra sont quantifiés en int8 pour cette raison.