1*61046927SAndroid Build Coastguard WorkerTensorFlow Lite delegate 2*61046927SAndroid Build Coastguard Worker======================== 3*61046927SAndroid Build Coastguard Worker 4*61046927SAndroid Build Coastguard WorkerMesa contains a TensorFlow Lite delegate that can make use of NPUs to accelerate ML inference. It is implemented in the form of a *external delegate*, a shared library that the TensorFlow Lite runtime can load at startup. See https://www.tensorflow.org/api_docs/python/tf/lite/experimental/load_delegate. 5*61046927SAndroid Build Coastguard Worker 6*61046927SAndroid Build Coastguard Worker.. list-table:: Supported acceleration hardware 7*61046927SAndroid Build Coastguard Worker :header-rows: 1 8*61046927SAndroid Build Coastguard Worker 9*61046927SAndroid Build Coastguard Worker * - Gallium driver 10*61046927SAndroid Build Coastguard Worker - NPU supported 11*61046927SAndroid Build Coastguard Worker - Hardware tested 12*61046927SAndroid Build Coastguard Worker * - Etnaviv 13*61046927SAndroid Build Coastguard Worker - ``VeriSilicon VIPNano-QI.7120`` 14*61046927SAndroid Build Coastguard Worker - ``Amlogic A311D on Libre Computer AML-A311D-CC Alta and Khadas VIM3`` 15*61046927SAndroid Build Coastguard Worker 16*61046927SAndroid Build Coastguard Worker.. list-table:: Tested models 17*61046927SAndroid Build Coastguard Worker :header-rows: 1 18*61046927SAndroid Build Coastguard Worker 19*61046927SAndroid Build Coastguard Worker * - Model name 20*61046927SAndroid Build Coastguard Worker - Data type 21*61046927SAndroid Build Coastguard Worker - Link (may be outdated) 22*61046927SAndroid Build Coastguard Worker - Status 23*61046927SAndroid Build Coastguard Worker - Inference speed on AML-A311D-CC Alta 24*61046927SAndroid Build Coastguard Worker * - MobileNet V1 25*61046927SAndroid Build Coastguard Worker - UINT8 26*61046927SAndroid Build Coastguard Worker - http://download.tensorflow.org/models/mobilenet_v1_2018_08_02/mobilenet_v1_1.0_224_quant.tgz 27*61046927SAndroid Build Coastguard Worker - Fully supported 28*61046927SAndroid Build Coastguard Worker - ~15 ms 29*61046927SAndroid Build Coastguard Worker * - MobileNet V2 30*61046927SAndroid Build Coastguard Worker - UINT8 31*61046927SAndroid Build Coastguard Worker - https://storage.googleapis.com/mobilenet_v2/checkpoints/quantized_v2_224_100.tgz 32*61046927SAndroid Build Coastguard Worker - Fully supported 33*61046927SAndroid Build Coastguard Worker - ~15.5 ms 34*61046927SAndroid Build Coastguard Worker * - SSDLite MobileDet 35*61046927SAndroid Build Coastguard Worker - UINT8 36*61046927SAndroid Build Coastguard Worker - https://raw.githubusercontent.com/google-coral/test_data/master/ssdlite_mobiledet_coco_qat_postprocess.tflite 37*61046927SAndroid Build Coastguard Worker - Fully supported 38*61046927SAndroid Build Coastguard Worker - ~53 ms 39*61046927SAndroid Build Coastguard Worker 40*61046927SAndroid Build Coastguard WorkerBuild 41*61046927SAndroid Build Coastguard Worker----- 42*61046927SAndroid Build Coastguard Worker 43*61046927SAndroid Build Coastguard WorkerBuild Mesa as usual, with the -Dteflon=true argument. 44*61046927SAndroid Build Coastguard Worker 45*61046927SAndroid Build Coastguard WorkerExample instructions: 46*61046927SAndroid Build Coastguard Worker 47*61046927SAndroid Build Coastguard Worker.. code-block:: console 48*61046927SAndroid Build Coastguard Worker 49*61046927SAndroid Build Coastguard Worker # Install build dependencies 50*61046927SAndroid Build Coastguard Worker ~ # apt-get -y build-dep mesa 51*61046927SAndroid Build Coastguard Worker ~ # apt-get -y install git cmake 52*61046927SAndroid Build Coastguard Worker 53*61046927SAndroid Build Coastguard Worker # Download sources 54*61046927SAndroid Build Coastguard Worker ~ $ git clone https://gitlab.freedesktop.org/mesa/mesa.git 55*61046927SAndroid Build Coastguard Worker 56*61046927SAndroid Build Coastguard Worker # Build Mesa 57*61046927SAndroid Build Coastguard Worker ~ $ cd mesa 58*61046927SAndroid Build Coastguard Worker mesa $ meson setup build -Dgallium-drivers=etnaviv -Dvulkan-drivers= -Dteflon=true 59*61046927SAndroid Build Coastguard Worker mesa $ meson compile -C build 60*61046927SAndroid Build Coastguard Worker 61*61046927SAndroid Build Coastguard WorkerInstall runtime dependencies 62*61046927SAndroid Build Coastguard Worker---------------------------- 63*61046927SAndroid Build Coastguard Worker 64*61046927SAndroid Build Coastguard WorkerYour board should have booted into a mainline 6.7 or greater kernel and have the etnaviv driver loaded. You will also need to enable the NPU device in the device tree by means of an overlay or by a change such as the below (and rebuild the DTB): 65*61046927SAndroid Build Coastguard Worker 66*61046927SAndroid Build Coastguard Worker.. code-block:: diff 67*61046927SAndroid Build Coastguard Worker 68*61046927SAndroid Build Coastguard Worker diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts 69*61046927SAndroid Build Coastguard Worker index 4aa2b20bfbf2..4e8266056bca 100644 70*61046927SAndroid Build Coastguard Worker --- a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts 71*61046927SAndroid Build Coastguard Worker +++ b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts 72*61046927SAndroid Build Coastguard Worker @@ -50,6 +50,10 @@ galcore { 73*61046927SAndroid Build Coastguard Worker }; 74*61046927SAndroid Build Coastguard Worker }; 75*61046927SAndroid Build Coastguard Worker 76*61046927SAndroid Build Coastguard Worker +&npu { 77*61046927SAndroid Build Coastguard Worker + status = "okay"; 78*61046927SAndroid Build Coastguard Worker +}; 79*61046927SAndroid Build Coastguard Worker + 80*61046927SAndroid Build Coastguard Worker /* 81*61046927SAndroid Build Coastguard Worker * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential 82*61046927SAndroid Build Coastguard Worker * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between 83*61046927SAndroid Build Coastguard Worker 84*61046927SAndroid Build Coastguard Worker 85*61046927SAndroid Build Coastguard Worker.. code-block:: console 86*61046927SAndroid Build Coastguard Worker 87*61046927SAndroid Build Coastguard Worker # Install Python 3.10 and dependencies (as root) 88*61046927SAndroid Build Coastguard Worker ~ # echo deb-src http://deb.debian.org/debian testing main >> /etc/apt/sources.list 89*61046927SAndroid Build Coastguard Worker ~ # echo deb http://deb.debian.org/debian unstable main >> /etc/apt/sources.list 90*61046927SAndroid Build Coastguard Worker ~ # echo 'APT::Default-Release "testing";' >> /etc/apt/apt.conf 91*61046927SAndroid Build Coastguard Worker ~ # apt-get update 92*61046927SAndroid Build Coastguard Worker ~ # apt-get -y install python3.10 python3-pytest python3-exceptiongroup 93*61046927SAndroid Build Coastguard Worker 94*61046927SAndroid Build Coastguard Worker # Install TensorFlow Lite Python package (as non-root) 95*61046927SAndroid Build Coastguard Worker ~ $ python3.10 -m pip install --break-system-packages tflite-runtime==2.13.0 96*61046927SAndroid Build Coastguard Worker 97*61046927SAndroid Build Coastguard WorkerDo some inference with MobileNetV1 98*61046927SAndroid Build Coastguard Worker---------------------------------- 99*61046927SAndroid Build Coastguard Worker 100*61046927SAndroid Build Coastguard Worker.. code-block:: console 101*61046927SAndroid Build Coastguard Worker 102*61046927SAndroid Build Coastguard Worker ~ $ cd mesa/ 103*61046927SAndroid Build Coastguard Worker mesa $ TEFLON_DEBUG=verbose ETNA_MESA_DEBUG=ml_dbgs python3.10 src/gallium/frontends/teflon/tests/classification.py -i ~/tensorflow/assets/grace_hopper.bmp -m src/gallium/targets/teflon/tests/mobilenet_v1_1.0_224_quant.tflite -l src/gallium/frontends/teflon/tests/labels_mobilenet_quant_v1_224.txt -e build/src/gallium/targets/teflon/libteflon.so 104*61046927SAndroid Build Coastguard Worker 105*61046927SAndroid Build Coastguard Worker Loading external delegate from build/src/gallium/targets/teflon/libteflon.so with args: {} 106*61046927SAndroid Build Coastguard Worker Teflon delegate: loaded etnaviv driver 107*61046927SAndroid Build Coastguard Worker 108*61046927SAndroid Build Coastguard Worker teflon: compiling graph: 89 tensors 28 operations 109*61046927SAndroid Build Coastguard Worker idx scale zp has_data size 110*61046927SAndroid Build Coastguard Worker ======================================= 111*61046927SAndroid Build Coastguard Worker 0 0.023528 0 no 1x1x1x1024 112*61046927SAndroid Build Coastguard Worker 1 0.166099 42 no 1x1x1x1001 113*61046927SAndroid Build Coastguard Worker 2 0.000117 0 yes 1001x0x0x0 114*61046927SAndroid Build Coastguard Worker 3 0.004987 4a yes 1001x1x1x1024 115*61046927SAndroid Build Coastguard Worker 4 0.166099 42 no 1x1001x0x0 116*61046927SAndroid Build Coastguard Worker 5 0.166099 42 yes 2x0x0x0 117*61046927SAndroid Build Coastguard Worker 6 0.000171 0 yes 32x0x0x0 118*61046927SAndroid Build Coastguard Worker 7 0.023528 0 no 1x112x112x32 119*61046927SAndroid Build Coastguard Worker 8 0.021827 97 yes 32x3x3x3 120*61046927SAndroid Build Coastguard Worker 9 0.023528 0 no 1x14x14x512 121*61046927SAndroid Build Coastguard Worker ... 122*61046927SAndroid Build Coastguard Worker 123*61046927SAndroid Build Coastguard Worker idx type in out operation type-specific 124*61046927SAndroid Build Coastguard Worker ================================================================================================ 125*61046927SAndroid Build Coastguard Worker 0 CONV 88 7 w: 8 b: 6 stride: 2 pad: SAME 126*61046927SAndroid Build Coastguard Worker 1 DWCONV 7 33 w: 35 b: 34 stride: 1 pad: SAME 127*61046927SAndroid Build Coastguard Worker 2 CONV 33 37 w: 38 b: 36 stride: 1 pad: SAME 128*61046927SAndroid Build Coastguard Worker 3 DWCONV 37 39 w: 41 b: 40 stride: 2 pad: SAME 129*61046927SAndroid Build Coastguard Worker 4 CONV 39 43 w: 44 b: 42 stride: 1 pad: SAME 130*61046927SAndroid Build Coastguard Worker 5 DWCONV 43 45 w: 47 b: 46 stride: 1 pad: SAME 131*61046927SAndroid Build Coastguard Worker 6 CONV 45 49 w: 50 b: 48 stride: 1 pad: SAME 132*61046927SAndroid Build Coastguard Worker 7 DWCONV 49 51 w: 53 b: 52 stride: 2 pad: SAME 133*61046927SAndroid Build Coastguard Worker 8 CONV 51 55 w: 56 b: 54 stride: 1 pad: SAME 134*61046927SAndroid Build Coastguard Worker 9 DWCONV 55 57 w: 59 b: 58 stride: 1 pad: SAME 135*61046927SAndroid Build Coastguard Worker 10 CONV 57 61 w: 62 b: 60 stride: 1 pad: SAME 136*61046927SAndroid Build Coastguard Worker 11 DWCONV 61 63 w: 65 b: 64 stride: 2 pad: SAME 137*61046927SAndroid Build Coastguard Worker 12 CONV 63 67 w: 68 b: 66 stride: 1 pad: SAME 138*61046927SAndroid Build Coastguard Worker 13 DWCONV 67 69 w: 71 b: 70 stride: 1 pad: SAME 139*61046927SAndroid Build Coastguard Worker 14 CONV 69 73 w: 74 b: 72 stride: 1 pad: SAME 140*61046927SAndroid Build Coastguard Worker 15 DWCONV 73 75 w: 77 b: 76 stride: 1 pad: SAME 141*61046927SAndroid Build Coastguard Worker 16 CONV 75 79 w: 80 b: 78 stride: 1 pad: SAME 142*61046927SAndroid Build Coastguard Worker 17 DWCONV 79 81 w: 83 b: 82 stride: 1 pad: SAME 143*61046927SAndroid Build Coastguard Worker 18 CONV 81 85 w: 86 b: 84 stride: 1 pad: SAME 144*61046927SAndroid Build Coastguard Worker 19 DWCONV 85 9 w: 11 b: 10 stride: 1 pad: SAME 145*61046927SAndroid Build Coastguard Worker 20 CONV 9 13 w: 14 b: 12 stride: 1 pad: SAME 146*61046927SAndroid Build Coastguard Worker 21 DWCONV 13 15 w: 17 b: 16 stride: 1 pad: SAME 147*61046927SAndroid Build Coastguard Worker 22 CONV 15 19 w: 20 b: 18 stride: 1 pad: SAME 148*61046927SAndroid Build Coastguard Worker 23 DWCONV 19 21 w: 23 b: 22 stride: 2 pad: SAME 149*61046927SAndroid Build Coastguard Worker 24 CONV 21 25 w: 26 b: 24 stride: 1 pad: SAME 150*61046927SAndroid Build Coastguard Worker 25 DWCONV 25 27 w: 29 b: 28 stride: 1 pad: SAME 151*61046927SAndroid Build Coastguard Worker 26 CONV 27 31 w: 32 b: 30 stride: 1 pad: SAME 152*61046927SAndroid Build Coastguard Worker 27 POOL 31 0 filter: 0x0 stride: 0 pad: VALID 153*61046927SAndroid Build Coastguard Worker 154*61046927SAndroid Build Coastguard Worker teflon: compiled graph, took 10307 ms 155*61046927SAndroid Build Coastguard Worker teflon: invoked graph, took 21 ms 156*61046927SAndroid Build Coastguard Worker teflon: invoked graph, took 17 ms 157*61046927SAndroid Build Coastguard Worker teflon: invoked graph, took 17 ms 158*61046927SAndroid Build Coastguard Worker teflon: invoked graph, took 17 ms 159*61046927SAndroid Build Coastguard Worker teflon: invoked graph, took 16 ms 160*61046927SAndroid Build Coastguard Worker 0.866667: military uniform 161*61046927SAndroid Build Coastguard Worker 0.031373: Windsor tie 162*61046927SAndroid Build Coastguard Worker 0.015686: mortarboard 163*61046927SAndroid Build Coastguard Worker 0.007843: bow tie 164*61046927SAndroid Build Coastguard Worker 0.007843: academic 165