DeepGEMM: библиотека с открытым исходным кодом и эффективной поддержкой матричных операций FP8 (День 3 недели открытых исходных кодов DeepSeek)
Общее введение
DeepGEMM - это система DeepSeek Библиотека FP8 GEMM (Generalised Matrix Multiplication) с открытым исходным кодом, разработанная командой, нацелена на обеспечение эффективной поддержки матричной арифметики. Она специально разработана для Tensor Core архитектуры NVIDIA Hopper и поддерживает сгруппированные операции GEMM для общих матричных операций и смешанных экспертных моделей (MoE). Написанная на CUDA, библиотека компилируется ядром во время выполнения с использованием легкой компиляции Just-In-Time (JIT), что устраняет необходимость в предварительной компиляции во время установки и значительно упрощает процесс развертывания. DeepGEMM обеспечивает выдающуюся производительность при сохранении чистого кода, достигая более 1 350 TFLOPS вычислительной мощности FP8 на GPU Hopper. Благодаря своему открытому исходному коду и доступности он не только подходит для обучения моделей машинного обучения и ускорения выводов, но и является отличным ресурсом для изучения матричной оптимизации FP8.

Список функций
-Поддержка матричных операций FP8: Обеспечивает эффективное обобщенное умножение матриц FP8 (GEMM) для сценариев высокопроизводительных вычислений.
-Оптимизация модели MoE: Поддержка сгруппированных GEMM для гибридных экспертных моделей, сгруппированных только по оси M, с экспертами по адаптации, разделяющими одну и ту же форму сцены.
-Компиляция по принципу "точно в срок" (JIT): Компиляция ядра во время выполнения для адаптации к различным аппаратным средам без предварительной компиляции.
-высокопроизводительные вычисления (HPC): Достигнута производительность вычислений FP8 более 1350 TFLOPS на графических процессорах NVIDIA Hopper.
-Простой дизайн кода: Около 300 строк основного кода, прост в освоении и вторичной разработке.
-высокая совместимостьОн поддерживает как обычный GEMM, так и пакетный GEMM с маской, что подходит для различных сценариев вывода.
-С открытым исходным кодом и бесплатно: Опубликовано по протоколу MIT для научных исследований и коммерческого использования.
Использование помощи
DeepGEMM - это библиотека матричной арифметики с открытым исходным кодом, предназначенная для разработчиков, в основном для пользователей с некоторыми базовыми знаниями в области программирования на CUDA и машинного обучения. Ниже представлено подробное руководство, которое поможет вам быстро начать работу и интегрировать ее в свой проект.
Процесс установки
DeepGEMM не требует сложного процесса предварительной компиляции и может быть установлен, а среда выполнения настроена всего за несколько шагов:
1.Подготовка к защите окружающей среды::
- Системные требования: графические процессоры, поддерживающие архитектуру NVIDIA Hopper (например, H100).
- Программные зависимости: установите CUDA Toolkit (рекомендуется версия 11.8 или выше) и Python (3.8+).
- Аппаратная поддержка: Убедитесь, что ваше устройство оснащено графическим процессором NVIDIA с объемом видеопамяти не менее 40 ГБ.
2.склад клонов::
Загрузите репозиторий DeepGEMM локально, выполнив следующую команду в терминале:
git clone https://github.com/deepseek-ai/DeepGEMM.git**
cd DeepGEMM**
- Установите зависимость:
Используйте инструменты управления пакетами Python для установки необходимых зависимостей:
pip install torch numpy
Сам DeepGEMM не требует дополнительной компиляции, поскольку он опирается на технику компиляции "на лету", а все ядра генерируются автоматически во время выполнения.
4. Проверьте установку:
Запустите предоставленные тестовые сценарии, чтобы убедиться, что среда настроена правильно:
python test/deep_gemm_test.py
Если вывод показывает нормальные результаты матричной арифметики, установка прошла успешно.
Основные функции
1. Выполнение основных операций FP8 GEMM
DeepGEMM предоставляет простой в использовании интерфейс для выполнения негруппированного умножения матриц FP8:
- Операционная процедура:
- Импорт библиотек и функций:
import torch
from deep_gemm import gemm_fp8_fp8_bf16_nt
- Подготовьте исходные данные (матрицы A и B, должны быть в формате FP8):
A = torch.randn(1024, 512, dtype=torch.float8_e4m3fn).cuda()
B = torch.randn(512, 1024, dtype=torch.float8_e4m3fn).cuda()
- Вызовите функцию для выполнения умножения матрицы:
C = gemm_fp8_fp8_bf16_nt(A, B)
print(C)
- Оговорки:
- Входная матрица должна быть расположена на GPU и иметь формат FP8 (E4M3 или E5M2).
- Выходные данные представлены в формате BF16, пригодном для последующих вычислений или хранения.
2. Группировка GEMM в поддержку модели MoE
Для пользователей, которым необходимо работать с моделями MoE, DeepGEMM предоставляет поддержку сгруппированных GEMM:
- Операционная процедура:
- Импорт Группировка функций GEMM:
from deep_gemm import m_grouped_gemm_fp8_fp8_bf16_nt_contiguous
- Подготовка исходных данных для непрерывной раскладки:
A = torch.randn(4096, 512, dtype=torch.float8_e4m3fn).cuda() # 多个专家的输入拼接
B = torch.randn(512, 1024, dtype=torch.float8_e4m3fn).cuda()
group_sizes = [1024, 1024, 1024, 1024] # 每个专家的 token 数
- Выполните группу GEMM:
C = m_grouped_gemm_fp8_fp8_bf16_nt_contiguous(A, B, group_sizes)
print(C)
- Оговорки:
- Оси M входной матрицы A должны быть сгруппированы экспертами, а размер каждой группы должен быть согласован с размером блока GEMM M (имеется).
get_m_alignment_for_contiguous_layout()
(Доступ). - Оси N и K матрицы B должны быть зафиксированы.
- Оси M входной матрицы A должны быть сгруппированы экспертами, а размер каждой группы должен быть согласован с размером блока GEMM M (имеется).
3. Группировка масок на этапе вывода GEMM
На этапе декодирования выводов DeepGEMM поддерживает групповой GEMM с использованием масок для динамического распределения маркеров:
- Операционная процедура:
- Импортируйте функцию группировки масок:
from deep_gemm import m_grouped_gemm_fp8_fp8_bf16_nt_masked
- Подготовьте исходные данные и маску:
A = torch.randn(4096, 512, dtype=torch.float8_e4m3fn).cuda()
B = torch.randn(512, 1024, dtype=torch.float8_e4m3fn).cuda()
mask = torch.ones(4096, dtype=torch.bool).cuda() # 掩码指示有效 token
- Выполните группировку масок GEMM:
C = m_grouped_gemm_fp8_fp8_bf16_nt_masked(A, B, mask)
print(C)
- Оговорки:
- Маски используются для указания того, какие лексемы должны быть вычислены, и подходят для динамических рассуждений, когда включены графы CUDA.
Основные функции Процедура работы
Высокопроизводительная оптимизация и отладка
Основная сила DeepGEMM заключается в его эффективности и простоте, которые разработчики могут дополнительно оптимизировать и отладить, следуя приведенным ниже шагам:
- Просмотр данных о производительности:
Добавьте вывод журнала для мониторинга TFLOPS при выполнении тестовых сценариев:import logging logging.basicConfig(level=logging.INFO) C = gemm_fp8_fp8_bf16_nt(A, B)
Параметры настройки*:
Настройте размер блока (параметр TMA) в соответствии с конкретным оборудованием, чтобы оптимизировать перемещение данных и перекрытие вычислений, см. пример в папке test/ в документации.
Обучение и расширение*:
Код ядра находится в deep_gemm/gemm_kernel.cu, около 300 строк, разработчики могут читать его напрямую и модифицировать под свои требования.
Рекомендации по использованию
требования к оборудованию*: В настоящее время поддерживаются только графические процессоры архитектуры NVIDIA Hopper, другие архитектуры пока не адаптированы.
ссылка на документацию*: Подробное описание функций и примеры кода можно найти в папках README.md и test/ в репозиториях GitHub.
Поддержка общества*: Если вы столкнулись с проблемами, отправьте отзыв на страницу проблем на GitHub, и команда DeepSeek ответит на него положительно.
Выполнив эти шаги, вы сможете легко интегрировать DeepGEMM в свои проекты машинного обучения и наслаждаться его эффективной вычислительной мощностью на матрице FP8.
© заявление об авторских правах
Авторское право на статью Круг обмена ИИ Пожалуйста, не воспроизводите без разрешения.
Похожие статьи
Нет комментариев...