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.

DeepGEMM:高效支持FP8矩阵运算的开源库(DeepSeek 开源周第三天)

 

Список функций

-Поддержка матричных операций 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**
  1. Установите зависимость:
    Используйте инструменты управления пакетами 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 должны быть зафиксированы.

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.

© заявление об авторских правах

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

Нет комментариев

Вы должны войти в систему, чтобы участвовать в комментариях!
Войти сейчас
нет
Нет комментариев...