| commit | bf4bdf56e71386fc51b3c193c2fa2e9be7fc1a45 | [log] [tgz] |
|---|---|---|
| author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | Tue May 10 06:59:21 2022 +0000 |
| committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | Tue May 10 06:59:21 2022 +0000 |
| tree | b20a86b43dbf583fddc43486bf32482ce8fc79cc | |
| parent | 9bb27344990a1de989d2d93fccf3a6c002bcfb4f [diff] | |
| parent | d708949e5a9eada8561794c87ec613400dd21a60 [diff] |
Snap for 8564071 from d708949e5a9eada8561794c87ec613400dd21a60 to mainline-cellbroadcast-release Change-Id: I678c37316ddfa673076605db0f10062a443cc638
XNNPACK is a highly optimized library of floating-point neural network inference operators for ARM, WebAssembly, and x86 platforms. XNNPACK is not intended for direct use by deep learning practitioners and researchers; instead it provides low-level performance primitives for accelerating high-level machine learning frameworks, such as TensorFlow Lite, TensorFlow.js, PyTorch, and MediaPipe.
XNNPACK implements the following neural network operators:
All operators in XNNPACK support NHWC layout, but additionally allow custom stride along the Channel dimension. Thus, operators can consume a subset of channels in the input tensor, and produce a subset of channels in the output tensor, providing a zero-cost Channel Split and Channel Concatenation operations.
The table below presents single-threaded performance of XNNPACK library on three generations of MobileNet models and three generations of Pixel phones.
| Model | Pixel, ms | Pixel 2, ms | Pixel 3a, ms |
|---|---|---|---|
| FP32 MobileNet v1 1.0X | 82 | 86 | 88 |
| FP32 MobileNet v2 1.0X | 49 | 53 | 55 |
| FP32 MobileNet v3 Large | 39 | 42 | 44 |
| FP32 MobileNet v3 Small | 12 | 14 | 14 |
The following table presents multi-threaded (using as many threads as there are big cores) performance of XNNPACK library on three generations of MobileNet models and three generations of Pixel phones.
| Model | Pixel, ms | Pixel 2, ms | Pixel 3a, ms |
|---|---|---|---|
| FP32 MobileNet v1 1.0X | 43 | 27 | 46 |
| FP32 MobileNet v2 1.0X | 26 | 18 | 28 |
| FP32 MobileNet v3 Large | 22 | 16 | 24 |
| FP32 MobileNet v3 Small | 7 | 6 | 8 |
Benchmarked on March 27, 2020 with end2end_bench --benchmark_min_time=5 on an Android/ARM64 build with Android NDK r21 (bazel build -c opt --config android_arm64 :end2end_bench) and neural network models with randomized weights and inputs.
The table below presents multi-threaded performance of XNNPACK library on three generations of MobileNet models and three generations of Raspberry Pi boards.
| Model | RPi Zero W (BCM2835), ms | RPi 2 (BCM2836), ms | RPi 3+ (BCM2837B0), ms | RPi 4 (BCM2711), ms | RPi 4 (BCM2711, ARM64), ms |
|---|---|---|---|---|---|
| FP32 MobileNet v1 1.0X | 3937 | 299 | 114 | 72 | 76 |
| FP32 MobileNet v2 1.0X | 1987 | 187 | 79 | 41 | 44 |
| FP32 MobileNet v3 Large | 1658 | 158 | 67 | 38 | 41 |
| FP32 MobileNet v3 Small | 487 | 50 | 23 | 13 | 14 |
| INT8 MobileNet v1 1.0X | 2598 | 169 | 61 | 29 | 24 |
| INT8 MobileNet v2 1.0X | 1487 | 109 | 40 | 20 | 17 |
Benchmarked on Oct 15, 2021 with end2end-bench --benchmark_min_time=5 on a Raspbian Buster build with CMake (./scripts/build-local.sh) and neural network models with randomized weights and inputs. INT8 inference was evaluated on per-channel quantization schema.
XNNPACK is a based on QNNPACK library. Over time its codebase diverged a lot, and XNNPACK API is no longer compatible with QNNPACK.