ProfondoGEMM

Formazione e inferenza dell'intelligenza artificiale

DeepGEMM è una libreria GEMM FP8 per l'addestramento e l'inferenza dell'intelligenza artificiale, progettata specificamente per le operazioni con matrici dense e miste di esperti (MoE), fornendo un solido supporto per l'addestramento e l'inferenza dei modelli DeepSeek V3 e R1.

ProfondoGEMM

Che cos'è DeepGEMM?

DeepSeek ha successivamente reso disponibile in modalità open-source FlashMLA e ProfondoEPe oggi presenta ProfondoGEMMuna libreria di moltiplicazione matriciale ottimizzata specificamente per le GPU ad architettura Hopper. Questa libreria supporta il calcolo matriciale standard e il calcolo della miscela di esperti (MoE), fornendo un solido supporto per l'addestramento e l'inferenza di DeepSeek-V3/R1, raggiungendo prestazioni elevate di 1350+ FP8 TFLOPS su GPU Hopper.

ProfondoGEMM è stata progettata per essere semplice ed efficiente, con solo circa 300 righe di codice di base, pur superando le soluzioni esistenti nella maggior parte delle dimensioni delle matrici. La libreria supporta tre allineamenti di dati: un allineamento standard e due allineamenti speciali (sequenziale e mascherato) progettati per modelli ibridi esperti. deepGEMM utilizza la compilazione al volo, eliminando la necessità di compilare al momento dell'installazione, e presenta una struttura del codice chiara e di facile comprensione che la rende ideale per l'apprendimento delle tecniche di ottimizzazione delle GPU.

 

Prestazioni di DeepGEMM

DeepGEMM si comporta bene in diversi scenari computazionali. Per la moltiplicazione matriciale standard, gli acceleramenti variano da 1,0 a 2,7 volte rispetto all'implementazione ottimizzata basata su CUTLASS 3.6. Gli incrementi di velocità più significativi, fino a 2,7 volte, sono stati ottenuti per piccoli lotti di dati (M=64 o 128). Per il calcolo di modelli esperti ibridi, anche i due speciali allineamenti di dati offerti da DeepGEMM offrono vantaggi significativi. La disposizione sequenziale è adatta sia per le fasi di addestramento che per l'inferenza in batch, con accelerazioni di circa 1,1-1,2 volte, mentre la disposizione mascherata è progettata per l'inferenza in tempo reale e supporta l'uso di tecniche a grafo CUDA, anch'esse con accelerazioni di 1,1-1,2 volte.

GEMM normali per modelli densi

M N K Calcolo Larghezza di banda della memoria Accelerazione
64 2112 7168 206 TFLOPS 1688 GB/s 2.7x
64 24576 1536 289 TFLOPS 2455 GB/s 1.7x
64 32768 512 219 TFLOPS 2143 GB/s 1.8x
64 7168 16384 336 TFLOPS 2668 GB/s 1.4x
64 4096 7168 287 TFLOPS 2320 GB/s 1.4x
64 7168 2048 295 TFLOPS 2470 GB/s 1.7x
128 2112 7168 352 TFLOPS 1509 GB/s 2.4x
128 24576 1536 535 TFLOPS 2448 GB/s 1.6x
128 32768 512 358 TFLOPS 2103 GB/s 1.5x
128 7168 16384 645 TFLOPS 2604 GB/s 1.4x
128 4096 7168 533 TFLOPS 2221 GB/s 2.0x
128 7168 2048 510 TFLOPS 2277 GB/s 1.7x
4096 2112 7168 1058 TFLOPS 527 GB/s 1.1x
4096 24576 1536 990 TFLOPS 786 GB/s 1.0x
4096 32768 512 590 TFLOPS 1232 GB/s 1.0x
4096 7168 16384 1358 TFLOPS 343 GB/s 1.2x
4096 4096 7168 1304 TFLOPS 500 GB/s 1.1x
4096 7168 2048 1025 TFLOPS 697 GB/s 1.1x

GEMM raggruppati per i modelli MoE (layout contiguo)

#Gruppi M per gruppo N K Calcolo Larghezza di banda della memoria Accelerazione
4 8192 4096 7168 1297 TFLOPS 418 GB/s 1.2x
4 8192 7168 2048 1099 TFLOPS 681 GB/s 1.2x
8 4096 4096 7168 1288 TFLOPS 494 GB/s 1.2x
8 4096 7168 2048 1093 TFLOPS 743 GB/s 1.1x

GEMM raggruppati per modelli MoE (layout mascherato)

#Gruppi M per gruppo N K Calcolo Larghezza di banda della memoria Accelerazione
1 1024 4096 7168 1233 TFLOPS 924 GB/s 1.2x
1 1024 7168 2048 925 TFLOPS 968 GB/s 1.2x
2 512 4096 7168 1040 TFLOPS 1288 GB/s 1.2x
2 512 7168 2048 916 TFLOPS 1405 GB/s 1.2x
4 256 4096 7168 932 TFLOPS 2064 GB/s 1.1x
4 256 7168 2048 815 TFLOPS 2047 GB/s 1.2x

Come utilizzare DeepGEMM?

Per utilizzare DeepGEMM, sono necessarie GPU ad architettura Hopper con supporto sm_90a, Python 3.8 o superiore, CUDA 12.3 o superiore (12.8 o superiore è consigliato per ottenere le migliori prestazioni), PyTorch 2.1 o superiore e CUTLASS 3.6 o superiore.

Sviluppo

Il sottomodulo # deve essere clonato
git clone --recursive [email protected]:deepseek-ai/DeepGEMM.git


# Creare collegamenti simbolici per le directory di inclusione di terze parti (CUTLASS e CuTe)
python setup.py sviluppare


# Compilazione JIT di prova
python tests/test_jit.py


# Test di tutte le implementazioni GEMM (normale, a gruppi contigui e a gruppi mascherati)
python tests/test_core.py

Installazione

python setup.py installare

Infine, importare deep_gemm e il gioco è fatto!