来源:Intel Nervana Systems 编译:T.R
近日,英特尔AI 实验室推出了高性能的神经网络压缩工具Distiller,便捷地实现了更小更快更高效的神经网络计算。Distiller目前在PyTorch中实现了一系列压缩分析算法,包括稀疏引导算法和低精度近似算法。工具包主要由以下三个部分组成:
-
一套集成了剪枝、正则化与量化的算法;
-
一系列分析和评价压缩表现的工具;
-
以及一系列前沿压缩算法的实现样例。
更小更快更节能
目前的绝大多数神经网络都越来越深,其参数达到了百万量级。如此庞大的模型即使在硬件加速的条件下也是十分消耗资源的计算密集型算法,即使只考虑推理阶段也需要花费较多的时间。在某些低延时的场合,比如说自动驾驶和控制领域这样的处理时间就会造成很多问题。同时在消费电子上较长的延时也会造成用户体验的下降。
大型模型同时也会消耗大量的内存,以及随之而来的算力与能耗,这对于移动设备来说是十分重要的问题。同样对于大型数据中心来说模型的能耗也是不同忽视的问题。同时考虑到存储和传输的限制,神经网络的压缩具有十分重要的现实需求。在精度可以接受的条件下,压缩的越小神经网络需要的计算资源和带宽就越少。由于深度神经网络的权重矩阵具有稀疏性,通过正则化和剪枝以及量化过程可以很好的压缩模型的体量。
稀疏的神经网络模型表示可以被大幅度压缩。目前很多神经网络性能都受制于带宽,这意味着它们的计算性能主要取决于可用的带宽,带宽不足的情况下硬件需要用更多的时间将数据输入到计算单元中。全连接层、RNN和LSTM等典型的结构就受制于带宽。如果能够减小这些层所需要的带宽就能大幅提高它们的速度。
通过修剪模型中的某些权重、核甚至是整个层实现减小带宽提高速度的功能,但同时却不影响算法最终精度的表现,也减小了功耗和延时。最后考虑到读写非片上存储的能耗是片上存储的两个量级以上,如果较小的模型可以保存在片上存储中,可以使性能得到质的飞跃,让延时和能耗也随之降低。所以同时稀疏或者压缩表示时,可以有效提升算法的表现。
工具框架
Distiller目前的设计与PyTorch进行集成,其设计理念如下图所示,PyTorch的训练与Distiller进行交互。在distiller中包含了调度、算法和应用等主要模块以及汇总、日志的辅助功能,在很多常见的科学计算包的基础上利用jupyter实现交互功能,基于tensorboard实现模型和日志信息的展示。
算法
Distiller中集成了先进的剪枝和量化算法,帮助用户有效的压缩模型的体量。
剪枝算法主要分为了权重正则化、权重修剪、低精度等三种实现方式,7种具体的方法。
-
幅度剪枝利用阈值来将每一个权重进行二值化,小于阈值的权重将被设为0,不同的层可以设置不同的权值;
-
敏感度剪枝与阈值的方法类似,但使用了敏感因子s与这一层的权重分布标准差σ的乘积来作为阈值。越敏感的层(靠近输入的)设置的s就越小;
-
level剪枝通过设置稀疏度来实现剪枝,这种方法相较于前面方法稳定,因为目标的稀疏程度与元素的赋值不相关。
-
自动梯度剪枝(AGP)
这种方法的稀疏度将会随着初始稀疏和最终稀疏自适应的变化;
-
RNN剪枝
结构剪枝(通过移除整个核、滤波器甚至是整个特征图来实现):包含了结构排序剪枝和对于较少激活特征图的激活相关剪枝。
量化也是一类重要的压缩算法,Distall中同时也集成了四种量化算法:
-
DoReFa-Net: Training Low Bitwidth Convolutional Neural Networks with Low Bitwidth Gradients
-
PACT: Parameterized Clipping Activation for Quantized Neural Networks
-
WRPN: Wide Reduced-Precision Networks
-
对称线性量化
安 装
如果想要使用这个工具的小伙伴,可以到git上下载
$ git clone https://github.com/NervanaSystems/distiller.git
$ cd distiller
然后利用你喜欢的工具创建一个python虚拟环境
$ python3 -m virtualenv env
激活环境并安装对应的依赖包:
$ source env/bin/activate
$ pip3 install -r requirements.txt
注:这一版本依赖于CUDA8.0,会自动安装PyTorch3.1
然后就可以愉快的使用了,可以通过运行下面的文件来熟悉工具的使用:
distiller/examples/classifier_compression/compress_classifier.py
#example
$ python3 compress_classifier.py --arch simplenet_cifar ../../../data.cifar10 -p 30 -j=1 --lr=0.01
#对于cifar10压缩
$ time python3 compress_classifier.py -a alexnet --lr 0.005 -p 50 ../../../data.imagenet -j 44 --epochs 90 --pretrained --compress=../sensitivity-pruning/alexnet.schedule_sensitivity.yaml
#利用yaml配置文件来运行
另外example下还有多个例子可以尝试。
完整实例请参考:
https://github.com/NervanaSystems/distiller#getting-started
Tutorial:https://github.com/NervanaSystems/distiller/wiki/Tutorial:-Using-Distiller-to-prune-a-PyTorch-language-model
Doc: https://nervanasystems.github.io/distiller/index.html
-The End-
将门是一家以技术创新为切入口的早期创新发掘机构,旗下设有将门创新服务、将门技术社群以及将门投资基金。
将门创新服务专注于使创新的技术落地于真正的应用场景,激活和实现全新的商业价值,服务于行业领先企业和技术创新型创业公司。
将门技术社群专注于帮助技术创新型的创业公司提供来自产、学、研、创领域的核心技术专家的技术分享和学习内容,使创新成为持续的核心竞争力。
将门投资基金专注于投资通过技术创新激活商业场景,实现商业价值的初创企业,关注技术领域包括机器智能、物联网、自然人机交互、企业计算。在两年的时间里,将门投资基金已经投资了包括量化派、码隆科技、禾赛科技、宽拓科技、杉数科技、迪英加科技等数十家具有高成长潜力的技术型创业公司。
如果您是技术领域的初创企业,不仅想获得投资,还希望获得一系列持续性、有价值的投后服务,欢迎发送或者推荐项目给我“门”: bp@thejiangmen.com
点击右上角,把文章朋友圈
将门创投
让创新获得认可!
thejiangmen
bp@thejiangmen.com
,