️ Прекращение проекта - этот проект больше не будет поддерживаться 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
Это создает подкаталог с именем env , где хранится виртуальная среда Python, и настраивает текущую оболочку для использования в качестве среды 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).
Примечания:
Distiller тестируется с использованием установки Pytorch 1.3.1 по умолчанию, которая использует CUDA 10.1. Мы используем версию Torchvision 0.4.2. Они включены в requirements.txt Distiller.
Если вы не используете CUDA 10.1 в вашей среде, пожалуйста, обратитесь к веб -сайту Pytorch, чтобы установить совместимую сборку Pytorch 1.3.1 и Torchvision 0.4.2.
Distiller поставляется с образцами приложений и учебными пособиями, охватывающими ряд типов моделей:
| Тип модели | Редкость | Квантование после тренировки | Обучение квантованию | Авто сжатие (AMC) | Знания дистилляция |
|---|---|---|---|---|---|
| Классификация изображений | ✅ | ✅ | ✅ | ✅ | ✅ |
| Языковая модель уровня слов | ✅ | ✅ | |||
| Перевод (GNMT) | ✅ | ||||
| Рекомендационная система (NCF) | ✅ | ||||
| Обнаружение объекта | ✅ |
Отправляйтесь в каталог примеров для получения более подробной информации.
Другие ресурсы для обозначения, помимо примеров:
Ниже приведены простые примеры с использованием образца классификации изображений Дистиллера, показывающего некоторые возможности дистиллятора.
Следующее вызовет только обучение (без сжатия) сети с именем «SimpleNet» в наборе данных CIFAR10. Это примерно основано на применении приложения Torchvision от ImageNet, поэтому оно должно выглядеть знакомо, если вы использовали это приложение. В этом примере мы не вызываем никаких механизмов сжатия: мы просто тренируемся, потому что для точной настройки после обрезки тренировки являются неотъемлемой частью.
Обратите внимание, что в первый раз, когда вы выполняете эту команду, код CIFAR10 будет загружен на вашу машину, что может занять немного времени - пожалуйста, пусть процесс загрузки перейдет до завершения.
Путь к набору данных CIFAR10 является произвольным, но в наших примерах мы размещаем наборы данных на тот же уровень каталога, что и дистиллятор (т.е ../../../data.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 несколько контрольных точек модели Resnet20, которые мы обучали с 32-битным поплавками. Давайте загрузим контрольно-пропускной пункт модели, которую мы обучали с помощью канальной группы Lasso Fugrazation.
С помощью следующих аргументов командной строки образец приложение загружает модель ( --resume ) и печатает статистику о весах модели ( --summary=sparsity ). Это полезно, если вы хотите загрузить ранее обрезку модель, например, изучить статистику Sparsity Weights. Обратите внимание, что когда вы возобновите хранимую контрольную точку, вам все равно нужно сообщить приложению, какую сетевую архитектуру использует контрольная точка ( -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 для построения планшета этого резюме, которая действительно показывает неимпрессивное сжатие следа.

Несмотря на то, что сжатие следа памяти очень низкое, эта модель фактически экономит 26,6% вычислений Mac.
$ python3 compress_classifier.py --resume=../ssl/checkpoints/checkpoint_trained_channel_regularized_resnet20_finetuned.pth.tar -a=resnet20_cifar ../../../data.cifar10 --summary=compute

Этот пример выполняет 8-битную квантование RESNET20 для CIFAR10. Мы включили в репозиторий 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.
Установите MKDOCS и необходимые пакеты, выполнив:
$ pip3 install -r doc-requirements.txt
Чтобы создать проект документации:
$ cd distiller/docs-src
$ mkdocs build --clean
Это создаст папку с именем «сайт», которая содержит веб -сайт документации. Откройте Distiller/Docs/site/index.html для просмотра домашней страницы документации.
Мы используем SEMVER для управления версиями. Для доступных версий см. Теги в этом репозитории.
Этот проект лицензирован в соответствии с лицензией Apache 2.0 - см. Файл License.md для получения подробной информации
Модели Degirum, обрезка - репозиторий, содержащий обрезку модели и связанную информацию.
TOCKFI - TOCHFI - это структура впрыска неисправностей, построенная на вершине Pytorch для исследовательских целей.
HSI -Toolbox - гиперспектральное сжатие CNN и выбор полос
Брунно Ф. Гольдштейн, Сударшан Шринивасан, Дипанкар Дас, Кунал Банерджи, Леандро Сантьяго, Виктор С. Феррейра, Александр С. Нери, Сандип Кунду, Фелипе М.Г. Франка.
Оценка надежности сжатых моделей глубокого обучения ,
В 11-м латиноамериканском симпозиуме по схемам и системам (LASCAS), Сан-Хосе, Коста-Рика, 2020, с. 1-5.
Паскаль Бакч, Роберт Стюарт, Экатерина Коментанская.
Точность, время обучения и аппаратные компромиссы для квантованных нейронных сетей на FPGA ,
В приложенных реконфигурируемых вычислениях. Архитектуры, инструменты и приложения. Arc 2020. Заметки лекций в компьютерных науках, том 12083. Springer, Cham
Индраниль Чакраборти, Мустафа Фейез Али, Донг Юн Ким, Аайуш Анкит, Каушик Рой.
Geniex: генерализованный подход к эмулированию неидеальности в мемриристических XBARS с использованием нейронных сетей ,
Arxiv: 2003.06902, 2020.
Ахмед Т. Элтхакеб, Пранной Пиллигундла, Фатлемадат Мирешгаллах, Тарек Элгинди, Чарльз-Альбан Делидалле, Хади Эсмайлзаде.
Глубокая квантование нейронных сетей на основе градиента посредством синусоидальной адаптивной регуляризации ,
Arxiv: 2003.00146, 2020.
Ziqing Yang, Yiming Cui, Zhipeng Chen, Wanxiang Che, Ting Liu, Shijin Wang, Guoping Hu.
TextBrewer: Инструментарий для обработки естественного языка с открытым исходным кодом для обработки естественного языка ,
Arxiv: 2002.12620, 2020.
Александр Козлов, Иван Лазаревич, Васили Шампоров, Николай Лялишкин, Юрь Горбачев.
Среда сжатия нейронной сети для быстрого вывода модели ,
Arxiv: 2002.08679, 2020.
Моран Школник, Брайан Чмиэль, Рон Баннер, Гил Шомрон, Юрий Нахшан, Алекс Бронштейн, Ури Вайзер.
Надежное квантование: одна модель, чтобы управлять ими все ,
Arxiv: 2002.07686, 2020.
Мухаммед Абдулла Ханиф, Мухаммед Шафик.
Salvagednn: спасение глубоких ускорителей нейронной сети с постоянными разломами посредством картирования, основанных на основе зависимости от стоимости .
В философских транзакциях Королевского общества A: Математическая, физическая и инженерная наука Vvolume 378, выпуск 2164, 2019.
https://doi.org/10.1098/rsta.2019.0164
Meiqi Wang, Jianqiao Mo, Jun Lin, Zhongfeng Wang, Li Du.
Dynexit: динамическая стратегия раннего исхода для глубоких остаточных сетей ,
В Международном семинаре IEEE по системам обработки сигналов (SIPS), 2019.
Вину Джозеф, Саурас Муральдхаран, Анишэш Гарг, Майкл Гарланд, Ганеш Гопалакришнан.
Программируемый подход к сжатию модели,
Arxiv: 1911.02497, 2019
код
Хуэй Гуан, Лин Нин, Чжэнь Лин, Xipeng Shen, Huiyang Zhou, Seung-Hwan Lim.
Защита памяти с нулевым пространством на месте для CNN ,
В конференции по системам обработки нейронной информации (Neurips), 2019.
Arxiv: 1910.14479, 2019
код
Хоссейн Бакташ, Эмануэле Натале, Лоран Винот.
Сравнительное исследование сжатия нейронной сети ,
Arxiv: 1910.11144, 2019.
Максим Земляникин, Александр Сморкалов, Татьяна Ханова, Анна Петричева, Григорий Серебриков.
512KIB RAM достаточно! Распознавание лица в живой камере DNN на MCU ,
В IEEE International Conference of Computer Vision (ICCV), 2019.
Зихенг Ван, Джереми Вольвенд, Тао Лей.
Структурированная обрезка моделей крупных языков ,
Arxiv: 1910.04732, 2019.
Сорууш Годрати, Хардик Шарма, Шон Кинзер, Амир Язданбахш, Камбиз Самади, Нам Сьюн Ким, Дуг Бургер, Хади Эсмайльзаде.
Смешанное сигнальное ускорение глубоких нейронных сетей с помощью чередующейся битовой арифметики ,
Arxiv: 1906.11915, 2019.
Гил Шомрон, Тал Горовиц, Ури Вайзер.
SMT-SA: одновременное многопоточное чтение в систолических массивах ,
В IEEE Computer Architecture Letters (CAL), 2019.
Шанццян Гао, Ченг Денг и Хенг Хуанг.
Сжатие модели поперечного домена путем структурного распределения веса,
В конференции IEEE по компьютерному видению и распознаванию шаблонов (CVPR), 2019, с. 8973-8982.
Мойн Надим, Вэй Фанг, Брайан Сюй, Митра Мохтарами, Джеймс Гласс.
Факта: автоматическая система проверки фактов,
В североамериканской главе Ассоциации вычислительной лингвистики (NAACL), 2019.
Ахмед Т. Элтхакеб, Пранной Пиллигундла, Хади Эсмайлзаде.
Синрек: генерализованная синусоидальная регуляризация для глубоких квантовых тренировок с низкой прочтой,
Arxiv: 1905.01416, 2019. Код
Goncharenko A., Denisov A., Alyamkin S., Terentev E.
Обучаемые пороговые значения для квантования нейронной сети,
В: Rojas I., Joya G., Catala A. (Eds) Достижения в области вычислительной интеллекта. Примечания к лекциям в компьютерных науках, том 11507. Springer, Cham. Международная рабочая конференция по искусственным нейронным сетям (Iwann 2019).
Ахмед Т. Элтхакеб, Пранной Пиллигундла, Хади Эсмайлзаде.
Разделение и завоевание: использование промежуточных характеристик для квантового обучения нейронных сетей,
Arxiv: 1906.06033, 2019
Ричи Чжао, Ювей Ху, Джордан Доцель, Кристофер де Са, Чжиру Чжан.
Улучшение квантования нейронной сети без переподготовки с использованием расщепления каналов выбросов,
Arxiv: 1901.09504, 2019
Код
Ангад С. Рехи, Брайан Циммер, Никола Недович, Нинси Лю, Рангараджан Венкатезан, Миаоронг Ван, Брюсхайлани, Уильям Дж. Далли, С. Томас Грей.
Аналоговое/смешанное аппаратное моделирование ошибок для глубокого обучения ,
Nvidia Research, 2019.
НОРИО НАКАТА.
Недавнее техническое развитие искусственного интеллекта для диагностической медицинской визуализации ,
В японском журнале радиологии, февраль 2019 года, том 37, выпуск 2, стр. 103–108.
Александр Гончаренко, Андрей Денисов, Сергей Алемкин, Евгений Терентев.
Быстрый регулируемый порог для равномерной квантования нейронной сети ,
Arxiv: 1812.07872, 2018
Если вы использовали Distiller для своей работы, используйте следующую цитату:
@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, и уровень качества и поддержки может быть не так, как ожидалось от официального продукта. Дополнительные алгоритмы и функции планируются добавить в библиотеку. Отзывы и вклад от открытого исходного кода и исследовательских сообществ более чем приветствуются.