DeepGEMM é uma biblioteca FP8 GEMM para treinamento e inferência de IA, projetada especificamente para operações de matriz densa e mistura de especialistas (MoE), fornecendo suporte robusto para o treinamento e inferência de modelos DeepSeek V3 e R1.
O DeepSeek tem vindo a abrir sucessivamente FlashMLA e DeepEPe hoje apresenta DeepGEMM, uma biblioteca de multiplicação de matrizes optimizada especificamente para GPUs de arquitetura Hopper. Esta biblioteca suporta computação de matriz padrão e computação de mistura de especialistas (MoE), fornecendo suporte robusto para o treinamento e inferência do DeepSeek-V3/R1, alcançando alto desempenho de 1350+ FP8 TFLOPS em GPUs Hopper.
DeepGEMM A biblioteca deepGEMM foi projetada para ser simples e eficiente, com apenas cerca de 300 linhas de código principal, enquanto supera as soluções existentes na maioria dos tamanhos de matriz. A biblioteca suporta três alinhamentos de dados: um alinhamento padrão e dois alinhamentos especiais (sequencial e mascarado) concebidos para modelos especializados híbridos. deepGEMM usa compilação on-the-fly, eliminando a necessidade de compilar no momento da instalação, e tem uma estrutura de código clara e fácil de entender que o torna ideal para aprender técnicas de otimização de GPU.
O DeepGEMM tem um bom desempenho numa variedade de cenários computacionais. Para a multiplicação de matrizes padrão, os aumentos de velocidade variam de 1,0 a 2,7 vezes em comparação com a implementação optimizada baseada no CUTLASS 3.6. Os aumentos de velocidade mais significativos, até 2,7 vezes, foram obtidos para pequenos lotes de dados (M=64 ou 128). Para a computação de modelos especializados híbridos, os dois alinhamentos de dados especiais oferecidos pelo DeepGEMM também oferecem vantagens significativas. O arranjo sequencial é adequado para as fases de treinamento e inferência em lote, com aumentos de velocidade de cerca de 1,1 a 1,2 vezes, enquanto o arranjo mascarado é projetado para inferência em tempo real e suporta o uso de técnicas gráficas CUDA, também com aumentos de velocidade de 1,1 a 1,2 vezes.
M | N | K | Computação | Largura de banda da memória | Aceleração |
---|---|---|---|---|---|
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 |
#Grupos | M por grupo | N | K | Computação | Largura de banda da memória | Aceleração |
---|---|---|---|---|---|---|
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 |
#Grupos | M por grupo | N | K | Computação | Largura de banda da memória | Aceleração |
---|---|---|---|---|---|---|
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 |
Para usar o DeepGEMM, são necessárias GPUs de arquitetura Hopper com suporte a sm_90a, Python 3.8 ou superior, CUDA 12.3 ou superior (recomenda-se 12.8 ou superior para melhor desempenho), PyTorch 2.1 ou superior e CUTLASS 3.6 ou superior.
Desenvolvimento
# O submódulo deve ser clonado
git clone --recursive [email protected]:deepseek-ai/DeepGEMM.git
# Criar ligações simbólicas para diretórios de inclusão de terceiros (CUTLASS e CuTe)
python setup.py desenvolver
# Teste de compilação JIT
python tests/test_jit.py
# Testar todas as aplicações GEMM (normal, agrupada por contiguidade e agrupada por máscara)
python tests/test_core.py
Instalação
python setup.py install
Finalmente, importar deep_gemm e já está!