[论文解读] Espresso: Efficient Forward Propagation for BCNNs
Espresso 是一个轻量级、无依赖的 C/CUDA 库,通过位打包和优化的 CUDA 内核,加速二值卷积神经网络(BCNNs)的前向传播。它通过支持二值化优化的卷积层和全连接层,将内存使用量减少高达 31 倍,实现相较于 CPU 的 85 倍加速和相较于标准 GPU 实现的 16 倍加速,同时支持 CPU 和 GPU 部署,且开销极低。
There are many applications scenarios for which the computational performance and memory footprint of the prediction phase of Deep Neural Networks (DNNs) needs to be optimized. Binary Neural Networks (BDNNs) have been shown to be an effective way of achieving this objective. In this paper, we show how Convolutional Neural Networks (CNNs) can be implemented using binary representations. Espresso is a compact, yet powerful library written in C/CUDA that features all the functionalities required for the forward propagation of CNNs, in a binary file less than 400KB, without any external dependencies. Although it is mainly designed to take advantage of massive GPU parallelism, Espresso also provides an equivalent CPU implementation for CNNs. Espresso provides special convolutional and dense layers for BCNNs, leveraging bit-packing and bit-wise computations for efficient execution. These techniques provide a speed-up of matrix-multiplication routines, and at the same time, reduce memory usage when storing parameters and activations. We experimentally show that Espresso is significantly faster than existing implementations of optimized binary neural networks ($\approx$ 2 orders of magnitude). Espresso is released under the Apache 2.0 license and is available at http://github.com/fpeder/espresso.
研究动机与目标
- 解决在移动和嵌入式设备上部署深度神经网络(DNNs)时面临的高内存和计算成本问题。
- 在最小内存占用和最大速度的前提下,实现二值卷积神经网络(BCNNs)的高效推理。
- 提供一个自包含、无依赖的框架,支持 BCNNs 在 CPU 和 GPU 上的部署。
- 克服先前 BDNN 框架仅优化全连接层而未优化卷积层的局限性。
- 通过将输入拆分为位平面,实现对网络第一层的二值化优化,从而提升整体推理性能。
提出的方法
- 设计专用的二值化优化卷积层和全连接层,在网络加载时仅执行一次位打包,减少重复计算。
- 实现自定义 CUDA 内核,使用位运算和优化的内存访问模式,加速矩阵乘法计算。
- 使用位打包技术高效存储二值权重和激活值,将内存使用量减少高达 31 倍。
- 提出一种新颖的第一层优化方法:将输入特征拆分为 8 个位平面,并通过加权和重新组合结果,以实现二值计算。
- 当批大小为 1 时,用优化的矩阵-矩阵内核(如 sgemv)替代标准的矩阵-向量乘法,以提升性能。
- 集成内存高效的内存分配机制和合并的全局内存访问,以最小化 GPU 延迟并最大化吞吐量。
实验结果
研究问题
- RQ1一个轻量级、无依赖的框架是否能在 CPU 和 GPU 上实现 BCNNs 的最先进推理速度?
- RQ2位打包和位运算计算在减少 BCNNs 中的内存使用量和加速矩阵乘法方面有多有效?
- RQ3能否有效将二值化优化应用于处理非二值输入的卷积神经网络第一层?
- RQ4与先前实现相比,对 BCNNs 中的卷积层和全连接层同时进行优化,能带来多大的性能提升?
- RQ5优化的内核、内存访问和位打包的组合如何影响 BCNNs 的推理速度和内存占用?
主要发现
- 使用 GPU 优化实现时,Espresso 在 CIFAR-10 上实现 1.0ms 的推理时间,相较于 CPU 实现提升 85 倍,相较于标准 GPU 实现提升 16 倍。
- GPU 优化实现将卷积层的内存使用量从 53.54MB 降低至 1.73MB,实现 31 倍的内存减少。
- 第一层的二值化优化通过在输入位平面上启用二值计算,带来 3 倍的性能提升。
- 与标准 GPU 实现相比,Espresso 的优化 CUDA 内核将位打包开销减少 5 倍,且在内存合并方面有显著收益。
- Espresso 的优化矩阵乘法内核通过在合适时机切换至矩阵-矩阵操作,实现高达 15% 的额外性能增益。
- 该框架自包含,大小不足 400KB,采用 Apache 2.0 许可证发布,可轻松部署于嵌入式和移动平台。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。