DeepGEMM est une bibliothèque GEMM FP8 pour l'entraînement et l'inférence d'IA, conçue spécifiquement pour les opérations matricielles denses et de mélange d'experts (MoE), fournissant un support robuste pour l'entraînement et l'inférence des modèles DeepSeek V3 et R1.
DeepSeek a successivement mis en libre accès les éléments suivants FlashMLA et Profondeur de l'EPElle présente aujourd'hui DeepGEMMLa bibliothèque de multiplication matricielle de DeepSeek-V3/R1 est optimisée spécifiquement pour les GPU de l'architecture Hopper. Cette bibliothèque prend en charge le calcul matriciel standard et le calcul du mélange d'experts (MoE), fournissant un support solide pour l'entraînement et l'inférence de DeepSeek-V3/R1, atteignant des performances élevées de 1350+ FP8 TFLOPS sur les GPU Hopper.
DeepGEMM est conçue pour être simple et efficace, avec seulement 300 lignes de code, tout en surpassant les solutions existantes dans la plupart des tailles de matrices. La bibliothèque supporte trois alignements de données : un alignement standard et deux alignements spéciaux (séquentiel et masqué) conçus pour les modèles experts hybrides. deepGEMM utilise la compilation à la volée, éliminant le besoin de compiler au moment de l'installation, et possède une structure de code claire et facile à comprendre qui la rend idéale pour l'apprentissage des techniques d'optimisation GPU.
DeepGEMM donne de bons résultats dans divers scénarios de calcul. Pour la multiplication matricielle standard, les gains de vitesse vont de 1,0 à 2,7 fois par rapport à l'implémentation optimisée basée sur CUTLASS 3.6. Les accélérations les plus significatives, jusqu'à 2,7 fois, ont été obtenues pour de petits lots de données (M=64 ou 128). Pour le calcul des modèles experts hybrides, les deux alignements de données spéciaux proposés par DeepGEMM offrent également des avantages significatifs. L'arrangement séquentiel convient aux phases d'entraînement et d'inférence par lots, avec des accélérations d'environ 1,1 à 1,2 fois, tandis que l'arrangement masqué est conçu pour l'inférence en temps réel et prend en charge l'utilisation des techniques graphiques CUDA, également avec des accélérations de 1,1 à 1,2 fois.
M | N | K | Calcul | Largeur de bande de la mémoire | Accélération |
---|---|---|---|---|---|
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 Go/s | 1.1x |
4096 | 7168 | 2048 | 1025 TFLOPS | 697 GB/s | 1.1x |
#Groupes | M par groupe | N | K | Calcul | Largeur de bande de la mémoire | Accélération |
---|---|---|---|---|---|---|
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 |
#Groupes | M par groupe | N | K | Calcul | Largeur de bande de la mémoire | Accélération |
---|---|---|---|---|---|---|
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 |
Pour utiliser DeepGEMM, vous avez besoin de GPU à architecture Hopper avec support sm_90a, Python 3.8 ou supérieur, CUDA 12.3 ou supérieur (12.8 ou supérieur est recommandé pour de meilleures performances), PyTorch 2.1 ou supérieur, et CUTLASS 3.6 ou supérieur.
Développement
# Le sous-module doit être cloné
git clone --recursive [email protected]:deepseek-ai/DeepGEMM.git
# Créer des liens symboliques pour les répertoires d'inclusion des tiers (CUTLASS et CuTe)
python setup.py develop
# Test Compilation JIT
python tests/test_jit.py
# Tester toutes les implémentations du GEMM (normal, groupé par contiguïté et groupé par masquage)
python tests/test_core.py
Installation
python setup.py install
Enfin, l'importation deep_gemm et le tour est joué !