转载自:CSDN Nine-days
 

近日,Intel 开源了一个用于神经网络压缩的开源 Python 软件包 Distiller,它可以减少深度神经网络的内存占用、加快推断速度及节省能耗。Distiller 为 PyTorch 环境提供原型和分析压缩算法,例如产生稀疏性张量的方法和低精度运算等。

项目地址:https://github.com/NervanaSystems/distiller/

文档地址:https://nervanasystems.github.io/distiller/index.html

深度学习正快速发展,它从输入法到汽车已经应用到各种场景和设备当中。但它们所采用的深度神经网络在运算时间、计算力、内存和能耗上都有非常大的需求。很多开发者考虑到硬件和软件的限制及实际应用的环境,而在算法准确度、速度和功耗之间取得平衡。近日,Intel 人工智能实验室开源了 Neural NetworkDistiller,它是一个为神经网络压缩算法研究而设计的 Python 包。Intel 认为深度网络的压缩可以成为促进更多的研究成果投入应用,并实现更优秀的功能。

深度网络压缩

面向用户的深度学习应用需要高度重视用户体验,因为交互式的应用通常对程序的响应时间非常敏感。谷歌的内部研究发现即使很小的服务响应延迟,它对用户的影响也非常显著。而随着越来越多的应用由深度模型提供核心功能,不论我们将模型部署在云端还是移动端,低延迟的推断变得越来越重要。

减少计算资源和加快推断速度的一种方法是从一开始就设计一种紧凑型的神经网络架构。例如 SqueezeNet 和 MobileNet 都旨在压缩参数数量与计算量的情况下尽可能保留较高的准确度,而 Intel 人工智能实验室也在设计这种紧凑型的模型,即提出了一种用于深层 DNN 的无监督结构学习方法,以获得紧凑的网络结构与高准确率。

而另一种降低计算力需求的方法直接从通用且性能优秀的深度网络架构开始,然后通过一些算法过程将其转换为更加短小精悍的网络,这种方法即神经网络压缩。

神经网络压缩是降低计算力、存储空间、能耗、内存和推断时间等需求的过程(至少其一),它同时还需要保持其推断准确性不下降或在可接受的范围内。通常这些资源是相互关联的,减少一种资源的需求同时会降低其它资源的需求。此外,即使我们使用前面几种紧凑的小模型,我们同样可以使用压缩算法进一步减少计算资源的需求。

其实很多研究都表明深度神经网络存在着非常高的参数冗余,虽然这些参数冗余在收敛到更优解时是非常必要的,但在推断过程中可以大量减少参数与计算量。总体而言,绝大多数压缩方法在于将巨大的预训练模型转化为一个精简的小模型,且常用的方法有低秩近似、神经元级别的剪枝、卷积核级别的剪枝、参数量化及知识蒸馏等。

例如在量化这一常见的压缩算法中,我们只需储存 k 个聚类中心 c_j,而原权重矩阵只需要记录各自聚类中心的索引就行。在韩松 ICLR 2016 的最佳论文中,他用如下一张图非常形象地展示了量化的概念与过程。

如上所示权重矩阵的所有参数可以聚类为 4 个类别,不同的类别使用不同的颜色表示。上半部分的权重矩阵可以取聚类中心,并储存在 centroids 向量中,随后原来的权重矩阵只需要很少的空间储存对应的索引。下半部是韩松等研究者利用反向传播的梯度对当前 centroids 向量进行修正的过程。这种量化过程能大量降低内存的需求,因为我们不再需要储存 FP64 或 FP32 的数据,而只需要储存 INT8 或更少占位的数据。

Distiller 简介

Intel 主要根据以下特征和工具构建了 Distiller:

  • 集成了剪枝、正则化和量化算法的框架

  • 分析和评估压缩性能的一组工具

  • 当前最优压缩算法的示例实现

剪枝和正则化是两种可以令深度网络参数张量产生稀疏性的方法,其中稀疏性度量的是参数张量中有多少数值精确为 0。稀疏张量可以更紧凑地储存在内存中,并且可以减少执行 DNN 运算所需要的计算量和能耗。量化是另一种减少 DNN 中数据精度的方法,它同样会减少内存、能耗和计算力需求。Distiller 为量化、剪枝(结构化剪枝和细粒度剪枝)和诱导稀疏性的正则化等方法提供了越来越多的当前最优算法,并支持训练更快、更紧凑和更节能的模型。

为了帮助研究者更专注于它们的任务,Intel 尝试提供一些大多数研究者都需要了解的压缩算法,并同时提供了高级和底层函数以方便使用。例如:

  • 剪枝方法在深度网络经过训练后,动态地从卷积网络层级移除卷积核与通道。Distiller 将在目标层配置中执行这些变化,并且同时对网络的参数张量做剪枝。此外,Distiller 还将分析模型中的数据依赖性,并在需要时修改依赖层。

  • Distiller 可以自动对模型执行量化操作,即使用量化后的层级副本替代具体的层级类型。这将节省手动转换每一个浮点模型为低精度形式的工作,并允许我们专注于开发量化方法,且在多种模型中扩展和测试它。

Intel 已经通过 Jupyter Notebook 介绍并展示如何从网络模型和压缩过程中访问统计信息。例如,如果我们希望移除一些卷积核,那么可以运行用于滤波器剪枝敏感性分析的模块,并得到类似以下的结果:

Jupyter Notebook 地址:https://nervanasystems.github.io/distiller/jupyter/index.html

Distiller 的统计数据可导出为 Pandas DataFrames,它可用于数据选择(索引和截取等)和可视化。

Distiller 还展示了一些示例应用,并使用量化和剪枝等方法压缩图像分类网络和语言模型。Distiller 还实现了一些神经网络压缩的前沿研究论文,它们也可以作为我们尝试新方法的模板。此外,我们也可以在官方 PyTorch 深度预训练模型上使用这些压缩算法,以降低计算资源的需求。

Distiller 压缩示例:https://nervanasystems.github.io/distiller/model_zoo/index.html

这只是个开始

Distiller 是一个用于压缩算法研究的库,它致力于帮助科学家和工程师训练并部署 DL 的解决方案、帮助发布研究论文以及促进算法更新与创新。Intel 目前也在添加更多的算法、特征和应用领域,如果读者对于研究并实现 DNN 压缩算法很感兴趣,也可以帮助改进并提升 Distiller 库。最后,Distiller 非常欢迎新的想法与深度网络压缩算法,同时也希望开发者能多发现该库的 Bug。

以下是在运行github的

python3 compress_classifier.py --arch simplenet_cif
ar ../../../data.cifar10 -p 30 -j=1 --lr=0.01

出现的错误:

1.ModuleNotFoundError: No module named 'distiller'

这是因为我是通过pip install -r requirements.txt来安装各种依赖的,没有运行pip install -e . 导致distiller模块没有导入进去。

2.AttributeError: module ‘tensorboard' has no attribute 'lazy'(谷歌出来的结果是Make sure that you don't have tb-nightly installed in your env.)

我采用pip uninstall tb-nightly指令发现并没有安装,于是卸载了虚拟环境中的tensorboard,这样也解决了错误。

Intel发布神经网络压缩库Distiller:快速利用前沿算法压缩PyTorch模型——AttributeError: module ‘tensorboard' has no attribute 'lazy'的更多相关文章

  1. pycharm 安装第三方库报错:AttributeError: 'module' object has no attribute 'main'

    pip升级到 10.0.1 之后 老版的pycharm 使用pip安装第三方库的时候会报错,报错如上图所示: 其主要原因是 新版的 pip 更改了 部分api 将其中 pip.main() 改为 pi ...

  2. 【神经网络与深度学习】Google Snappy - 一个高速压缩库

    Snappy已经被Google开源,作为一个压缩库,它可以利用单颗Intel Corei7处理器内核处理至少每秒250MB~500MB的数据流. Snappy的前身是Zippy.虽然只是一个数据压缩库 ...

  3. 【我的Android进阶之旅】快速创建和根据不同的版本类型(Dev、Beta、Release)发布Android 开发库到Maven私服

    前言 由于项目越来越多,有很多公共的代码都可以抽取出一个开发库出来传到公司搭建好的Maven私服,以供大家使用. 之前搭建的Maven仓库只有Release和Snapshot两个仓库,最近由于开发库有 ...

  4. 创建/发布cocoapods公共库

    对于大多数iOS开发者而言,cocoapods都是一个非常便捷的第三方库引导工具,该工具可以帮助我们快速导入所需第三方库,并且进行相关配置. 本文即为描述如何发布一个第三方库,提供给所有的开发者使用. ...

  5. MWeb for Mac使用教程-如何在文档库中快速搜索

    使用MWeb for Mac专业的 Markdown 编辑写作软件,可以让你随时记录自己的想法,灵感,创意,为您的工作节省宝贵的时间.本篇文章带来的是MWeb for Mac如何在文档库中快速搜索使用 ...

  6. 3D文件压缩库——Draco简析

    3D文件压缩库——Draco简析 今年1月份时,google发布了名为“Draco”的3D图形开源压缩库,下载了其代码来看了下,感觉虽然暂时用不到,但还是有前途的,故简单做下分析. 注:Draco 代 ...

  7. webpack快速入门——配置JS压缩,打包

    1 .首先在webpack.config.js中引入 const uglify = require('uglifyjs-webpack-plugin'); 2.然后在plugins配置里 plugin ...

  8. 发布Android开源库,看这个文章就够了!

    最近在Flipboard实习期间写了一个轮播工具,技术上没什么难点,不过动画效果还是不错的,决定改改代码写个库开源出去.项目地址:http://github.com/chengdazhi/Decent ...

  9. [转]Snappy压缩库安装和使用之一

    Snappy压缩库安装和使用之一 原文地址:http://blog.csdn.net/luo6620378xu/article/details/8521223 近日需要在毕业设计中引入一个压缩库,要求 ...

随机推荐

  1. 《C++Primer》第五版习题答案--第三章【学习笔记】

    [C++Primer]第五版[学习笔记]习题解答第三章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/10 第三章:字符串,向量和数组 ...

  2. 小白学 Python 爬虫(37):爬虫框架 Scrapy 入门基础(五) Spider Middleware

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  3. MySQL插入操作

    说明:value的值可以为数据,DEFAULT,NULL,expr 含有ATUO_INCREMENT的列可以插入DEFAULT.NULL,或者不插入记录来实现自动增长. 插入记录的三种方法:①可以同时 ...

  4. 简单的c语言程序

    我猜大部分人第一门掌握的语言是c语言吧(我第一门学的是python). 在接下来的文章里我会逐步的介绍有关自己对c语言的理解,希望对一些小伙伴有帮助,有哪里有错误希望大佬指出. 首先这是第一个c语言程 ...

  5. vuex使用面板报 Unexpected token错误

    Module build failed: SyntaxError: D:/frontend/webtest/src/components/mutations.vue: Unexpected token ...

  6. cogs 2109. [NOIP 2015] 运输计划 提高组Day2T3 树链剖分求LCA 二分答案 差分

    2109. [NOIP 2015] 运输计划 ★★★☆   输入文件:transport.in   输出文件:transport.out   简单对比时间限制:3 s   内存限制:256 MB [题 ...

  7. java实现FTP文件下载

    package com.vingsoft.util;/*** @author 作者:dujj* @version 创建时间:2020年1月13日 下午5:53:39*/import java.io.F ...

  8. Win10永久版低价购买及激活工具使用说明

    目录 按 发展历程 用户界面 激活工具 按 Windows 10是由美国微软公司开发的应用于计算机和平板电脑的操作系统,于2015年7月29日发布正式版. Windows 10操作系统在易用性和安全性 ...

  9. numpy 索引和切片

    一.取行 1.单行 数组[index, :] # 取第index+1行 例子 import numpy as np arr1 = np.arange(0, 24).reshape(4, 6) # 取第 ...

  10. 【转载】Notepad++源码分析

    在网上发现了一个哥们写了关于Notepad++源码的文章,不过就写了一就没有了,我就接着他的工作再说说吧! 大三了,也写了一点儿程序了,但是如果只是按照自己的思路写下去恐怕难以提高,于是准备开始阅读一 ...