Сообщество машинного обучения является одним из самых прогрессивных сообществ в мире, поскольку вовлеченные люди и организации постоянно совершенствуют навыки, исследования и модели машинного обучения. Это привело к публикации многочисленных статей, инструментов с открытым исходным кодом и моделей, которые облегчают жизнь инженерам машинного обучения.

Большинство моделей машинного обучения с открытым исходным кодом, созданных этим сообществом, не полностью оптимизированы для работы в производственной среде, поскольку они требуют больших вычислительных ресурсов для работы на определенном оборудовании и/или занимают большое количество цифровых ресурсов, особенно если предполагается запуск на краевые устройства. Вот почему корпорация Intel создала набор инструментов для сжатия нейронных сетей (NNCF), чтобы помочь инженерам машинного обучения оптимизировать модели, которые они намерены создавать в процессе обучения.

Почему Intel NNCF?

Intel NNCF имеет открытый исходный код и доступен для всех, а опыт разработки этого инструмента великолепен и очень удобен для ваших существующих проектов PyTorch или TensorFlow. Вот некоторые из замечательных функций, которые предлагает NNCF:

● Единый API для методов оптимизации.

● Возможность объединения алгоритмов в конвейеры.

● Примитивы оптимизации с аппаратным ускорением.

● Распределенная поддержка обучения.

● Единая конфигурация методов оптимизации.

● Возможность экспорта в формат ONNX для совместимости.

Методы оптимизации

Фреймворк поставляется с некоторыми методами оптимизации, которые не зависят от аппаратного обеспечения, в то время как для некоторых требуются специальные аппаратные инструкции. Как упоминалось в предыдущем разделе, вы можете использовать один или несколько методов оптимизации для достижения лучших результатов в зависимости от варианта использования, над которым вы работаете. Поддерживаемые методы оптимизации, которые можно применять к общему оборудованию, описаны ниже:

Обучение с учетом квантования (QAT)

Квантование для глубокого обучения — это процесс преобразования чисел с плавающей запятой в целые числа с фиксированной запятой, что обеспечивает более эффективную арифметику целых чисел на оборудовании. Это значительно снижает как требования к памяти, так и вычислительные затраты на использование нейронных сетей. Хотя NNCF поддерживает квантование с произвольным количеством битов для представления значений весов и активаций, выбор сверхнизкой разрядности может заметно повлиять на точность модели. Хороший компромисс между точностью и производительностью достигается путем назначения разной точности разным слоям. В таблице ниже показаны результаты сжатия QAT, примененного к различным моделям с открытым исходным кодом.

Сокращение фильтра

Сокращение фильтра включает удаление неважной взвешенной информации с использованием данных второй производной, что приводит к лучшим результатам обобщения, повышению скорости обработки результатов, а также уменьшению размера. NNCF поддерживает два метода обрезки фильтров. Первый из них представляет собой простую фильтрацию на основе величины, описанную в этой бумаге, а второй — геометрическую медианную обрезку, описанную в этой бумаге. Отсечение фильтра может обеспечить меньшие коэффициенты сжатия при том же падении точности по сравнению с методами неструктурированной разреженности, описанными ниже.

Небольшие команды могут иметь большое значение, просто спросите Вигнеша Шетти из GE Healthcare. Команда из трех человек работала над созданием автоматизированных мобильных рентгеновских аппаратов с высокоуровневыми инструментами обработки, которые помогут упростить процесс оказания неотложной помощи.

Неструктурированная разреженность

Эти алгоритмы обычно учитывают тот факт, что многие современные глубокие нейронные сети чрезмерно параметризованы, и они направлены на поиск подмножества весов, которые обеспечивают максимальные результаты в точности, и удаляют все другие «нежелательные» веса. Они минимизируют физический размер весов и улучшают время вывода, используя некоторые разреженные методы представления данных и разреженную арифметику.

NNCF предлагает два метода создания разреженных сетей: на основе величины и на основе регуляризации. Методология на основе величины подразумевает удаление весов с небольшим абсолютным значением, чтобы сделать сеть разреженной, и это обеспечивает высокую скорость сходимости.

Метод на основе регуляризации использует дополнительный член в функции потерь, который используется для обеспечения требуемого уровня разреженности, таким образом, не влияя на веса напрямую, но добавляя дополнительный параметр для каждого веса сети и оптимизируя его, что приводит к увеличению времени сходимости. Если у вас небольшой набор обучающих данных, рекомендуется использовать подход, основанный на величине, но если у вас большой набор данных и вы заботитесь о точности, используйте метод, основанный на регуляризации.

Интеграция NNCF в код обучения

Теперь давайте рассмотрим этапы интеграции NNCF в ваш проект PyTorch/Tensorflow:

● Установите NNCF через pip или conda.

пип установить nncf

conda установить -c conda-forge nncf

● Создайте файл конфигурации NNCF.

Это файл конфигурации JSON, который описывает свойства вашей сети и настройку конфигураций для параметров сжатия, которые вы хотите применить к своей модели. Вы можете обратиться к примерам NNCF GitHub, которые имеют различные файлы конфигурации для различных методов сжатия. Вот пример настройки разреженности на основе регуляризации и квантования int8 для SSD Mobile Net:

● Изменить код обучения

Одним из преимуществ NNCF является то, что он предназначен для внесения незначительных изменений в исходный код обучения. Вам нужно будет выполнить следующие задания:

1. Импортируйте необходимые пакеты NNCF.

2. Загрузите созданный файл конфигурации NNCF JSON.

3. Оберните модель вокруг контроллера сжатия, который будет использоваться во время обучения для настройки параметров алгоритма сжатия или сбора статистики.

4. Добавляйте потери сжатия к общим потерям после каждой итерации обучения.

5. Вызовите шаг планировщика сжатия после каждой обучающей итерации.

6. Вызывать шаг эпохи планировщика алгоритма сжатия после каждой эпохи обучения.

После выполнения вышеуказанных шагов продолжайте обучать свою модель как обычно, но ваш обучающий конвейер будет учитывать сжатие.

Вот пример кода, демонстрирующий использование в вашем проекте PyTorch:

Заключение

NNCF от Intel предоставляет инженерам машинного обучения возможность автоматически преобразовывать модели при применении методов оптимизации простым в использовании способом. В конечном итоге это приводит к созданию моделей ускоренного глубокого обучения, которые лучше работают на периферийных устройствах, таких как телефоны и устройства IoT. Способность NNCF экспортировать в форматы ONNX делает его более привлекательным, поскольку вы можете развернуть модель, используя различные платформы, поддерживающие этот формат.

Примечание редактора. Heartbeat — это интернет-издание и сообщество, созданное участниками и посвященное предоставлению лучших образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.

Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение наших еженедельных информационных бюллетеней (Еженедельник глубокого обучения и Информационный бюллетень Comet), присоединиться к нам в Slack и следить за Comet в Twitter и LinkedIn, чтобы получать ресурсы, события и многое другое, что поможет вам быстрее создавать лучшие модели машинного обучения.