Джерело: квантовий біт
У третій день тижня відкритих джерел DeepSeek вивів на світло логіку навчання V3 / R1, яка стоїть за ним -
DeepGEMM:бібліотека FP8 GEMM (загального множення матриць), яка підтримує операції згущеного (dense) та змішаного експерта (MoE) множення матриць.
Спочатку давайте коротко розберемося з GEMM.
GEMM, або загальний метод множення матриць, є основною операцією в лінійній алгебрі, є “частим гостем” в науці, машинному навчанні, глибокому навчанні та інших областях, а також є основою багатьох високопродуктивних обчислювальних завдань.
Однак, оскільки він має тенденцію до інтенсивних обчислень, оптимізація продуктивності GEMM є вирішальним моментом.
DeepGEMM з відкритим вихідним кодом DeepSeek, як і раніше, зберігає характеристики «висока продуктивність + низька вартість», з наступними основними моментами:
Простіше кажучи, DeepGEMM в основному використовується для прискорення матричних операцій у глибокому навчанні, особливо у великомасштабному навчанні моделей та висновків.
Багато користувачів мережі більше «купують» цей відкритий вихідний код, а деякі люди порівнюють DeepGEMM із супергероєм у математичному світі, вважаючи, що він швидший за швидкий калькулятор і потужніший за поліноміальне рівняння.
Деякі люди порівнюють випуск DeepGEMM зі стабілізацією квантового стану до нової реальності і хвалять його миттєву компіляцію як чисту та ефективну.
Звісно, деякі люди почали хвилюватися про свої акції Nvidia …
DeepGEMM — це бібліотека, створена спеціально для простого та ефективного універсального множення матриць (GEMM) FP8 з дрібнозернистим масштабуванням, яка походить від DeepSeek V3.
Він може обробляти як звичайне загальне множення матриць, так і загальне множення матриць для групування MoE.
Бібліотека написана на мові CUDA і не потребує компіляції під час встановлення, оскільки вона компілює всі програми ядра під час виконання за допомогою легкого модуля компіляції точно в строк (JIT).
Наразі DeepGEMM підтримує лише тензорне ядро Hopper від NVIDIA.
Для того, щоб вирішити проблему про те, що тензорне ядро FP8 недостатньо точне для обчислення накопичення, воно використовує двоступеневий метод накопичення (прискорення) ядра CUDA.
Хоча DeepGEMM запозичує деякі ідеї з CUTLASS і CuTe, він не надто покладається на їхні шаблони чи алгебраїчні операції.
Навпаки, ця бібліотека була спроектована дуже лаконічно, має лише одну основну ядро-функцію, об’єм коду становить приблизно 300 рядків.
Це робить його зручним для вивчення матричного множення FP8 та техніки оптимізації в архітектурі Hopper.
Незважаючи на легку конструкцію, продуктивність DeepGEMM відповідає або перевершує експертні бібліотеки налаштування для різних форм матриць.
Яка ж конкретна продуктивність?
Команда використовувала NVCC 12.8 на H800 для тестування всіх форм, які можуть бути використані в висновках DeepSeek-V3/R1 (включаючи попереднє доповнення та декодування, але без тензорного паралелізму).
Наступна діаграма ілюструє продуктивність звичайного DeepGEMM для щільної моделі:
Згідно з результатами тестування, обчислювальна продуктивність DeepGEMM може досягати до 1358 TFLOPS, а пропускна здатність пам’яті – до 2668 ГБ/с.
**У порівнянні з оптимізованою реалізацією на основі CUTLASS 3.6, максимальне значення може бути досягнуто в 2,7 рази.
Давайте подивимося, як виступає DeepGEMM з підтримкою моделі MoE у випадку послідовного розміщення (contiguous layout):
Та підтримка продуктивності моделі MoE з маскованим макетом така:
Для того, щоб використовувати DeepGEMM, слід знати про декілька залежностей, зокрема:
Код розробки виглядає наступним чином:
# Submodule must be clonedgit clone --recursive [email protected]:deepseek-ai/DeepGEMM.git# Створюйте символічні посилання для сторонніх (CUTLASS і CuTe) включати каталогиpython setup.py develop# Test JIT compilationpython tests/test_jit.py# Тестувати всі знаряддя GEMM (normal, суміжні-згруповані та замасковані)python tests/test_core.py
Код установки наступний:
Python setup.py встановлення
Після наведених вище кроків ви можете імпортувати deep_gemm у свій проект на Python.
Що стосується інтерфейсів, то для звичайного DeepGEMM може бути викликана функція deep_gemm.gemm_fp8_fp8_bf16_nt, а також підтримується формат NT (нетранспонований LHS і транспонований RHS).
Для групового DeepGEMM у випадку послідовного розташування це m_grouped_gemm_fp8_fp8_bf16_nt_contiguous; у випадку маскованого розташування – m_grouped_gemm_fp8_fp8_bf16_nt_masked.
DeepGEMM також надає допоміжні функції, такі як встановлення максимальної кількості SM та отримання розміру вирівнювання TMA. Підтримуються змінні середовища, такі як DG_NVCC_COMPILER, DG_JIT_DEBUG тощо.
Крім того, команда DeepSeek також надає кілька** оптимізованих способів**, включаючи:
Зацікавленим товаришам можна клацнути посилання GitHub у кінці тексту, щоб подивитися деталі~
Акції NVIDIA цих днів … ну … продовжують падати.
Але вранці 27-го числа за пекінським часом також очікується звіт про фінансові результати компанії NVIDIA за четвертий квартал фінансового року 2025, тож ми можемо підготуватися до оцінки її виступу~