配x 中止项目-该项目将不再由英特尔维护。该项目已被确定为已知的安全逃逸。英特尔停止了对该项目的开发和贡献,包括但不限于维护,错误修复,新版本或更新。英特尔不再接受此项目的补丁。

Distiller是用于神经网络压缩研究的开源Python软件包。
网络压缩可以减少神经网络的内存足迹,提高其推理速度并节省能量。 Distiller提供了一种用于原型制作和分析压缩算法的pytorch环境,例如诱导稀疏的方法和低精度算术。
这些说明将有助于在本地机器上启动并运行蒸馏器。
克隆Github的蒸馏器代码存储库:
$ git clone https://github.com/IntelLabs/distiller.git
随后的文档的其余文档假设您将存储库克隆到一个名为distiller目录。
我们建议使用Python虚拟环境,但这当然取决于您。在虚拟环境中使用蒸馏器没有什么特别的,但是我们提供一些说明,以实现完整性。
在创建虚拟环境之前,请确保您位于目录distiller中。创建环境后,您应该看到一个名为distiller/env的目录。
如果您没有安装Virtualenv,则可以在此处找到安装说明。
要创建环境,请执行:
$ python3 -m virtualenv env
这创建了一个命名为env的子目录,其中存储了Python虚拟环境,并配置了当前的Shell将其用作默认的Python环境。
如果您喜欢使用venv ,请首先安装它:
$ sudo apt-get install python3-venv
然后创建环境:
$ python3 -m venv env
与Virtualenv一样,这将创建一个名为distiller/env的目录。
venv和virtualenv的环境激活和停用命令是相同的。
!注意:在进行依赖项软件包的安装之前,请确保激活环境:
$ source env/bin/activate
最后,使用pip3安装蒸馏器软件包及其依赖项:
$ cd distiller
$ pip3 install -e .
这将在“开发模式”中安装蒸馏器,这意味着代码中所做的任何更改都会反映在环境中,而无需重新运行安装命令(因此,从GIT存储库中提取更改后,无需重新安装)。
笔记:
使用pytorch 1.3.1的默认安装进行了测试,该安装使用CUDA 10.1。我们使用Torchvision版本0.4.2。这些包含在Distiller的requirements.txt中。txt,并在安装上述酿酒厂包装时将自动安装。
如果您在环境中不使用CUDA 10.1,请参阅Pytorch网站以安装Pytorch 1.3.1和Torchvision 0.4.2的兼容构建。
蒸馏器附带示例应用程序和涵盖一系列模型类型的教程:
| 型号类型 | 稀疏 | 训练后量化 | 量化感知培训 | 自动压缩(AMC) | 知识蒸馏 |
|---|---|---|---|---|---|
| 图像分类 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 单词级语言模型 | ✅ | ✅ | |||
| 翻译(GNMT) | ✅ | ||||
| 推荐系统(NCF) | ✅ | ||||
| 对象检测 | ✅ |
前往示例目录以获取更多详细信息。
除示例外,其他参考的资源:
以下是使用蒸馏器的图像分类样本的简单示例,显示了一些蒸馏器的功能。
以下将调用CIFAR10数据集上名为“ SimpleNet”网络的仅培训(无压缩)。这大致基于Torchvision的示例Imagenet培训应用程序,因此,如果您使用该应用程序,则应该熟悉。在此示例中,我们没有调用任何压缩机制:我们只是训练,因为修剪后进行微调,训练是必不可少的部分。
请注意,您第一次执行此命令时,CIFAR10代码将被下载到您的计算机上,这可能需要一些时间 - 请让下载过程继续完成。
通往CIFAR10数据集的路径是任意的,但是在我们的示例中,我们将数据集放置在与Distiller( ../../../data.cifar10
首先,更改为示例目录,然后调用应用程序:
$ cd distiller/examples/classifier_compression
$ python3 compress_classifier.py --arch simplenet_cifar ../../../data.cifar10 -p 30 -j=1 --lr=0.01
您可以使用张板后端查看训练进度(在下面的图中,我们显示了几个具有不同LR值的培训课程)。对于压缩会话,我们添加了激活和参数稀疏水平以及正则化损失的追踪。

我们已在GIT存储库中包含了一些RESNET20型号的检查点,我们已经使用了32位浮子训练。让我们加载我们已经通过渠道组套索正则训练的模型的检查站。
借助以下命令行参数,示例应用程序加载模型( --resume )并打印有关模型权重( --summary=sparsity )的统计信息。如果您想加载先前修剪的模型,以检查权重稀疏统计信息,这将很有用。请注意,当您恢复存储的检查点时,您仍然需要告诉应用程序检查点使用的网络体系结构( -a=resnet20_cifar ):
$ python3 compress_classifier.py --resume=../ssl/checkpoints/checkpoint_trained_ch_regularized_dense.pth.tar -a=resnet20_cifar ../../../data.cifar10 --summary=sparsity

您应该看到一个文本表,详细介绍了参数张量的各种稀疏性。第一列是参数名称,其次是其形状,密集模型中的非零元素(NNZ)的数量以及稀疏模型。下一组列显示了列的,行,频道,内核,滤波器和元素的稀数线。
包装它是元素绝对值的标准示例,平均值和均值。
在“压缩见解”笔记本中,我们使用matplotlib绘制此摘要的条形图,这确实显示了非令人印象深刻的足迹压缩。

尽管内存足迹压缩非常低,但该模型实际上节省了MAC的26.6%。
$ python3 compress_classifier.py --resume=../ssl/checkpoints/checkpoint_trained_channel_regularized_resnet20_finetuned.pth.tar -a=resnet20_cifar ../../../data.cifar10 --summary=compute

此示例对CIFAR10进行RESNET20的8位量化。我们已将其包含在GIT存储库中的RESNET20模型的检查点,我们已经使用了32位浮子训练,因此我们将使用此模型并对其进行量化:
$ python3 compress_classifier.py -a resnet20_cifar ../../../data.cifar10 --resume ../ssl/checkpoints/checkpoint_trained_dense.pth.tar --quantize-eval --evaluate
上面的命令行将保存一个名为quantized_checkpoint.pth.tar的检查点。在此处查看更多示例。
此处描述了蒸馏器随附的一组笔记本,这也解释了安装Jupyter笔记本服务器的步骤。
安装和运行服务器后,查看笔记本涵盖修剪灵敏度分析。
灵敏度分析是一个漫长的过程,该笔记本电脑加载了CSV文件,这些文件是几个灵敏度分析的输出。

我们目前对测试的重量轻巧,这是一个将不胜感激的领域。
测试有两种类型:系统测试和单位测试。调用单位测试:
$ cd distiller/tests
$ pytest
我们将CIFAR10用于系统测试,因为它的尺寸可以更快地进行测试。为了调用系统测试,您需要为您已经下载的CIFAR10数据集提供一条路径。另外,您可以调用full_flow_tests.py ,而无需指定CIFAR10数据集的位置,然后让测试下载数据集(仅适用于第一个调用)。请注意--cifar1o-path默认为当前目录。
系统测试并不短,如果测试需要下载数据集,则更长的时间。
$ cd distiller/tests
$ python full_flow_tests.py --cifar10-path=<some_path>
脚本以状态0退出,如果所有测试成功,则否则状态1。
通过执行:安装MKDOC和所需软件包:
$ pip3 install -r doc-requirements.txt
构建项目文档运行:
$ cd distiller/docs-src
$ mkdocs build --clean
这将创建一个名为“站点”的文件夹,其中包含文档网站。打开蒸馏器/文档/site/index.html查看文档主页。
我们使用SEMVER进行版本控制。有关可用的版本,请参见此存储库上的标签。
该项目已根据Apache许可证2.0的许可 - 有关详细信息,请参见许可证。
Degirum修剪模型 - 一个包含修剪模型和相关信息的存储库。
Torchfi -Torchfi是用于研究目的的Pytorch之上的断层注入框架。
HSI -Toolbox-高光谱CNN压缩和频带选择
Brunno F. Goldstein,Sudarshan Srinivasan,Dipankar Das,Kunal Banerjee,Leandro Santiago,Victor C. Ferreira,Alexandre S. Nery,Sandip Kundu,Felipe Mg Franca。
压缩深度学习模型的可靠性评估,
在IEEE第11届拉丁美洲电路与系统研讨会(LASCAS),圣何塞,哥斯达黎加,2020年,第1-5页。
Pascal Bacchus,Robert Stewart,Ekaterina Komendantskaya。
用于量化FPGA的神经网络的准确性,训练时间和硬件效率折衷,
在应用可重构计算中。体系结构,工具和应用程序。弧2020。计算机科学的讲义,第12083卷。
Indranil Chakraborty,Mustafa Fayez Ali,Dong Eun Kim,Aayush Ankit,Kaushik Roy。
Geniex:一种使用神经网络模仿XBAR的非理想性的广义方法,
Arxiv:2003.06902,2020。
Ahmed T. Elthakeb,Prannoy Pilligundla,Fatemehsadat Mireshghallah,Tarek Elgindi,Charles-Alban Deledalle,Hadi Esmaeilzadeh。
通过正弦适应性正则化对神经网络的基于梯度的深度量化,
Arxiv:2003.00146,2020。
Ziqing Yang,Yiming Cui,Zhipeng Chen,Wanxiang Che,Ting Liu,Shijin Wang,Guoping Hu。
Textbrewer:一种用于自然语言处理的开源知识蒸馏工具包,
Arxiv:2002.12620,2020。
亚历山大·科兹洛夫(Alexander Kozlov),伊万·拉扎雷维奇(Ivan Lazarevich),瓦西里·香波夫(Vasily Shamporov),尼古拉·莱亚略斯金(Nikolay Lyalyushkin),尤里·戈尔巴乔夫(Yury Gorbachev)。
快速模型推断的神经网络压缩框架,
Arxiv:2002.08679,2020。
Moran Shkolnik,Brian Chmiel,Ron Banner,Gil Shomron,Yuri Nahshan,Alex Bronstein,Uri Weiser。
强大的量化:一个统治所有这些的模型,
ARXIV:2002.07686,2020。
穆罕默德·阿卜杜拉·哈尼夫(Muhammad Abdullah Hanif),穆罕默德·沙菲克(Muhammad Shafique)。
Salvagednn:通过通过显着驱动的故障映射来挽救具有永久性故障的深神经网络加速器,
皇家学会的哲学交易A:数学,物理和工程科学售价378,第2164期,2019年。
https://doi.org/10.1098/rsta.2019.0164
Meiqi Wang,Jianqiao MO,Jun Lin,Zhongfeng Wang,Li du。
Dynexit:深层残留网络的动态早期策略,
在IEEE国际信号处理系统(SIP)中,2019年。
Vinu Joseph,Saurav Muralidharan,Animesh Garg,Michael Garland,Ganesh Gopalakrishnan。
一种可编程的模型压缩方法,
ARXIV:1911.02497,2019
代码
Hui Guan,Lin Ning,Zhen Lin,Xipeng Shen,Huiyang Zhou,Seung-Hwan Lim。
CNN的本地零空间内存保护,
在神经信息处理系统会议上(神经),2019年。
ARXIV:1910.14479,2019
代码
Hossein Baktash,Emanuele Natale,Laurent Viennot。
神经网络压缩的比较研究,
ARXIV:1910.11144,2019。
Maxim Zemlyanikin,Alexander Smorkalov,Tatiana Khanova,Anna Petrovicheva,Grigory Serebryakov。
512KIB RAM就足够了!现场摄像机的面部识别DNN在MCU上,
在IEEE国际计算机视觉会议(ICCV)中,2019年。
Ziheng Wang,Jeremy Wohlwend,Tao Lei。
大型语言模型的结构化修剪,
ARXIV:1910.04732,2019。
Soroush Ghodrati,Hardik Sharma,Sean Kinzer,Amir Yazdanbakhsh,Kambiz Samadi,Nam Sung Kim,Doug Burger,Hadi Esmaeilzadeh。
深层神经网络的混合信号电荷加速度通过交织的位分为分区的算术,
Arxiv:1906.11915,2019。
吉尔·谢姆隆(Gil Shomron),塔尔·霍洛维茨(Tal Horowitz),乌里·威瑟(Uri Weiser)。
SMT-SA:收缩阵列中的同时多线程,
在IEEE计算机架构信(CAL)中,2019年。
上学高,郑邓和亨黄。
跨域模型通过结构重量共享压缩,
在IEEE计算机视觉和模式识别会议(CVPR)中,2019年,第8973-8982页。
Moin Nadeem,Wei Fang,Brian Xu,Mitra Mohtarami,James Glass。
fakta:自动端到端事实检查系统,
在计算语言学协会北美分会(NAACL),2019年。
Ahmed T. Elthakeb,Prannoy Pilligundla,Hadi Esmaeilzadeh。
SINREQ:低位宽度量化训练的广义正弦正则化,
ARXIV:1905.01416,2019。代码
Goncharenko A.,Denisov A.,Alyamkin S.,Terentev E.
可训练的神经网络量化阈值,
在:Rojas I.,Joya G.,Catala A.(eds)计算智能讲义的进步计算机科学中,第11507卷。Springer,Cham。国际人工神经网络的工作会议(IWANN 2019)。
Ahmed T. Elthakeb,Prannoy Pilligundla,Hadi Esmaeilzadeh。
分裂和征服:利用中间特征表示来量化神经网络的培训,
ARXIV:1906.06033,2019
Ritchie Zhao,Yuwei Hu,Jordan Dotzel,Christopher de Sa,Zhiru Zhang。
改进神经网络量化而不使用离群通道分裂的重新培训,
ARXIV:1901.09504,2019
代码
Angad S. Rekhi,Brian Zimmer,Nikola Nedovic,Ningxi Liu,Rangharajan Venkatesan,Miaorong Wang,Brucek Khailany,William J. Dally,C。ThomasGray。
用于深度学习推断的模拟/混合信号硬件错误建模,
Nvidia Research,2019年。
Norio Nakata。
用于诊断医学成像的人工智能的最新技术发展,
《日本放射学杂志》,2019年2月,第37卷,第2期,第103-108页。
Alexander Goncharenko,Andrey Denisov,Sergey Alyamkin,Evgeny Terentev。
均匀神经网络量化的快速可调阈值,
ARXIV:1812.07872,2018
如果您使用蒸馏器进行工作,请使用以下引用:
@article{nzmora2019distiller,
author = {Neta Zmora and
Guy Jacob and
Lev Zlotnik and
Bar Elharar and
Gal Novik},
title = {Neural Network Distiller: A Python Package For DNN Compression Research},
month = {October},
year = {2019},
url = {https://arxiv.org/abs/1910.12232}
}
任何已发表的工作都建立在许多其他人的工作之上,并且信用属于这里的太多人。
用于研究目的的参考代码发布。它不是官方的英特尔产品,质量和支持的水平可能不会如官方产品所预期的那样。计划将其他算法和功能添加到库中。受到开放源代码和研究社区的反馈和贡献。