Facebook открыла исходный код библиотеки QNNPACK

QNNPACK (Quantized Neural Network PACKage) — библиотека ядра ИИ, предназначенная для работы на мобильных устройствах. Технология реализована в приложениях Facebook и используется для обработки изображений. Компания объявила о свободном доступе к исходному коду библиотеки. Поскольку вычислительная мощность у мобильных устройств ниже, чем у серверов обработки данных, разработчикам пришлось использовать последние достижения в области нейросетей, чтобы сохранить производительность системы на должном уровне.

Ключевые технологии QNNPACK

В основе архитектуры библиотеки лежит свёрточная нейронная сеть. Такая сеть считается самой подходящей для распознавания зрительных образов. Для повышения производительности инженеры применили доработанные технологии произведения матриц и трансформации памяти im2col.

Разработчики Facebook демонстрируют суть технологии произведения матриц с помощью диаграммы:

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

В технологии QNNPACK в кэш процессора данные загружаются массивами в виде произведений M и K для А и K и N для В. Вычисление произведения M и N происходит за счёт внутренних ресурсов CPU без обращения к памяти устройства.

Использование трансформации im2col

Технология im2col представляет собой разбивку обрабатываемого изображения на столбцы-векторы по количеству входящих каналов. Создатели QNNPACK доработали эту систему, включив в неё обходной буфер.

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

Инженеры Facebook доработали алгоритм равнораспределённой свёртки (depthwise convolution), добавив пакетную обработку групп 3×3. Для пакетных вычислений используются регистры общего назначения (GPR). Обработка свёртки 3×3 требует 18 регистров (9 входящих и 9 для фильтра), в то время как архитектура ядра 32-bit ARM поддерживает только 14. Но так как фильтр в процессе обработки остаётся неизменным, разработчики смогли сократить необходимые для его хранения ресурсы до одного регистра.

Производительность библиотеки

Создатели провели сравнительное тестирование QNNPACK, реализовав технологию через Caffe2 и TensorFlow Lite на разных телефонах. В качестве архитектуры сети использовали MobileNet первой и второй версии. В опубликованных результатах библиотека от Facebook показала большую скорость. По точности TensorFlow Lite оказался на втором месте.

В библиотеке QNNPACK реализованы и другие передовые подходы к оптимизации нейронных сетей, например, вычисления низкой точности.

Инструмент публикуется как часть фреймворка PyTorch 1.0, вышедшего в начале октября 2018 года.

Источник: tproger.ru

Поделиться с друзьями:
Андройд IT
Добавить комментарий