[论文解读] daBNN: A Super Fast Inference Framework for Binary Neural Networks on ARM devices
daBNN 是一种针对 ARM 设备高度优化的开源二值神经网络(BNN)推理框架,通过自定义位打包、二值直接卷积以及内存布局优化,在 C++ 和 ARM 汇编中实现。与 BMXNet 相比,其单个二值卷积的推理速度提升 7×–23×,与 TensorFlow Lite 相比提升 8×–10×,在 Bi-Real Net 18 上通过架构改进实现 30% 的速度提升,这得益于其高效率带来的可能性。
It is always well believed that Binary Neural Networks (BNNs) could drastically accelerate the inference efficiency by replacing the arithmetic operations in float-valued Deep Neural Networks (DNNs) with bit-wise operations. Nevertheless, there has not been open-source implementation in support of this idea on low-end ARM devices (e.g., mobile phones and embedded devices). In this work, we propose daBNN --- a super fast inference framework that implements BNNs on ARM devices. Several speed-up and memory refinement strategies for bit-packing, binarized convolution, and memory layout are uniquely devised to enhance inference efficiency. Compared to the recent open-source BNN inference framework, BMXNet, our daBNN is $7\ imes$$\\sim$$23\ imes$ faster on a single binary convolution, and about $6\ imes$ faster on Bi-Real Net 18 (a BNN variant of ResNet-18). The daBNN is a BSD-licensed inference framework, and its source code, sample projects and pre-trained models are available on-line: https://github.com/JDAI-CV/dabnn.
研究动机与目标
- 为如智能手机和嵌入式系统等低端 ARM 设备解决缺乏快速、开源的 BNN 推理框架的问题。
- 克服现有 BNN 框架(如 BMXNet)在 ARM 上推理速度慢于全精度推理的性能瓶颈。
- 通过提供高速、开源的推理后端,实现 BNN 的高效部署与架构探索。
- 针对 ARM CPU 特别优化位打包、二值卷积和内存访问模式,使用手工调优的汇编语言和 SIMD 指令。
- 支持从 ONNX 到 daBNN 格式的模型转换,实现无需自定义算子的跨框架 BNN 部署。
提出的方法
- 提出一种升级的位打包方案,利用 32 位整数的符号位和 SIMD 右移并覆盖指令,同时打包多个 1 位元素,相比朴素方法将延迟降低约 4 倍。
- 引入“二值直接卷积”以消除 BGEMM 中的冗余 'addv' 指令,通过 XNOR 和 popcount 操作直接计算二值点积。
- 采用新颖的内存布局,通过改善二值张量的数据局部性和对齐性,减少内存访问开销。
- 使用 C++ 实现核心算子,并通过手工优化的 ARM 汇编实现性能提升,同时提供 Java 绑定和 Android 打包支持移动端部署。
- 开发 onnx2bnn 模型转换工具,通过 Sign 操作符检测二值张量,并将 ONNX 模型转换为 daBNN 兼容格式,包含打包权重。
- 支持融合批归一化与二值化层,并通过仅依赖标准 ONNX 算子确保互操作性,避免使用框架特定的自定义层。
实验结果
研究问题
- RQ1一个高度优化的开源 BNN 推理框架是否能在低端 ARM 设备上实现超快推理?
- RQ2使用符号位和 SIMD 指令进行优化的位打包相比朴素的顺序打包,能否显著提升 BNN 推理速度?
- RQ3二值直接卷积是否能优于传统使用 'addv' 指令的 BGEMM 实现?
- RQ4当使用高性能后端时,架构修改(如替换 7×7 卷积)能在多大程度上提升 BNN 推理速度?
- RQ5一个快速的推理框架是否能促成新型高效 BNN 设计的出现,而这些设计在较慢后端上难以实现?
主要发现
- 在单个二值卷积上,daBNN 的推理速度相比 BMXNet 提升 7×–23×,尽管 BMXNet 是唯一开源的 BNN 框架。
- 在单个二值卷积上,daBNN 相比全精度的 TensorFlow Lite 提升 8×–10×,证明 BNN 在 ARM 上可实现比全精度模型更快的推理速度。
- 在 Bi-Real Net 18 上,daBNN 相比 BMXNet 快约 6×,相比 TensorFlow Lite 快 3×,证实其在真实 BNN 中的优越性。
- 在 Google Pixel 1 上,将 Bi-Real Net 18 的首个 7×7 卷积替换为 STEM 模块,可实现 30% 的速度提升且无精度损失,这一优化仅因 daBNN 的高效率才得以实现。
- onnx2bnn 转换工具可实现无缝部署在 TensorFlow 和 PyTorch 中训练的 BNN 模型至 daBNN,避免依赖 BMXNet 等框架的自定义算子。
- daBNN 的开源 BSD 许可证、预编译二进制文件以及 Android 示例项目,显著降低了工业部署和学术研究的门槛。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。