ruy

Библиотека матричного умножения (GEMM), разработанная Google для эффективного выполнения операций линейной алгебры, необходимых в движках инференса нейронных сетей. Изначально созданная для TensorFlow Lite, где она используется по умолчанию на архитектуре ARM CPU, Ruy обеспечивает высокую производительность не только для больших матриц, но и для критически важных в приложениях машинного обучения небольших и прямоугольных форм.

Особенности

  • поддержка как чисел с плавающей точкой, так и 8-битных целочисленных квантованных матриц;
  • ориентация на реальные размеры и формы матриц, встречающиеся в нейросетевых приложениях;
  • хороший баланс между производительностью на различных формах и компактным размером бинарного кода;
  • использование передовых методов оптимизации: кэширование, предвыборка инструкций, фрактальный обход блоков;
  • поддержка архитектур ARM и x86 с оптимизированными ассемблерными ядрами.

Основные компоненты

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

Поддержка типов данных и квантования

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

  • float — полноценная поддержка чисел с плавающей точкой для сценариев, требующих высокой точности;
  • uint8 / int8 — эффективное умножение 8‑битных целочисленных матриц с использованием целочисленной арифметики;
  • Параметры квантования — структуры для передачи нулевой точки (zero_point), фиксированных множителей (multiplier_fixedpoint) и экспонент (multiplier_exponent);
  • Поканальное квантование — отдельные параметры квантования для каждого канала, повышающие точность в свёрточных слоях.

Управление параметрами умножения

API Ruy позволяет детально настраивать операцию умножения через структуры параметров, адаптируя вычисления под конкретные модели и аппаратные платформы без изменения основного кода.

  • MatrixParams — описание характеристик матрицы: порядок хранения (по столбцам или строкам), размеры, нулевая точка;
  • GemmParams — параметры GEMM-операции: множители квантования (общие или поканальные), вектор смещения (bias), границы насыщения (clamp_min, clamp_max);
  • CpuBackendContext — информация о вычислительном окружении (количество потоков, поддержка аппаратных инструкций), содержащая внутренний контекст Ruy.

Производительность и стратегии выполнения

Ключевая особенность Ruy — ориентация на реальные сценарии использования, где размеры матриц могут быть небольшими или сильно вытянутыми. Традиционные библиотеки часто оптимизированы для квадратных матриц большого размера, тогда как Ruy стремится обеспечить высокую скорость на всём спектре форм.

  • Блочное разбиение (BlockMap) — разбиение матриц на блоки для эффективного использования кэш-памяти; для крупных размеров применяется фрактальный обход (Hilbert curve), улучшающий локальность обращений;
  • Многопоточность и асинхронность — механизмы, позволяющие потокам выполнять полезную работу (например, распаковку блоков) в ожидании завершения операций другими потоками;
  • Предвыборка данных (Prefetching) — специализированные инструкции (PREFETCH_LOAD, PREFETCH_STORE) для предварительной загрузки данных в кэш, сокращающие задержки при обращении к памяти.

Поддержка платформ и архитектурные оптимизации

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

  • ARM — основная целевая платформа: оптимизированные ассемблерные ядра для ARM32 и ARM64 (AArch64), поддержка расширений DotProd;
  • x86 — ядра для SSE 4.2, AVX2, AVX-512, а также для AVX VNNI (Vector Neural Network Instructions);
  • Контроль оптимизаций — флаги времени компиляции (RUY_OPT_SET) для настройки набора применяемых оптимизаций, полезные для бенчмаркинга и отладки.

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

Документация по использованию 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 = (
        "ruy/cci.20231129@aurora",
    )    

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

ruy

ruy is a matrix multiplication library.\n
Лицензия
Apache-2.0
Версия
Домашняя страница
Скачать
armv8
196.77 Kb
MD5: 7d7b69eeb02e0ea2ce893acccdb2315b
Updated: 03.09.2025, 20:39:24
x86_64
193.83 Kb
MD5: cae47cd6029c912f30ec5e2892d15257
Updated: 03.09.2025, 20:39:31
armv7
135.37 Kb
MD5: 5f1309a06d1f705e3a1a41492f50eb6d
Updated: 03.09.2025, 20:39:30
Использование в проекте

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

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