DeepGEMM

Обучение и вывод искусственного интеллекта

DeepGEMM - это библиотека FP8 GEMM для обучения и вывода ИИ, разработанная специально для операций с плотными матрицами и матрицами смеси экспертов (MoE) и обеспечивающая надежную поддержку обучения и вывода моделей DeepSeek V3 и R1.

DeepGEMM

Что такое DeepGEMM?

DeepSeek последовательно выкладывает в открытый доступ FlashMLA и DeepEPИ сегодня она представляет DeepGEMMбиблиотека умножения матриц, оптимизированная специально для графических процессоров архитектуры Hopper. Эта библиотека поддерживает стандартные матричные вычисления и вычисления с использованием смеси экспертов (MoE), обеспечивая надежную поддержку обучения и выводов DeepSeek-V3/R1, достигая высокой производительности 1350+ FP8 TFLOPS на графических процессорах Hopper.

DeepGEMM отличается простотой и эффективностью, содержит всего около 300 строк основного кода и при этом превосходит существующие решения для большинства размеров матриц. Библиотека поддерживает три выравнивания данных: стандартное выравнивание и два специальных выравнивания (последовательное и маскированное), предназначенные для гибридных экспертных моделей. deepGEMM использует компиляцию "на лету", что избавляет от необходимости компиляции во время установки, и имеет четкую, простую для понимания структуру кода, что делает ее идеальной для изучения методов оптимизации на GPU.

 

Производительность DeepGEMM

DeepGEMM демонстрирует хорошие результаты в различных вычислительных сценариях. Для стандартного умножения матриц ускорение составляет от 1,0 до 2,7 раза по сравнению с оптимизированной реализацией на базе CUTLASS 3.6. Наиболее значительное ускорение, до 2,7 раза, было достигнуто для небольших партий данных (M=64 или 128). Для вычисления гибридных экспертных моделей два специальных варианта выравнивания данных, предлагаемых DeepGEMM, также дают значительные преимущества. Последовательное выстраивание подходит как для обучения, так и для пакетных выводов, ускоряя их примерно в 1,1-1,2 раза, а выстраивание с маской предназначено для выводов в реальном времени и поддерживает использование графовых техник CUDA, также ускоряя их в 1,1-1,2 раза.

Нормальные GEMM для плотных моделей

M N K Вычисления Пропускная способность памяти Ускорение
64 2112 7168 206 TFLOPS 1688 ГБ/с 2.7x
64 24576 1536 289 TFLOPS 2455 ГБ/с 1.7x
64 32768 512 219 TFLOPS 2143 ГБ/с 1.8x
64 7168 16384 336 TFLOPS 2668 ГБ/с 1.4x
64 4096 7168 287 TFLOPS 2320 ГБ/с 1.4x
64 7168 2048 295 TFLOPS 2470 ГБ/с 1.7x
128 2112 7168 352 TFLOPS 1509 ГБ/с 2.4x
128 24576 1536 535 TFLOPS 2448 ГБ/с 1.6x
128 32768 512 358 TFLOPS 2103 ГБ/с 1.5x
128 7168 16384 645 TFLOPS 2604 ГБ/с 1.4x
128 4096 7168 533 TFLOPS 2221 ГБ/с 2.0x
128 7168 2048 510 TFLOPS 2277 ГБ/с 1.7x
4096 2112 7168 1058 TFLOPS 527 ГБ/с 1.1x
4096 24576 1536 990 TFLOPS 786 ГБ/с 1.0x
4096 32768 512 590 TFLOPS 1232 ГБ/с 1.0x
4096 7168 16384 1358 TFLOPS 343 ГБ/с 1.2x
4096 4096 7168 1304 TFLOPS 500 ГБ/с 1.1x
4096 7168 2048 1025 TFLOPS 697 ГБ/с 1.1x

Сгруппированные GEMM для моделей MoE (смежное расположение)

#Groups М на группу N K Вычисления Пропускная способность памяти Ускорение
4 8192 4096 7168 1297 TFLOPS 418 ГБ/с 1.2x
4 8192 7168 2048 1099 TFLOPS 681 ГБ/с 1.2x
8 4096 4096 7168 1288 TFLOPS 494 ГБ/с 1.2x
8 4096 7168 2048 1093 TFLOPS 743 ГБ/с 1.1x

Группированные GEMM для моделей MoE (маскарад)

#Groups М на группу N K Вычисления Пропускная способность памяти Ускорение
1 1024 4096 7168 1233 TFLOPS 924 ГБ/с 1.2x
1 1024 7168 2048 925 TFLOPS 968 ГБ/с 1.2x
2 512 4096 7168 1040 TFLOPS 1288 ГБ/с 1.2x
2 512 7168 2048 916 TFLOPS 1405 ГБ/с 1.2x
4 256 4096 7168 932 TFLOPS 2064 ГБ/с 1.1x
4 256 7168 2048 815 TFLOPS 2047 ГБ/с 1.2x

Как использовать DeepGEMM?

Для использования DeepGEMM вам понадобятся графические процессоры архитектуры Hopper с поддержкой sm_90a, Python 3.8 или выше, CUDA 12.3 или выше (рекомендуется 12.8 или выше для лучшей производительности), PyTorch 2.1 или выше, а также CUTLASS 3.6 или выше.

Разработка

Субмодуль # должен быть клонирован
git clone --recursive [email protected]:deepseek-ai/DeepGEMM.git


# Сделайте символические ссылки для каталогов include сторонних производителей (CUTLASS и CuTe)
python setup.py develop


# Тестовая JIT-компиляция
python tests/test_jit.py


# Протестируйте все средства GEMM (обычные, сгруппированные по контурам и сгруппированные по маскам)
python tests/test_core.py

Установка

python setup.py install

Наконец, импортируйте deep_gemm и готово!