DeepGEMM ist eine FP8 GEMM-Bibliothek für KI-Training und Inferenz, die speziell für dichte und Mixture of Experts (MoE)-Matrixoperationen entwickelt wurde und robuste Unterstützung für das Training und die Inferenz von DeepSeek V3- und R1-Modellen bietet.
DeepSeek hat sukzessive das Open-Sourcing FlashMLA und DeepEPund heute stellt sie vor DeepGEMMeine Bibliothek für Matrixmultiplikation, die speziell für GPUs mit Hopper-Architektur optimiert wurde. Diese Bibliothek unterstützt Standard-Matrixberechnungen und Mixture-of-Experts (MoE)-Berechnungen und bietet robuste Unterstützung für das Training und die Inferenz von DeepSeek-V3/R1 und erreicht eine hohe Leistung von 1350+ FP8 TFLOPS auf Hopper-GPUs.
DeepGEMM ist so konzipiert, dass sie einfach und effizient ist, mit nur etwa 300 Zeilen Kerncode, und dabei bestehende Lösungen in den meisten Matrixgrößen übertrifft. Die Bibliothek unterstützt drei Datenausrichtungen: eine Standardausrichtung und zwei spezielle Ausrichtungen (sequentiell und maskiert), die für hybride Expertenmodelle entwickelt wurden. deepGEMM verwendet eine On-the-fly-Kompilierung, wodurch eine Kompilierung bei der Installation überflüssig wird, und verfügt über eine klare, leicht verständliche Codestruktur, die sich ideal für das Erlernen von GPU-Optimierungstechniken eignet.
DeepGEMM schneidet in einer Vielzahl von Berechnungsszenarien gut ab. Bei der Standard-Matrixmultiplikation liegen die Geschwindigkeitssteigerungen zwischen dem 1,0- und 2,7-fachen im Vergleich zur optimierten Implementierung auf der Grundlage von CUTLASS 3.6. Die größten Geschwindigkeitssteigerungen, bis zum 2,7-fachen, wurden bei kleinen Datenmengen (M=64 oder 128) erzielt. Für die Berechnung von hybriden Expertenmodellen bieten die beiden speziellen Datenanordnungen von DeepGEMM ebenfalls deutliche Vorteile. Die sequentielle Anordnung eignet sich sowohl für die Trainings- als auch für die Batch-Inferenzphase, wobei Geschwindigkeitssteigerungen von etwa dem 1,1- bis 1,2-fachen erreicht werden, während die maskierte Anordnung für die Echtzeit-Inferenz konzipiert ist und die Verwendung von CUDA-Graphtechniken unterstützt, ebenfalls mit Geschwindigkeitssteigerungen von 1,1- bis 1,2-fach.
M | N | K | Berechnung | Speicher-Bandbreite | Beschleunigung |
---|---|---|---|---|---|
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 |
#Gruppen | M pro Gruppe | N | K | Berechnung | Speicher-Bandbreite | Beschleunigung |
---|---|---|---|---|---|---|
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 |
#Gruppen | M pro Gruppe | N | K | Berechnung | Speicher-Bandbreite | Beschleunigung |
---|---|---|---|---|---|---|
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 |
Um DeepGEMM zu verwenden, benötigen Sie Grafikprozessoren der Hopper-Architektur mit sm_90a-Unterstützung, Python 3.8 oder höher, CUDA 12.3 oder höher (12.8 oder höher wird für beste Leistung empfohlen), PyTorch 2.1 oder höher und CUTLASS 3.6 oder höher.
Entwicklung
# Submodul muss geklont werden
git clone --recursive [email protected]:deepseek-ai/DeepGEMM.git
# Symbolische Links für Include-Verzeichnisse von Drittanbietern (CUTLASS und CuTe) erstellen
python setup.py entwickeln
# Test JIT-Kompilierung
python tests/test_jit.py
# Test aller GEMM-Implementierungen (normal, zusammenhängend gruppiert und maskiert gruppiert)
python tests/test_core.py
Einrichtung
python setup.py installieren
Schließlich importieren Sie tief_gemm und Sie sind fertig!