DeepGEMM - это библиотека FP8 GEMM для обучения и вывода ИИ, разработанная специально для операций с плотными матрицами и матрицами смеси экспертов (MoE) и обеспечивающая надежную поддержку обучения и вывода моделей DeepSeek V3 и R1.
DeepSeek последовательно выкладывает в открытый доступ FlashMLA и DeepEPИ сегодня она представляет DeepGEMMбиблиотека умножения матриц, оптимизированная специально для графических процессоров архитектуры Hopper. Эта библиотека поддерживает стандартные матричные вычисления и вычисления с использованием смеси экспертов (MoE), обеспечивая надежную поддержку обучения и выводов DeepSeek-V3/R1, достигая высокой производительности 1350+ FP8 TFLOPS на графических процессорах Hopper.
DeepGEMM отличается простотой и эффективностью, содержит всего около 300 строк основного кода и при этом превосходит существующие решения для большинства размеров матриц. Библиотека поддерживает три выравнивания данных: стандартное выравнивание и два специальных выравнивания (последовательное и маскированное), предназначенные для гибридных экспертных моделей. deepGEMM использует компиляцию "на лету", что избавляет от необходимости компиляции во время установки, и имеет четкую, простую для понимания структуру кода, что делает ее идеальной для изучения методов оптимизации на GPU.
DeepGEMM демонстрирует хорошие результаты в различных вычислительных сценариях. Для стандартного умножения матриц ускорение составляет от 1,0 до 2,7 раза по сравнению с оптимизированной реализацией на базе CUTLASS 3.6. Наиболее значительное ускорение, до 2,7 раза, было достигнуто для небольших партий данных (M=64 или 128). Для вычисления гибридных экспертных моделей два специальных варианта выравнивания данных, предлагаемых DeepGEMM, также дают значительные преимущества. Последовательное выстраивание подходит как для обучения, так и для пакетных выводов, ускоряя их примерно в 1,1-1,2 раза, а выстраивание с маской предназначено для выводов в реальном времени и поддерживает использование графовых техник CUDA, также ускоряя их в 1,1-1,2 раза.
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 |
#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 |
#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 вам понадобятся графические процессоры архитектуры 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 и готово!