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;
  • Оптимизированные пути выполнения для распространенных архитектур нейронных сетей.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "gemmlowp/cci.20210928@aurora",
    )    

Процесс локальной сборки описан в документации.

gemmlowp

Low-precision matrix multiplication
Лицензия
Apache-2.0
Версия
Домашняя страница
Скачать
armv7
221.97 Kb
MD5: e873861c8bf84c100d2804b1067b8df9
Updated: 03.09.2025, 21:39:20
armv8
232.42 Kb
MD5: 9e9fb9bcea26625712d6a47e48c09d5f
Updated: 03.09.2025, 21:39:14
x86_64
237.35 Kb
MD5: 60fa680bc41900c2274116606de00ddb
Updated: 03.09.2025, 21:39:21
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.