Игра Яндекс Практикума
Игра Яндекс Практикума
Игра Яндекс Практикума

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

Новости Отредактировано

Инструмент разработан для эффективного использования ИИ на мобильных устройствах. QNNPACK опубликован как часть фреймворка PyTorch 1.0.

688 открытий698 показов
Facebook открыла исходный код библиотеки QNNPACK

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Следите за новыми постами
Следите за новыми постами по любимым темам
688 открытий698 показов