7.9. TensorFlow Lite for Microcontrollers

TFLM is de runtime die de meeste cams gebruiken om een geladen model uit te voeren. Het parseert het .tflite-bestand – een FlatBuffer van operatoren, gewichten en tensorvormen – en doorloopt de operatorlijst op volgorde, waarbij elke operator naar een kernel wordt gestuurd die de volgende tussenliggende tensor produceert.

Tussenliggende tensoren leven in een tensor-arena met vaste grootte die bij het laden wordt gealloceerd. De cam bepaalt de grootte van de arena in twee passes: eerst wordt een wegwerp-interpreter gebouwd tegen de maximale vrije heap zodat het model het werkgeheugen kan rapporteren dat het nodig heeft; de persistente interpreter wordt vervolgens met precies die grootte plus een kleine marge gealloceerd. Kleinere modellen laten meer heap vrij voor de rest van het script.

TFLM is de engine op de H7, de RT1062 en de AE3.

Drie kolommen naast elkaar. Links: H7 en RT1062 draaien TFLM met CMSIS-NN-kernels op een Cortex-M7. Midden: AE3 draait TFLM met CMSIS-NN en de Ethos-U-operator op een Cortex-M55 met een Ethos-U55 NPU. Rechts: N6 draait STAI op een Neural-ART NPU.

De engine in het midden van predict() is op elke cam-familie een andere stack.

7.9.1. De op-resolver

TFLM levert niet elke kernel mee. De cam linkt een resolver in die de operatoren opsomt die hij kan uitvoeren, en een model dat tegen de resolver wordt geladen faalt bij het laden als het een operator bevat die niet op de lijst staat. De uitgeleverde build registreert de operatoren die gangbaar zijn in vision- en signaalverwerkingsnetwerken – de convolutie- en dense-lagen, de pool- en activeringslagen, de reshape- en concat-operatoren, de quantize- en dequantize-operatoren – zodat een model dat tegen een van de standaardarchitecturen (YOLO, MediaPipe, MobileNet) is getraind laadt zonder de lijst uit te breiden.

De AE3-build registreert daarnaast de Ethos-U-operator. Een Vela-gecompileerd model is verder een normale .tflite, en TFLM doorloopt het normaal; de Vela-getagde subgraphs raken de Ethos-U-operator en sturen naar de NPU.