7.10. CMSIS-NN¶
Die Operatorliste, die TFLM durchläuft, besteht überwiegend aus einer Handvoll schwergewichtiger Operatoren: Convolution schiebt ein kleines Gitter gelernter Gewichte über einen Eingangstensor und schreibt an jeder Position die gewichtete Summe; Depthwise Convolution tut dasselbe pro Kanal; Fully-connected multipliziert eine Matrix zwischen einem Vektor von Eingaben und einer Matrix von Gewichten; Pooling verkleinert einen Tensor, indem es das Maximum oder den Durchschnitt über kleine Nachbarschaften bildet; Aktivierungsfunktionen wie ReLU und Sigmoid laufen punktweise über jeden Wert. Eine Vision-Inferenz verbringt die meisten ihrer Zyklen innerhalb dieser wenigen Operatoren.
Auf die naheliegende Weise implementiert, wären sie auf einem Mikrocontroller langsam. CMSIS-NN ist Arms Bibliothek schneller Operatoren – von Hand in Assembler optimiert, ganzzahlig quantisiert auf die int8- und uint8-Werte, die tensor I/O beschrieben hat, und gegen die SIMD-Befehle der CPU geschrieben. SIMD – Single Instruction, Multiple Data – erlaubt es der CPU, eine arithmetische Operation im selben Zyklus über mehrere Werte hinweg auszuführen. Eine schlichte skalare Multiply-Add erzeugt ein Ergebnis pro Zyklus; eine SIMD-Multiply-Add packt mehrere Werte in ein breites Register und erzeugt sie alle auf einmal.
Der Cortex-M7 auf dem H7 und dem RT1062 verfügt über Arms DSP-Erweiterung, die vier int8-Werte in einem 32-Bit-Register hält und über alle vier in einem Zyklus eine Multiply-Add ausführt. Der Cortex-M55 auf dem AE3 verfügt über Helium – formal MVE, die M-Profile Vector Extension –, die sechzehn int8-Lanes in einem 128-Bit-Register hält, viermal den Durchsatz pro Zyklus. Helium ist ein breiterer CPU-Befehlssatz, kein Beschleuniger; die Ethos-U55 NPU auf demselben Die ist der Beschleuniger.
Die ausgelieferten TFLM-Builds sind gegen CMSIS-NN gelinkt, und TFLM weist jeden schwergewichtigen Operator zur Laufzeit der richtigen SIMD-Variante für die Kamera zu. Auf dem AE3 ist die Zuweisung etwas aufwändiger: Der Vela-Compiler hat das Modell bereits offline durchlaufen und zusammenhängende Schnitte NPU-fähiger Operatoren – Subgraphen – für die Zuweisung an die Ethos-U markiert. Zur Inferenzzeit laufen diese Subgraphen in einem Block auf dem Beschleuniger, und der Rest fällt auf Helium-CMSIS-NN auf dem M55 zurück.
Float-Operatoren umgehen CMSIS-NN vollständig und laufen über TFLMs portable Referenz-Kernel. Die Genauigkeitslücke zwischen einem int8- und einem Float-Modell ist meist klein; die Durchsatzlücke ist groß. Auf der Kamera ausgelieferte Modelle sind aus diesem Grund auf int8 quantisiert.