BNN

时间: 2023-08-22 admin IT培训

BNN

BNN

写在最前

    本文介绍阿里IDST部门研发、基于low-bits量化压缩的深度学习框架BNN(Binary Neural Network),BNN具有以下特点:

    1) 跨平台:BNN可以在不同的主流硬件平台上进行部署,包括ARM系列移动端处理器、Intel系列服务器以及正在开发中的NVidia的图形处理器;

    2)压缩比高:使用了自研发low-bits量化压缩技术,在算法精度几乎无损的前提下能达到40-100倍压缩率,而且我们也提供无需重新训练的压缩方式,极大简化了迭代周期;

    3)内嵌高度优化的矩阵运算库GEMMi8:和市面多种主流计算库相比GEMMi8有多至4倍的性能优势;

    4)框架灵活:无第三方依赖,BNN定制化后大小不超过200K。

  基于以上技术,BNN的手机端加速效果比市面上同类产品的快2-3倍;

AI趋势

    近年来,人工智能已经逐渐融入到我们的日常生活,而深度学习作为其中一个分支,在计算机视觉、语音识别等领域也取得了重大突破。深度学习的开源框架也层出不穷,如Caffe[1],Tensorflow[2]等等。与此同时,各大芯片巨头(Intel、NVidia、Xilinx、ARM)也在硬件加速领域动作频频,纷纷推出针对人工智能加速的解决方案,连互联网巨头谷歌也花巨资研发了自己的硬件加速芯片TPU。

    另一方面,如图1所示,随着移动互联网、IoT的蓬勃发展,数据采集、传送量日益增大,云和端的数据传送瓶颈已经浮现,传统的本地采集+云处理方式已经不能满足未来发展的需求,所以为了减轻云端服务的压力,同时满足良好的用户体验、兼顾保护用户隐私,行业领头企业决定将计算任务适当前移,纷纷推出自己的移动端深度学习框架,如脸书的Caffe2Go,腾讯的NCNN,百度的MDL。与服务端不同,移动端深度学习框架受限于严格的设备硬件,在框架大小、性能、内存消耗、模型大小方面都有很高的要求。


图1:边缘计算(云和端之间的数据传输将成为瓶颈)

    AI开发人员一方面需要设计端到端的算法方案,对算法效果进行调优。另一方面需要调研纷繁复杂的深度学习框架和硬件平台组合,确定前向方案,并为了达到上线的性能和成本要求进一步调优,此时往往会涉及到重新调整端到端算法方案,加长了产品迭代周期。为了解决这个瓶颈和痛点,我们提出了跨硬件平台的深度学习前向框架,便于开发者使用和部署,同时针对核心量化压缩以及矩阵运算进行了深度优化,从而在性能上有了进一步的保障。

BNN && GEMMi8

    为了解决上述问题,我们提出了一套基于量化压缩的跨平台深度学习框架:BNN(Binary Neural Network),一个高度优化的轻量深度学习前向框架,使用C/C++语言开发,跨平台,支持读取Caffe模型文件,主要处理卷积神经网络。与市面上大多数移动端解决方案不同,我们的量化压缩技术不仅针对模型的权重,还涉及到输入的特征向量压缩。针对这一特性我们在模型文件和内存大小得到裁剪的同时还对框架的性能做了大量优化。

    另一方面,矩阵乘法是深度学习的核心,也是神经网络中耗时最多的步骤。例如在卷积神经网络中,70%以上的耗时花在卷积层,而在很多深度学习框架中卷积过程被转化成了矩阵乘法的数学模型,因此我们针对性地设计了一套矩阵计算库GEMMi8(General Matrix Multiplication for Int8),内嵌在BNN框架中。GEMMi8是一个低精度矩阵乘法库,兼容x86/ARM架构,可运行在云端、移动端,以及开发中的GPU图形处理器。

    在BNN和GEMMi8的性能优化方面我们做了很多工作,性能的评测上我们将GEMMi8与市面上大量的数学计算库在不同架构上做了矩阵乘法性能对比,包括Tensorflow默认的计算库Eigen[3]和在移动端有很高评价、Caffe使用的计算库OpenBLAS[4],Arm公司自研的Arm Compute Library[5],还有大名鼎鼎的Intel MKL[6],Google的Gemmlowp[7]。评测选择了10个矩阵乘法规模作为基准用例,具体见附录,单线程环境,大部分数据来自实际神经网络中的矩阵大小,评测结果参见图2和图3。

  可以看出矩阵乘法方面,无论是x86架构还是移动端的ARM,GEMMi8相比其它计算库都明显的性能优势(除了用例8,这是由于我们暂时还没有根据矩阵的形状做针对性的优化),高效的矩阵运算库大大缩短了BNN处理神经网络阶段的耗时。


  图2: x86架构矩阵乘法评测



图3: ARM架构矩阵乘法评测

    总体来说,BNN具有以下几个特性(图4):


图4: BNN六大特性

    1. 压缩率高

       在模型压缩方面,我们采用低精度整型代替浮点数据类型,再结合密集存储等技术,在算法准确率几乎无损的前提条件下可以达到40-100倍的压缩率。而且我们也提供无需重新训练的压缩方式,极大简化了迭代周期。目前我们已将模型压缩方案在IDST的Gauss平台服务化,用户可以将训练好的模型上传至云端自动压缩,或者直接在Gauss训练模型,后者的精度更高。关于模型压缩相关算法[8] ,我们后续会单独介绍。


    2.速度快

       我们投入了大部分精力在性能优化上,主要使用的技术有SIMD,多线程,矩阵分块,cache命中率,流水线,指令预取等等,其中核心模块根据不同的硬件架构使用向量化的汇编语言编写,性能业界领先。我们在实际项目中发现,某些场景使用FP32数据类型的传统深度学习框架优化到一定程度后,性能的瓶颈往往在内存读写(Memory Bound),当内存带宽占满后即使处理器提供更高效的运算指令(如浮点数FMA)也无法进一步获得加速。而量化后的低精度整数占用内存远小于FP32,可以获得更高的传输效率,避免CPU在访存上过多地等待。关于BNN在移动端的性能评测,我们将BNN和基于OpenBLAS的Caffe以及腾讯公司的NCNN框架做了对比。考虑到当前移动端硬件配置以摩尔定律递增,不难猜测在不久的将来运行在移动设备的网络模型也会越来越大,我们采用了resnet18网络模型做图像识别,如图5所示,BNN with gemmi8的网络前向性能,是市面上同类产品的2-3倍。


图5: BNN与其它框架性能端上对比

    3.框架轻

       框架无第三方依赖,BNN+GEMMi8定制化后大小不超过200K,可轻松移植到手机端运行。


    4.跨硬件平台

       目前BNN已经可以在Intel x86和ARM的主流CPU上运行,无论是服务器端、移动端、还是IoT场景(如门禁人脸识别、车载设备)都可以运行我们的框架,对GPU端、FPGA的支持也将稍后发布。


    5.可扩展

       针对不同的业务,可添加用户自定义网络层,增加了框架的灵活性。虽然目前仅支持Caffe,后续会逐步增加对主流人工智能框架的支持。


    6.易使用

       从离线的模型压缩到在线的网络前向过程提供自动化服务,无烦杂的人工干预过程。

使用方法

    BNN框架的使用也非常简单(如图6所示),针对训练好的Caffe模型,我们在Gauss平台上有模型压缩的对外服务,也可以使用我们提供的离线工具自动量化,量化后的文件可以直接被BNN框架读取。

    目前BNN只支持Caffe的离线模型量化,后期会逐渐添加对其它主流深度学习框架(如Tensorflow)模型的支持。


图6: BNN使用流程



图7: 端上人脸识别 

写在最后

    在业务落地方面,BNN正接入了集团内多个BU的产品,包括黄图识别,安全部人脸识别项目(如图7),手淘直播等等。

    BNN只是IDST在人工智能算法服务化(AI-as-a-Service)的一个开端,我们的脚步并未放缓,我们希望能够搭建更加完善的服务化框架(如profiling),让人工智能开发者/算法工程师更加专注在场景和端到端方案的设计上。

 


图8: 手机端图像实时分类

附录

矩阵测试用例表,用例2-10来自googlenet和resnet18。  

用例/矩阵规模

Row,Col,Depth

用例1

500,500,500

用例2

2000,2000,2000

用例3

64,3136,64

用例4

128,784,64

用例5

256,196,2304

用例6

512,49,2304

用例7

512,49,4608

用例8

32,12544,27

用例9

1024,49,1024

用例10

128,3136,128

Reference

1.  Caffe ()

2. Tensorflow ()

3. Eigen ()

4. OpenBLAS ()

5. Arm Compute Library ()

6. Intel MKL ()

7. Gemmlowp ()

8. Extremely Low Bit Neural Network: Squeeze the Last Bit Out with ADMM (.09870)


 作者 :李谋、窦则胜、孔建钢、冷聪、李禺、李昊、顾震宇、戴宗宏。