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 →
RepoRadar