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.
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.
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.
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 |
#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 |
#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 |
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!