️ Penghentian proyek - Proyek ini tidak akan lagi dipertahankan oleh Intel. Proyek ini telah diidentifikasi memiliki pelarian keamanan yang diketahui. Intel telah menghentikan pengembangan dan kontribusi termasuk, tetapi tidak terbatas pada, pemeliharaan, perbaikan bug, rilis baru, atau pembaruan, untuk proyek ini. Intel tidak lagi menerima tambalan untuk proyek ini.

Penyuling adalah paket python open-source untuk penelitian kompresi jaringan saraf.
Kompresi jaringan dapat mengurangi jejak memori dari jaringan saraf, meningkatkan kecepatan inferensi dan menghemat energi. Distiller menyediakan lingkungan Pytorch untuk membuat prototipe dan menganalisis algoritma kompresi, seperti metode penginduksi sparsity dan aritmatika presisi rendah.
Instruksi ini akan membantu membuat penyuling dan berjalan di mesin lokal Anda.
Klon Repositori Kode Distiller dari GitHub:
$ git clone https://github.com/IntelLabs/distiller.git
Sisa dokumentasi berikutnya, mengasumsikan bahwa Anda telah mengkloning repositori Anda ke direktori yang disebut distiller .
Kami merekomendasikan penggunaan lingkungan virtual Python, tetapi tentu saja, terserah Anda. Tidak ada yang istimewa tentang menggunakan penyuling di lingkungan virtual, tetapi kami memberikan beberapa instruksi, untuk kelengkapan.
Sebelum membuat lingkungan virtual, pastikan Anda berada di Directory distiller . Setelah menciptakan lingkungan, Anda akan melihat direktori yang disebut distiller/env .
Jika Anda tidak menginstal VirtualEnv, Anda dapat menemukan instruksi instalasi di sini.
Untuk menciptakan lingkungan, jalankan:
$ python3 -m virtualenv env
Ini menciptakan subdirektori bernama env di mana lingkungan virtual Python disimpan, dan mengkonfigurasi shell saat ini untuk menggunakannya sebagai lingkungan Python default.
Jika Anda lebih suka menggunakan venv , maka mulailah dengan menginstalnya:
$ sudo apt-get install python3-venv
Kemudian ciptakan lingkungan:
$ python3 -m venv env
Seperti halnya VirtualEnv, ini membuat direktori yang disebut distiller/env .
Perintah aktivasi dan penonaktifan lingkungan untuk venv dan virtualenv adalah sama.
Catatan: Pastikan untuk mengaktifkan lingkungan, sebelum melanjutkan dengan pemasangan paket ketergantungan:
$ source env/bin/activate
Akhirnya, instal paket penyuling dan dependensinya menggunakan pip3 :
$ cd distiller
$ pip3 install -e .
Ini menginstal penyuling dalam "mode pengembangan", yang berarti setiap perubahan yang dibuat dalam kode tercermin di lingkungan tanpa menjalankan kembali perintah instalasi (jadi tidak perlu menginstal ulang setelah menarik perubahan dari repositori git).
Catatan:
Distiller diuji menggunakan instalasi default Pytorch 1.3.1, yang menggunakan CUDA 10.1. Kami menggunakan TorchVision versi 0.4.2. Ini termasuk dalam requirements.txt penyuling.txt dan akan secara otomatis diinstal saat menginstal paket penyuling seperti yang tercantum di atas.
Jika Anda tidak menggunakan CUDA 10.1 di lingkungan Anda, silakan merujuk ke situs web Pytorch untuk menginstal build yang kompatibel dari Pytorch 1.3.1 dan TorchVision 0.4.2.
Distiller dilengkapi dengan aplikasi sampel dan tutorial yang mencakup berbagai jenis model:
| Tipe model | Sparsity | Kuantisasi pasca-pelatihan | Pelatihan sadar kuantisasi | Kompresi Otomatis (AMC) | Distilasi Pengetahuan |
|---|---|---|---|---|---|
| Klasifikasi Gambar | ✅ | ✅ | ✅ | ✅ | ✅ |
| Model bahasa tingkat kata | ✅ | ✅ | |||
| Terjemahan (GNMT) | ✅ | ||||
| Sistem Rekomendasi (NCF) | ✅ | ||||
| Deteksi Objek | ✅ |
Pergilah ke Direktori Contoh untuk lebih jelasnya.
Sumber daya lain untuk dirujuk, di luar contoh:
Berikut ini adalah contoh sederhana menggunakan sampel klasifikasi gambar penyuling, menunjukkan beberapa kemampuan penyuling.
Berikut ini akan memohon pelatihan saja (tidak ada kompresi) dari jaringan yang bernama 'SimpleNet' pada dataset CIFAR10. Ini secara kasar didasarkan pada aplikasi pelatihan sampel TorchVision ImageNet, jadi itu akan terlihat familiar jika Anda telah menggunakan aplikasi itu. Dalam contoh ini kami tidak memohon mekanisme kompresi: kami hanya berlatih karena untuk menyempurnakan setelah pemangkasan, pelatihan adalah bagian penting.
Perhatikan bahwa pertama kali Anda menjalankan perintah ini, kode CIFAR10 akan diunduh ke mesin Anda, yang mungkin membutuhkan sedikit waktu - harap biarkan proses pengunduhan melanjutkan sampai selesai.
Jalur ke dataset CIFAR10 adalah sewenang -wenang, tetapi dalam contoh kami kami menempatkan set data di tingkat direktori yang sama dengan penyuling (yaitu ../../../data.cifar10 ).
Pertama, ubah ke direktori sampel, lalu adahkan aplikasi:
$ cd distiller/examples/classifier_compression
$ python3 compress_classifier.py --arch simplenet_cifar ../../../data.cifar10 -p 30 -j=1 --lr=0.01
Anda dapat menggunakan backend tensorboard untuk melihat kemajuan pelatihan (dalam diagram di bawah ini kami menunjukkan beberapa sesi pelatihan dengan nilai LR yang berbeda). Untuk sesi kompresi, kami telah menambahkan penelusuran tingkat aktivasi dan parameter, dan kehilangan regularisasi.

Kami telah memasukkan dalam repositori git beberapa pos pemeriksaan dari model resnet20 yang telah kami latih dengan float 32-bit. Mari kita muat pemeriksaan model yang telah kami latih dengan regularisasi laso grup saluran bijaksana.
Dengan argumen baris perintah berikut, aplikasi sampel memuat model ( --resume ) dan mencetak statistik tentang bobot model ( --summary=sparsity ). Ini berguna jika Anda ingin memuat model yang sebelumnya dipangkas, untuk memeriksa statistik sparsity bobot, misalnya. Perhatikan bahwa ketika Anda melanjutkan pemeriksaan tersimpan, Anda masih perlu memberi tahu aplikasi arsitektur jaringan mana yang digunakan pos pemeriksaan ( -a=resnet20_cifar ):
$ python3 compress_classifier.py --resume=../ssl/checkpoints/checkpoint_trained_ch_regularized_dense.pth.tar -a=resnet20_cifar ../../../data.cifar10 --summary=sparsity

Anda harus melihat tabel teks yang merinci berbagai sparsities dari tensor parameter. Kolom pertama adalah nama parameter, diikuti oleh bentuknya, jumlah elemen non-nol (NNZ) dalam model padat, dan dalam model yang jarang. Kumpulan kolom berikutnya menunjukkan sparsitas kolom, segi baris, segi saluran, bijaksana, filter-bijaksana, dan bijaksana elemen.
Membungkusnya adalah standar-deviasi, rata-rata, dan rata-rata nilai absolut dari elemen.
Dalam buku catatan Compression Insights kami menggunakan Matplotlib untuk memplot bagan batang dari ringkasan ini, yang memang menunjukkan kompresi jejak kaki yang tidak mengesankan.

Meskipun kompresi jejak memori sangat rendah, model ini sebenarnya menghemat 26,6% dari komputasi MACS.
$ python3 compress_classifier.py --resume=../ssl/checkpoints/checkpoint_trained_channel_regularized_resnet20_finetuned.pth.tar -a=resnet20_cifar ../../../data.cifar10 --summary=compute

Contoh ini melakukan kuantisasi 8-bit resnet20 untuk CIFAR10. Kami telah memasukkan dalam repositori git pos pemeriksaan model resnet20 yang telah kami latih dengan float 32-bit, jadi kami akan mengambil model ini dan mengukurnya:
$ python3 compress_classifier.py -a resnet20_cifar ../../../data.cifar10 --resume ../ssl/checkpoints/checkpoint_trained_dense.pth.tar --quantize-eval --evaluate
Baris perintah di atas akan menyimpan pos pemeriksaan bernama quantized_checkpoint.pth.tar yang berisi parameter model kuantisasi. Lihat lebih banyak contoh di sini.
Set notebook yang datang dengan penyuling dijelaskan di sini, yang juga menjelaskan langkah -langkah untuk menginstal server notebook Jupyter.
Setelah menginstal dan menjalankan server, lihat notebook yang mencakup analisis sensitivitas pemangkasan.
Analisis sensitivitas adalah proses yang panjang dan buku catatan ini memuat file CSV yang merupakan output dari beberapa sesi analisis sensitivitas.

Kami saat ini ringan pada tes dan ini adalah area di mana kontribusi akan sangat dihargai.
Ada dua jenis tes: tes sistem dan tes unit. Untuk memohon tes unit:
$ cd distiller/tests
$ pytest
Kami menggunakan CIFAR10 untuk tes sistem, karena ukurannya membuat tes yang lebih cepat. Untuk memohon tes sistem, Anda perlu memberikan jalur ke dataset CIFAR10 yang sudah Anda unduh. Atau, Anda dapat memohon full_flow_tests.py tanpa menentukan lokasi dataset CIFAR10 dan membiarkan tes mengunduh dataset (hanya untuk doa pertama). Perhatikan bahwa --cifar1o-path default ke direktori saat ini.
Tes sistem tidak pendek, dan bahkan lebih lama jika tes perlu mengunduh dataset.
$ cd distiller/tests
$ python full_flow_tests.py --cifar10-path=<some_path>
Skrip keluar dengan status 0 jika semua tes berhasil, atau status 1 sebaliknya.
Instal MKDOCS dan paket yang diperlukan dengan mengeksekusi:
$ pip3 install -r doc-requirements.txt
Untuk membangun dokumentasi proyek, jalankan:
$ cd distiller/docs-src
$ mkdocs build --clean
Ini akan membuat folder bernama 'Situs' yang berisi situs web dokumentasi. Buka penyuling/dokumen/situs/index.html untuk melihat halaman beranda dokumentasi.
Kami menggunakan SEMVER untuk versi. Untuk versi yang tersedia, lihat tag di repositori ini.
Proyek ini dilisensikan di bawah Lisensi Apache 2.0 - lihat file lisensi.md untuk detailnya
DEGIRUM MODEL PRUNED - Repositori yang berisi model yang dipangkas dan informasi terkait.
Torchfi - Torchfi adalah kerangka kerja injeksi kesalahan yang dibangun di atas Pytorch untuk tujuan penelitian.
HSI -Toolbox - Kompresi CNN hiperspektral dan pemilihan pita
Brunno F. Goldstein, Sudarshan Srinivasan, Dipankar Das, Kunal Banerjee, Leandro Santiago, Victor C. Ferreira, Alexandre S. Nery, Sandip Kundu, Felipe MG Franca.
Evaluasi reliabilitas model pembelajaran mendalam terkompresi ,
Dalam IEEE 11th Latin American Simposium tentang Sirkuit & Sistem (LASCAS), San Jose, Costa Rica, 2020, hlm. 1-5.
Pascal Bacchus, Robert Stewart, Ekaterina Komendantskaya.
Akurasi, waktu pelatihan, dan pertukaran efisiensi perangkat keras untuk jaringan saraf terkuantisasi di FPGA ,
Dalam komputasi yang dapat dikonfigurasi ulang. Arsitektur, alat, dan aplikasi. ARC 2020. Catatan Kuliah dalam Ilmu Komputer, Vol 12083. Springer, Cham
Indranil Chakraborty, Mustafa Fayez Ali, Dong Eun Kim, Aayush Ankit, Kaushik Roy.
Geniex: Pendekatan umum untuk meniru non-idealitas dalam xbars memristif menggunakan jaringan saraf ,
ARXIV: 2003.06902, 2020.
Ahmed T. Elthakeb, Prannoy Pilligundla, Fatemehsadat Mireshghallah, Tarek Elgindi, Charles-Alban Deledalle, Hadi Esmaeilzadeh.
Kuantisasi dalam berbasis gradien dari jaringan saraf melalui regularisasi adaptif sinusoidal ,
ARXIV: 2003.00146, 2020.
Ziqing Yang, Yiming Cui, Zhipeng Chen, Wanxiang Che, Ting Liu, Shijin Wang, Guoping Hu.
TextBrewer: Toolkit distilasi pengetahuan sumber terbuka untuk pemrosesan bahasa alami ,
ARXIV: 2002.12620, 2020.
Alexander Kozlov, Ivan Lazarevich, Vasily Shamporov, Nikolay Lyalyushkin, Yury Gorbachev.
Kerangka Kompresi Jaringan Saraf untuk Inferensi Model Cepat ,
Arxiv: 2002.08679, 2020.
Moran Shkolnik, Brian Chmiel, Ron Banner, Gil Shomron, Yuri Nahshan, Alex Bronstein, Uri Weiser.
Kuantisasi yang kuat: Satu model untuk menguasai semuanya ,
ARXIV: 2002.07686, 2020.
Muhammad Abdullah Hanif, Muhammad Shafique.
Salvagednn: Menyelamatkan akselerator jaringan saraf dalam dengan kesalahan permanen melalui pemetaan sadar kesalahan yang digerakkan oleh arti-penting ,
Dalam Transaksi Filsafat dari Royal Society A: Sains Matematika, Fisik dan Teknik Volume 378, Edisi 2164, 2019.
https://doi.org/10.1098/rsta.2019.0164
Meiqi Wang, Jianqiao MO, Jun Lin, Zhongfeng Wang, Li Du.
Dinexit: Strategi keluar yang dinamis untuk jaringan residu yang dalam ,
Dalam Lokakarya Internasional IEEE tentang Sistem Pemrosesan Sinyal (SIPS), 2019.
Vinu Joseph, Saurav Muralidharan, Animesh Garg, Michael Garland, Ganesh Gopalakrishnan.
Pendekatan yang dapat diprogram untuk model kompresi,
Arxiv: 1911.02497, 2019
kode
Hui Guan, Lin Ning, Zhen Lin, Xipeng Shen, Huiyang Zhou, Seung-Hwan Lim.
Di tempat perlindungan memori zero-space untuk CNN ,
Dalam Konferensi tentang Sistem Pemrosesan Informasi Saraf (NeurIPS), 2019.
Arxiv: 1910.14479, 2019
kode
Hossein Baktash, Emanuele Natale, Laurent Viennot.
Studi perbandingan kompresi jaringan saraf ,
Arxiv: 1910.11144, 2019.
Maxim Zemlyanikin, Alexander Smorkalov, Tatiana Khanova, Anna Petrovicheva, Grigory Serebryakov.
RAM 512KIB sudah cukup! DNN Pengenalan Wajah Kamera Langsung di MCU ,
Dalam Konferensi Internasional IEEE tentang Visi Komputer (ICCV), 2019.
Ziheng Wang, Jeremy Wohlwend, Tao Lei.
Pemangkasan terstruktur model bahasa besar ,
Arxiv: 1910.04732, 2019.
Soroush Ghodrati, Hardik Sharma, Sean Kinzer, Amir Yazdanbakhsh, Kambiz Samadi, Nam Sung Kim, Doug Burger, Hadi Esmaeilzadeh.
Akselerasi domain muatan-sinyal campuran jaringan saraf dalam melalui aritmatika bit-partisi yang diselingi ,
Arxiv: 1906.11915, 2019.
Gil Shomron, Tal Horowitz, Uri Weiser.
SMT-SA: Multithreading simultan dalam array sistolik ,
Dalam IEEE Computer Architecture Letters (CAL), 2019.
Shangqian Gao, Cheng Deng, dan Heng Huang.
Kompresi model domain silang dengan berbagi berat secara struktural,
Dalam Konferensi IEEE tentang Visi Komputer dan Pengenalan Pola (CVPR), 2019, hlm. 8973-8982.
Moin Nadeem, Wei Fang, Brian Xu, Mitra Mohtarami, James Glass.
Fakta: Sistem pemeriksaan fakta ujung ke ujung otomatis,
Di Amerika Utara dari Asosiasi Linguistik Komputasi (NAACL), 2019.
Ahmed T. Elthakeb, Prannoy Pilligundla, Hadi Esmaeilzadeh.
Sinreq: regularisasi sinusoidal umum untuk pelatihan kuantisasi mendalam rendah-bitwidth,
ARXIV: 1905.01416, 2019. Kode
Goncharenko A., Denisov A., Alyamkin S., Terentev E.
Ambang batas yang dapat dilatih untuk kuantisasi jaringan saraf,
Dalam: Rojas I., Joya G., Catala A. (eds) Kemajuan dalam Catatan Kuliah Kecerdasan Komputasi dalam Ilmu Komputer, Vol 11507. Springer, Cham. Konferensi kerja internasional pada jaringan saraf buatan (Iwann 2019).
Ahmed T. Elthakeb, Prannoy Pilligundla, Hadi Esmaeilzadeh.
Divide and Conquer: Memanfaatkan representasi fitur menengah untuk pelatihan terkuantisasi jaringan saraf,
Arxiv: 1906.06033, 2019
Ritchie Zhao, Yuwei Hu, Jordan Dotzel, Christopher de Sa, Zhiru Zhang.
Meningkatkan kuantisasi jaringan saraf tanpa melatih kembali menggunakan pemisahan saluran outlier,
Arxiv: 1901.09504, 2019
Kode
Angad S. Rekhi, Brian Zimmer, Nikola Nedovic, Ningxi Liu, Rangharajan Venkatesan, Miaorong Wang, Brucek Khailany, William J. Dally, C. Thomas Gray.
Pemodelan kesalahan perangkat keras analog/campuran sinyal untuk inferensi pembelajaran yang mendalam ,
Nvidia Research, 2019.
Norio Nakata.
Pengembangan teknis baru -baru ini dari kecerdasan buatan untuk pencitraan medis diagnostik ,
Dalam Jepang Journal of Radiology, Februari 2019, Volume 37, Edisi 2, hlm 103-108.
Alexander Goncharenko, Andrey Denisov, Sergey Alyamkin, Evgeny Terentev.
Ambang batas yang dapat disesuaikan dengan cepat untuk kuantisasi jaringan saraf yang seragam ,
ARXIV: 1812.07872, 2018
Jika Anda menggunakan penyuling untuk pekerjaan Anda, silakan gunakan kutipan berikut:
@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}
}
Karya apa pun yang diterbitkan dibangun di atas karya banyak orang lain, dan penghargaan itu milik terlalu banyak orang untuk dicantumkan di sini.
Distiller dirilis sebagai kode referensi untuk tujuan penelitian. Ini bukan produk Intel resmi, dan tingkat kualitas dan dukungan mungkin tidak seperti yang diharapkan dari produk resmi. Algoritma dan fitur tambahan direncanakan untuk ditambahkan ke perpustakaan. Umpan balik dan kontribusi dari open source dan komunitas penelitian lebih dari disambut.