Banc d'essai

Atome LM EDGE face à TensorFlow Lite for Microcontrollers

Deux gains, une égalité, une perte, et la liste de ce que personne n'a mesuré.

Cette page est la comparaison complète entre Atome LM EDGE et TensorFlow Lite for Microcontrollers sur le banc que nous avons mesuré le plus soigneusement : UCI HAR, reconnaissance d'activité humaine, 2 947 fenêtres de test issues de 30 sujets, le même réseau convolutif temporel de 6 567 paramètres compilé par les deux moteurs.

Elle contient l'axe sur lequel nous perdons et ceux que personne n'a mesurés. Ce n'est pas de la modestie : un banc qui ne se lit que dans un sens n'est pas un banc, et un ingénieur embarqué qui choisit un runtime a besoin de la forme du compromis, pas d'un titre.

Empreinte flash : GAIN, 4,64× Coût par décision en flux : GAIN, 27,3× Précision : ÉGALITÉ Latence par fenêtre : PERTE, 2,89× Énergie sur silicium : NON MESURÉ

Qui est qui

1 · Précision — une égalité, et c'en est vraiment une

La découpe est par sujet : les 30 personnes du jeu de test n'apparaissent jamais à l'entraînement, la seule découpe qui ait un sens pour un objet porté. La sélection de modèle se fait sur une validation extraite des sujets d'entraînement. Le jeu de test est noté une seule fois. Cinq graines par bras.

GraineAtome LM EDGETensorFlow Lite for Microcontrollers (budget égal)
00,89920,9067
10,91820,9074
20,90530,9362
30,90910,8975
40,91550,9006
moyenne ± é.t. 0,9095 ± 0,0077 0,9097 ± 0,0154

Différence appariée : -0,000204, contre un 2·SE apparié de 0,017222. L'écart est environ quatre-vingts fois plus petit que le bruit. Notre bras devance sur 3 graines sur 5 — ce que fait une pièce de monnaie.

C'est une égalité et nous l'appelons une égalité. Une version antérieure de cette comparaison annonçait un gain à partir d'une seule graine. C'était faux : la moyenne sur 5 graines ne le soutient pas.

2 · Flash et RAM — un gain, 4,64×

OctetsAtome LM EDGETensorFlow Lite for MicrocontrollersRapport
Poids du modèle7 04432 8004,66×
Moteur en flash8 40038 9124,63×
Flash total15 44471 7124,64×
RAM d'exécution3 0726 6562,17×

L'écart est structurel. TensorFlow Lite for Microcontrollers embarque un interpréteur : il lit un FlatBuffer au démarrage, parcourt une table d'opérateurs et dispatche, ce qui exige une zone de tenseurs. Notre moteur n'a pas d'interpréteur à porter, parce que la forme du réseau est compilée. C'est un coût réel de leur côté et une contrainte réelle du nôtre : changer de modèle impose de recompiler le firmware, là où eux remplacent un fichier.

La variante ternaire descend plus bas : 4 765 octets de poids contre le FlatBuffer de 18 840 octets du même run — 3,95× — vérifiée de bout en bout, le vrai moteur C étant d'accord avec la référence sur 2947/2947 fenêtres. Sa précision est 0,9053 sur une graine : c'est un artefact déployable, pas un résultat.

3 · Coût par décision sur fenêtre glissante — un gain, 27,3×

Un runtime sans état expose une convolution par tenseur, sans moyen de conserver l'historique entre deux appels. Demandez-lui une décision : il recalcule toute la fenêtre. Redemandez un échantillon plus tard : il recalcule toute la fenêtre, y compris les 127 échantillons qui n'ont pas bougé.

Notre moteur garde des anneaux d'activation par couche et calcule un seul nouveau pas de temps par couche et par échantillon. L'API adverse ne sait pas exprimer cela. Ce n'est pas une course de vitesse, c'est une capacité que l'interface n'a pas.

Cortex-M4 @ 80 MHzCyclesms
Fenêtre complète — ce qu'un runtime sans état doit faire7 453 88493,2
Convolution CMSIS-NN par fenêtre2 556 54832,0
Nous, en flux, par décision93 5981,17

La limite, énoncée avec le résultat. Cela ne vaut que pour des fenêtres qui se recouvrent. Le flux gagne quand une décision est nécessaire plus souvent que tous les 27 échantillons face à CMSIS-NN. Au pas de 128 — fenêtres disjointes — le flux coûte 1,6× plus cher, et il réclame environ 10 Kio de RAM d'état (24 732 o de bss contre 6 192 o).

4 · Latence par fenêtre — une perte, 2,89×

Cortex-M4, une fenêtreCyclesCycles / MACms @ 80 MHz
Atome LM EDGE, convolution seule7 390 0369,1392,4
CMSIS-NN arm_convolve_s82 556 5483,1332,0
Rapportnous 2,89× plus lents

CMSIS-NN y parvient en restructurant toute la convolution — im2col vers un grand GEMM — au prix d'une zone de travail de 16 Kio (24 048 o de bss contre 6 192 o chez nous). Nous avons essayé trois variantes SIMD de notre boucle interne : les trois étaient plus lentes que le code scalaire, le surcoût d'appel par canal de sortie dépassant les sept multiplications-accumulations qu'il effectue.

5 · Ce que nous n'avons pas mesuré

Non mesuréPourquoi c'est important
Latence et énergie sur siliciumTous les cycles Cortex-M de cette page viennent d'une émulation Unicorn 2.1.4 sur la table DDI 0403E. 61 % des instructions exécutées n'y figurent pas et comptent pour un cycle : les absolus sont des bornes inférieures, les rapports sont la partie fiable.
X-CUBE-AI lui-mêmeL'outil stm32ai n'a jamais été exécuté ici — il exige un compte ST que nous n'avons pas. Ce qui est mesuré, c'est CMSIS-NN v4.1.0, la bibliothèque que X-CUBE-AI génère en dessous.
Cortex-M33La compilation ARMv8-M faute sous le modèle ARM d'Unicorn et n'atteint jamais son écriture semihosting sous QEMU mps2-an505. Aucun chiffre M33 n'existe.
Un deuxième jeu de donnéesToutes les précisions de cette page sont UCI HAR. Un banc est un banc.

Lequel choisir

Questions

Atome LM est-il plus précis que TensorFlow Lite for Microcontrollers ?

Non. Sur UCI HAR, avec une découpe par sujet sans fuite et 5 graines, c'est une égalité : 0,9095 ± 0,0077 pour Atome LM EDGE contre 0,9097 ± 0,0154 pour TFLite Micro.

De combien Atome LM EDGE est-il plus petit que TFLite Micro ?

4,64× sur la flash totale pour le même réseau de 6 567 paramètres : 15 444 octets contre 71 712. La RAM d'exécution est 2,17× plus petite.

Atome LM est-il plus rapide que TFLite Micro ?

Cela dépend entièrement du glissement de la fenêtre. Par décision sur fenêtre glissante, 27,3× moins cher que CMSIS-NN. Par fenêtre ponctuelle, 2,89× plus lent.

Ces chiffres sont-ils mesurés sur silicium réel ?

Non. Les cycles viennent d'une émulation Unicorn 2.1.4 : les absolus sont des bornes inférieures, les rapports sont fiables car les deux bras passent par le même banc. Les précisions, elles, ne sont pas émulées : elles viennent du vrai moteur C99 sur les 2 947 fenêtres de test.