- Una biblioteca para ejecutar de forma eficiente multiplicación de matrices FP8 (GEMM), con soporte para el esquema de escalado de grano fino (fine-grained scaling) propuesto en DeepSeek-V3
- Soporta tanto GEMM general como GEMM agrupado para Mix-of-Experts (MoE)
- Está implementada sobre CUDA y, durante la instalación, compila los kernels en tiempo de ejecución usando un módulo ligero Just-In-Time (JIT) sin requerir compilación adicional
- Actualmente solo ofrece soporte para NVIDIA Hopper Tensor Cores
- Para compensar la acumulación imprecisa de los Tensor Cores FP8, usa acumulación dual (promotion) basada en CUDA cores
- Aprovecha algunos conceptos de CUTLASS y CuTe, pero reduce la dependencia de plantillas complejas con un diseño simple que incluye solo unas 300 líneas de código de kernel
- Adecuada para aprender operaciones de matrices FP8 en Hopper y técnicas de optimización
- A pesar de su diseño ligero, en distintos tamaños de matriz muestra un rendimiento similar o superior al de bibliotecas ajustadas a nivel experto
Evaluación de rendimiento
Rendimiento de GEMM general (modelo denso)
- Se realizó una evaluación de rendimiento en entornos de inferencia DeepSeek-V3/R1 para varios tamaños de matriz
- Probado en un entorno con GPU NVIDIA H800 (NVCC 12.8)
- La métrica de mejora de velocidad (Speedup) se calculó comparándola con una versión interna optimizada basada en CUTLASS 3.6
- Resumen principal del rendimiento
- En tamaños de matriz pequeños, hasta 2.7 veces más rápido
- En algunos tamaños de matriz grandes, mantiene un rendimiento de alrededor de 1.0 a 1.2 veces
- Al optimizar el ancho de banda de memoria y el rendimiento de cómputo, ofrece un rendimiento optimizado para la arquitectura Hopper
Rendimiento de GEMM agrupado para modelos MoE
- GEMM agrupado con layout contiguo (contiguous)
- Agrupa en función del eje M, mientras N y K se mantienen iguales
- Muestra hasta 1.2 veces de mejora de velocidad, manteniendo alrededor de 1.1 veces en ciertas configuraciones
- GEMM agrupado con layout enmascarado (masked)
- Diseñado para casos en los que, al usar CUDA Graph, la CPU no puede conocer cuántos tokens tiene cada experto
- Recibe un tensor de máscara como entrada para ejecutar solo las operaciones necesarias
- La mejora de rendimiento es de alrededor de 1.1 a 1.2 veces
Aún no hay comentarios.