Cómo la fusión de kernels CUDA acelera la inferencia de LLM
Traducción automática
Este artículo se tradujo automáticamente a partir de la versión original en inglés.
La fusión de kernels CUDA combina operaciones que, de otro modo, se ejecutarían como kernels GPU separados. Puede reducir el coste de lanzamiento y evitar que un tensor intermedio se escriba en la memoria de la GPU para volver a leerlo inmediatamente. Resulta útil cuando estos costes representan una parte significativa de la latencia de inferencia.
Sigue los datos intermedios
Considera una suma residual seguida de una normalización. Los kernels separados pueden escribir el resultado de la suma en la memoria principal de la GPU y volver a leerlo para normalizarlo. Una implementación fusionada compatible puede reutilizar valores intermedios dentro del kernel. Esto ahorra transferencias; no elimina las operaciones matemáticas ni sus requisitos de corrección.
La fusión también se aplica a operaciones más grandes. DeepFusionKernel estudia la fusión de un cálculo completo de la red de propagación hacia delante SwiGLU, incluidas sus multiplicaciones de matrices. Va más allá de combinar funciones de activación elemento a elemento.
FlashNorm usa otra transformación: incorpora el factor de escala aprendido de RMSNorm a una operación lineal posterior y aplaza el reescalado.
Comprueba si la fusión ha ayudado
| Compara | Qué mostraría una mejora |
|---|---|
| Lanzamientos de kernels e intervalos entre ellos | Menos coste entre operaciones pequeñas |
| Lecturas y escrituras en HBM | Menos transferencias intermedias |
| Uso de registros y memoria compartida | Si el kernel combinado necesita más almacenamiento local |
| Transferencias de registros a memoria y bloques activos | Si la presión sobre los recursos ha reducido la ejecución en paralelo |
| Latencia de la petición completa | Si el cambio en el kernel ha tenido efecto para los usuarios |
La guía de optimización de Hopper explica los límites de recursos que restringen el trabajo activo simultáneo en la GPU. Combinar operaciones puede aumentar el uso de registros, provocar transferencias de registros a memoria o limitar los bloques que se ejecutan a la vez. Por tanto, un kernel fusionado más grande puede ser más lento para algunas formas de tensor.
Mantén constantes el modelo, la precisión, la GPU, la longitud de entrada y el tamaño del lote. Comprueba los resultados numéricos y la calidad en la tarea, además del tiempo. Compara también la decodificación con lotes pequeños con el prefill con lotes más grandes: reducir el coste de lanzamiento puede importar mucho más en operaciones breves que en cálculos matriciales largos.
La guía de ingeniería: kernels CUDA y fusión relaciona estos métodos con los kernels matriciales cuantizados.