Need help with XNNPACK?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

google
748 Stars 109 Forks Other 1.2K Commits 29 Opened issues

Description

High-efficiency floating-point neural network inference operators for mobile, server, and Web

Services available

!
?

Need anything else?

Contributors list

XNNPACK

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.

Supported Architectures

  • ARM64 on Android, Linux, macOS, and iOS (including WatchOS and tvOS)
  • ARMv7 (with NEON) on Android, Linux, and iOS (including WatchOS)
  • x86 and x86-64 (up to AVX512) on Windows, Linux, macOS, Android, and iOS simulator
  • WebAssembly MVP
  • WebAssembly SIMD (experimental)

Operator Coverage

XNNPACK implements the following neural network operators:

  • 2D Convolution (including grouped and depthwise)
  • 2D Deconvolution (AKA Transposed Convolution)
  • 2D Average Pooling
  • 2D Max Pooling
  • 2D ArgMax Pooling (Max Pooling + indices)
  • 2D Unpooling
  • 2D Bilinear Resize
  • 2D Depth-to-Space (AKA Pixel Shuffle)
  • Add (including broadcasting, two inputs only)
  • Subtract (including broadcasting)
  • Divide (including broadcasting)
  • Maximum (including broadcasting)
  • Minimum (including broadcasting)
  • Multiply (including broadcasting)
  • Squared Difference (including broadcasting)
  • Global Average Pooling
  • Channel Shuffle
  • Fully Connected
  • Abs (absolute value)
  • Bankers' Rounding (rounding to nearest, ties to even)
  • Ceiling (rounding to integer above)
  • Clamp (includes ReLU and ReLU6)
  • Copy
  • ELU
  • Floor (rounding to integer below)
  • HardSwish
  • Leaky ReLU
  • Negate
  • Sigmoid
  • Softmax
  • Square
  • Truncation (rounding to integer towards zero)
  • PReLU

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.

Performance

Mobile phones

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 | | ------------------ | :-------: | :---------: | :----------: | | MobileNet v1 1.0X | 82 | 86 | 88 | | MobileNet v2 1.0X | 49 | 53 | 55 | | MobileNet v3 Large | 39 | 42 | 44 | | 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 | | ------------------ | :-------: | :---------: | :----------: | | MobileNet v1 1.0X | 43 | 27 | 46 | | MobileNet v2 1.0X | 26 | 18 | 28 | | MobileNet v3 Large | 22 | 16 | 24 | | 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.

Raspberry Pi

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 | | ------------------ | :----------------------: | :-----------------: | :--------------------: | :-----------------: | | MobileNet v1 1.0X | 4004 | 337 | 116 | 72 | | MobileNet v2 1.0X | 2011 | 195 | 83 | 41 | | MobileNet v3 Large | 1694 | 163 | 70 | 38 | | MobileNet v3 Small | 482 | 52 | 23 | 13 |

Benchmarked on May 22, 2020 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.

Publications

Ecosystem

Machine Learning Frameworks

Acknowledgements

XNNPACK is a based on QNNPACK library. Over time its codebase diverged a lot, and XNNPACK API is no longer compatible with QNNPACK.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.