oneDNN: библиотека для оптимизации операций глубокого обучения на CPU и GPU

oneDNN: библиотека для оптимизации операций глубокого обучения на CPU и GPU

oneDNN — это открытая библиотека для оптимизированных операций глубокого обучения, работающая на CPU (x64, AArch64, RISC-V) и Intel GPU.

Она решает проблему производительности в рамках обработки нейронных сетей, предоставляя эффективные реализации матричного умножения, свертки и других операций, которые используются в популярных фреймворках, таких как PyTorch и TensorFlow. В отличие от многих альтернатив, oneDNN предлагает оптимизации под различные архитектуры процессоров и GPU, что делает её полезной для разработчиков, стремящихся улучшить производительность своих AI-проектов.

Запустить библиотеку можно через пакетные менеджеры, такие как conda. Обрати внимание, что поддержка некоторых GPU, таких как NVIDIA и AMD, пока что находится на экспериментальной стадии, что может ограничить использование в специфичных сценариях.

oneDNN — это библиотека с открытым исходным кодом, предназначенная для оптимизированных операций глубинного обучения на процессорах и графических процессорах. Она предоставляет высокоэффективные реализации таких операций, как матричное умножение, свёртка, нормализация и остальные, и служит слоем ускорения для популярных AI фреймворков, таких как PyTorch, TensorFlow и OpenVINO.

Библиотека оптимизирована для процессоров архитектуры Intel 64/AMD64, Arm(R) 64-bit (AArch64), а также для графических процессоров Intel. Существуют экспериментальная поддержка для архитектур NVIDIA GPU, AMD GPU, OpenPOWER (PPC64), IBMz (s390x) и RISC-V.

Поддерживаемые платформы и требования

  • Процессоры: Intel 64, AMD64, Arm 64 (AArch64), OpenPOWER, IBMz (s390x), RISC-V.
  • Графические процессоры: Intel, NVIDIA и AMD (экспериментально).

Обрати внимание на то, что поддержка Power ISA (PPC64), IBMz (s390x) и RISC-V (RV64) является экспериментальной и тестируется ограниченно. На macOS могут потребоваться особые разрешения, если ты использешь усовершенствованный режим.

Установка и запуск

Установить oneDNN можно несколькими способами:

  • Бинарное распределение: Установить через conda:
  • conda install -c conda-forge onednn
  • Сборка из исходников: Следуй инструкциям на странице по сборке из исходников в документации.

После установки можно протестировать библиотеку, запустив пример с матричным умножением:

wget https://raw.githubusercontent.com/uxlfoundation/oneDNN/main/examples/matmul_perf.cpp \
     https://raw.githubusercontent.com/uxlfoundation/oneDNN/main/examples/example_utils.hpp
g++ matmul_perf.cpp -I$CONDA_PREFIX/include -L$CONDA_PREFIX/lib \
    -ldnnl -o matmul_perf
LD_LIBRARY_PATH=$CONDA_PREFIX/lib ./matmul_perf cpu

Основные функции

  • Единый API для различных устройств: один и тот же код работает на разных архитектурах.
  • Аппаратная специализация: библиотека определяет особенности аппаратуры в реальном времени и генерирует специализированные ядра.
  • Поддержка низкопрофильного вывода с разными типами данных, включая f32, bf16, f16, fp8, fp4 и количественные схемы.
  • Слияние операций: библиотека поддерживает слияние активаций и квантования.
  • Совместимость с различными многопоточными библиотеками.

Ограничения и экспериментальная поддержка

Хотя oneDNN поддерживает несколько архитектур, необходимо учесть, что поддержка для некоторых из них, таких как NVIDIA и AMD GPU, находится на экспериментальной стадии. Возможно, потребуется особое внимание к настройкам и зависимостям, особенно для графических процессоров, которые требуют специфическое окружение и дополнительные библиотеки.

Для наилучшей производительности на процессорах архитектуры Intel рекомендуется использовать компилятор Intel C++.

Открыть на GitHub: uxlfoundation/oneDNN →

Что нового на GitHub — короткие обзоры на русском Новые обзоры приходят в Telegram. Без спама, по делу.
Подписаться

Похожие статьи

Популярные темы на сайте