ショ和 プロジェクトの中止-このプロジェクトは、Intelによって維持されなくなります。このプロジェクトは、既知のセキュリティエスケープを持っていると特定されています。 Intelは、メンテナンス、バグ修正、新しいリリース、または更新など、このプロジェクトの開発と貢献を停止しましたが、これに限定されません。 Intelは、このプロジェクトのパッチを受け入れなくなりました。

Distillerは、ニューラルネットワーク圧縮研究のためのオープンソースPythonパッケージです。
ネットワーク圧縮は、ニューラルネットワークのメモリフットプリントを削減し、推論速度を上げ、エネルギーを節約できます。 Distillerは、スパース誘発方法や低精度の算術などの圧縮アルゴリズムをプロトタイピングおよび分析するためのPytorch環境を提供します。
これらの指示は、地元のマシンで蒸留器を稼働させるのに役立ちます。
githubから蒸留所コードリポジトリをクローンします。
$ git clone https://github.com/IntelLabs/distiller.git
次のドキュメントの残りの部分は、リポジトリをdistillerと呼ばれるディレクトリにクローン化したことを前提としています。
Python仮想環境を使用することをお勧めしますが、もちろんそれはあなた次第です。仮想環境で蒸留器を使用することに特別なことは何もありませんが、完全性については、いくつかの指示を提供します。
仮想環境を作成する前に、ディレクトリdistillerにあることを確認してください。環境を作成した後、 distiller/envと呼ばれるディレクトリが表示されます。
virtualenvがインストールされていない場合は、ここでインストール手順を見つけることができます。
環境を作成するには、実行してください。
$ python3 -m virtualenv env
これにより、Python仮想環境が保存されているenvという名前のサブディレクトリが作成され、現在のシェルをデフォルトの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リポジトリからの変更をプルしてから再インストールする必要はありません)。
注:
蒸留器は、Cuda 10.1を使用するPytorch 1.3.1のデフォルトインストールを使用してテストされます。 TorchVisionバージョン0.4.2を使用しています。これらはDistillerのrequirements.txtに含まれており、上記のDistillerパッケージをインストールするときに自動的にインストールされます。
環境でCUDA 10.1を使用しない場合は、Pytorch Webサイトを参照して、Pytorch 1.3.1とTorchvision 0.4.2の互換性のあるビルドをインストールしてください。
Distillerには、さまざまなモデルタイプをカバーするサンプルアプリケーションとチュートリアルが付属しています。
| モデルタイプ | スパース | トレーニング後の量子化 | 量子化対象トレーニング | 自動圧縮(AMC) | 知識の蒸留 |
|---|---|---|---|---|---|
| 画像分類 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 単語レベルの言語モデル | ✅ | ✅ | |||
| 翻訳(gnmt) | ✅ | ||||
| 推奨システム(NCF) | ✅ | ||||
| オブジェクトの検出 | ✅ |
詳細については、Examples Directoryにアクセスしてください。
例を超えて、参照する他のリソース:
以下は、蒸留器の画像分類サンプルを使用した簡単な例であり、蒸留器の機能の一部を示しています。
以下は、CIFAR10データセットの「Simplenet」という名前のネットワークのトレーニングのみ(圧縮なし)を呼び出します。これは、Torchvisionのサンプルイメージネットトレーニングアプリケーションに大まかに基づいているため、そのアプリケーションを使用している場合は馴染みがあります。この例では、圧縮メカニズムを呼び起こすことはありません。剪定後に微調整するためにトレーニングが不可欠な部分であるため、トレーニングするだけです。
このコマンドを初めて実行すると、CIFAR10コードがマシンにダウンロードされることに注意してください。これには少し時間がかかる場合があります。ダウンロードプロセスを完了してください。
CIFAR10データセットへのパスは任意ですが、例では、データセットを蒸留器と同じディレクトリレベルに配置します(つまり../../../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リポジトリに、32ビットフロートでトレーニングしたResNet20モデルのいくつかのチェックポイントを含めました。チャネルごとのグループラッソの正規化でトレーニングしたモデルのチェックポイントをロードしましょう。
次のコマンドライン引数を使用すると、サンプルアプリケーションはモデル( --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)の数、およびスパースモデルが続きます。次の列のセットは、列ごとの、列ごとの、チャネルごと、核面、フィルターごとのスパース、および要素ごとのスパースを示しています。
それをまとめることは、要素の絶対値の標準控除、平均、および平均です。
Compression Insights Notebookでは、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ビット量子化を実行します。 32ビットフロートでトレーニングしたRESNET20モデルのチェックポイントをGITリポジトリに含めました。このモデルを採用して量子化します。
$ 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ファイルをロードします。

私たちは現在、テストで軽量であり、これは貢献が大いに高く評価される分野です。
テストには、システムテストとユニットテストの2つのタイプがあります。ユニットテストを呼び出すには:
$ cd distiller/tests
$ pytest
システムテストにはCIFAR10を使用します。そのサイズがより迅速なテストになるためです。システムテストを呼び出すには、すでにダウンロードしたCIFAR10データセットへのパスを提供する必要があります。または、CIFAR10データセットの場所を指定せずにfull_flow_tests.pyを呼び出して、テストでデータセットをダウンロードさせます(最初の呼び出しのみ)。 --cifar1o-path現在のディレクトリにデフォルトであることに注意してください。
システムテストは短くなく、テストでデータセットをダウンロードする必要がある場合はさらに長くなります。
$ cd distiller/tests
$ python full_flow_tests.py --cifar10-path=<some_path>
すべてのテストが成功した場合、スクリプトはステータス0で終了します。
実行して、MKDOCと必要なパッケージをインストールします。
$ pip3 install -r doc-requirements.txt
プロジェクトドキュメントを作成するには、実行されます。
$ cd distiller/docs-src
$ mkdocs build --clean
これにより、ドキュメントWebサイトを含む「サイト」という名前のフォルダーが作成されます。ドキュメントのホームページを表示するには、蒸留器/docs/site/index.htmlを開きます。
バージョン化にはSemverを使用しています。利用可能なバージョンについては、このリポジトリのタグを参照してください。
このプロジェクトは、Apacheライセンス2.0に基づいてライセンスされています - 詳細については、ライセンス.mdファイルを参照してください
Degirum Prunedモデル - 剪定されたモデルと関連情報を含むリポジトリ。
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 11th Latin American Symposium on Circuits&Systems(LASCAS)、サンノゼ、コスタリカ、2020年、1-5ページ。
Pascal Bacchus、Robert Stewart、Ekaterina Komendantskaya。
FPGAの量子化されたニューラルネットワークのための精度、トレーニング時間、およびハードウェア効率のトレードオフ、
適用された再構成可能なコンピューティングで。アーキテクチャ、ツール、およびアプリケーション。 ARC 2020。コンピューターサイエンスの講義ノート、Vol12083。Springer、Cham
インドラニル・チャクラボルティ、ムスタファ・フェイエス・アリ、ドン・ウン・キム、エイシュ・アンキット、カウシク・ロイ。
Geniex:ニューラルネットワークを使用して、メモリティブXBARSの非理想性をエミュレートするための一般化されたアプローチ、
Arxiv:2003.06902、2020。
アーメド・T・エルサケブ、プラノイ・ピルグンドラ、fatemehsadat mireshghallah、タレク・エルギンディ、チャールズ・アルバン・デレダル、ハディ・エスマエルザデ。
正弦波適応正則化を介したニューラルネットワークの勾配ベースの深い量子化、
Arxiv:2003.00146、2020。
Ziqing Yang、Yiming Cui、Zhipeng Chen、Wanxiang Che、Ting Liu、Shijin Wang、Guoping Hu。
TextBrewer:自然言語処理のためのオープンソースの知識蒸留ツールキット、
Arxiv:2002.12620、2020。
アレクサンダー・コズロフ、イヴァン・ラザレヴィッチ、ヴァシリー・シャンポロフ、ニコレイ・リアリシュキン、Yury Gorbachev。
高速モデル推論のためのニューラルネットワーク圧縮フレームワーク、
Arxiv:2002.08679、2020。
Moran Shkolnik、Brian Chmiel、Ron Banner、Gil Shomron、Yuri Nahshan、Alex Bronstein、Uri Weiser。
堅牢な量子化:それらをすべて支配する1つのモデル、
Arxiv:2002.07686、2020。
ムハンマド・アブドラ・ハニフ、ムハンマド・シャフィク。
salvagednn:顕著性駆動型の断層マッピングを通じて永続的な断層を持つ深いニューラルネットワークアクセラレータを救う、
王立協会の哲学的取引a:数学、物理的、工学科学科学volume 378、Issue 2164、2019。
https://doi.org/10.1098/rsta.2019.0164
Meiqi Wang、Jianqiao Mo、Jun Lin、Zhongfeng Wang、Li Du。
Dynexit:深い残留ネットワークの動的な早期排除戦略、
IEEE International Workshop on Signal Processing Systems(SIPS)、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。
マキシム・ゼムリアニキン、アレクサンダー・スモルカロフ、タチアナ・カノバ、アンナ・ペトロヴィチェヴァ、グリゴリー・セレブリコフ。
512KIB RAMで十分です! MCUのライブカメラフェイス認識DNN 、
IEEE International Conference on Computer Vision(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。
ギル・ショムロン、タル・ホロウィッツ、ウリ・ワイザー。
SMT-SA:収縮期アレイでの同時マルチスレッド、
IEEEコンピューターアーキテクチャレター(CAL)、2019年。
Shangqian Gao、Cheng Deng、およびHeng Huang。
構造的に重量共有によるクロスドメインモデル圧縮、
コンピュータービジョンとパターン認識に関するIEEE会議(CVPR)、2019、pp。8973-8982。
Moin Nadeem、Wei Fang、Brian Xu、Mitra Mohtarami、James Glass。
Fakta:自動エンドツーエンドのファクトチェックシステム、
2019年、計算言語学会協会(NAACL)の北米支部。
アーメドT.エルサケブ、プラノイピルグンドラ、ハディエスマエリザデ。
SINREQ:低ビット幅の深い量子化されたトレーニングのための一般化正弦波正規化、
Arxiv:1905.01416、2019。Code
Goncharenko A.、Denisov A.、Alyamkin S.、Terentev E.
ニューラルネットワークの量子化のための訓練可能なしきい値、
In:Rojas I.、Joya G.、Catala A.(Eds)Computational Intelligence Lecture Note in Computer Science、Vol11507。Springer、Cham。人工ニューラルネットワークに関する国際的なワークカンファレンス(IWANN 2019)。
アーメドT.エルサケブ、プラノイピルグンドラ、ハディエスマエリザデ。
分裂と征服:ニューラルネットワークの量子化されたトレーニングのための中間特徴表現を活用する、
Arxiv:1906.06033、2019
リッチー・チャオ、ユウェイ・フー、ジョーダン・ドッツェル、クリストファー・デ・サ、Zhiru Zhang。
外れ値チャネル分割を使用して再訓練せずにニューラルネットワークの量子化を改善する、
Arxiv:1901.09504、2019
コード
アンガド・S・レキ、ブライアン・ジマー、ニコラ・ネドヴィッチ、ニンシク・リュー、ランガラジャン・ベンカテサン、ミアオロン・ワン、ブルース・カイラニー、ウィリアム・J・ダリー、C・トーマス・グレイ。
深い学習推論のためのアナログ/混合シグナルハードウェアエラーモデリング、
Nvidia Research、2019年。
ノリオ・ナカタ。
診断医療イメージングのための人工知能の最近の技術開発、
日本のJournal of Radiology、2019年2月、第37巻、第2巻、pp 103–108。
アレクサンダー・ゴンチャレンコ、アンドレイ・デニソフ、セルゲイ・アリアムキン、エヴゲニー・テレンテフ。
均一なニューラルネットワーク量子化の高速調整可能なしきい値、
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}
}
公開されている作品は、他の多くの人々の仕事の上に構築されており、このクレジットはここにリストするには多すぎる人々に属します。
Distillerは、研究目的のための参照コードとしてリリースされます。それは公式のIntel製品ではなく、品質とサポートのレベルは公式製品から期待されていないかもしれません。追加のアルゴリズムと機能がライブラリに追加される予定です。オープンソースと研究コミュニティからのフィードバックと貢献は大歓迎です。