gemmlowp
Высокооптимизированная библиотека для матричного умножения с низкой точностью (low-precision matrix multiplication), разработанная Google. Она предоставляет эффективные реализации операций линейной алгебры для 8-битных целочисленных значений, что особенно критично для машинного обучения на мобильных и встраиваемых устройствах с ограниченными вычислительными ресурсами.
Особенности
- высокооптимизированные ядра матричного умножения для 8-битных целочисленных значений;
- поддержка аппаратных ускорений (NEON на ARM, SSE/AVX на x86);
- минимизация использования памяти и энергопотребления;
- кроссплатформенность с поддержкой мобильных и встраиваемых систем;
- интеграция с TensorFlow Lite и другими фреймворками машинного обучения;
- открытая лицензия (Apache 2.0).
Основные компоненты
Gemmlowp состоит из нескольких модулей, которые обеспечивают эффективное выполнение матричных операций с низкой точностью (подробнее с документацией можно ознакомиться здесь).
Низкоточные матричные операции
Библиотека специализируется на операциях линейной алгебры с 8-битными целочисленными значениями, что позволяет значительно ускорить вычисления по сравнению с операциями с плавающей точкой при сохранении приемлемой точности для многих задач машинного обучения.
Основные операции:
gemmlowp::eight_bit_int_gemm— матричное умножение 8-битных целочисленных матриц;gemmlowp::eight_bit_int_gemm_dot_product— оптимизированная версия с использованием инструкций dot product;gemmlowp::eight_bit_or_less_int_gemm— обобщенное умножение для разных битностей (до 8 бит);- поддержка операций с bias и активационными функциями.
Квантование и деквантование
Gemmlowp включает инструменты для преобразования данных между форматами с плавающей точкой и квантованными 8-битными целочисленными значениями, что является ключевым аспектом работы с низкоточными моделями.
Функции преобразования:
gemmlowp::Quantize()— квантование float-значений в int8 с заданным диапазоном;gemmlowp::Dequantize()— обратное преобразование int8 во float;gemmlowp::Requantize()— повторное квантование с изменением параметров;- автоматический подбор параметров квантования на основе статистики данных.
Поддержка различных форматов хранения матриц
Для оптимизации доступа к памяти и использования кэша библиотека поддерживает различные форматы хранения матричных данных, включая упакованные и транспонированные форматы.
Форматы хранения:
- Row-major и column-major расположение данных;
- Блочная упаковка (blocking) для лучшей локальности данных;
- Упакованные форматы для эффективного использования SIMD-инструкций;
- Динамическое переупорядочивание данных для минимизации кэш-промахов.
Интеграция с фреймворками машинного обучения
Gemmlowp тесно интегрирована с TensorFlow Lite и другими популярными фреймворками машинного обучения, обеспечивая высокопроизводительные низкоточные вычисления для инференса моделей на мобильных устройствах.
Точки интеграции:
- Бэкенд для операций свертки и полносвязных слоев в TensorFlow Lite;
- Поддержка различных типов активационных функций (ReLU, ReLU6, tanh, sigmoid);
- Совместимость с форматами моделей TFLite и ONNX;
- Оптимизированные пути выполнения для распространенных архитектур нейронных сетей.