xref: /aosp_15_r20/external/mesa3d/docs/teflon.rst (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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