Pila de softwareRuta Optimización

CUDA streams y ejecución asíncrona

Leerlo en el Capítulo 4 · checkpoint +50 XP →

Colas de trabajo de GPU que permiten que copias, kernels y comunicación se solapen en lugar de esperarse.

Un stream es una cola ordenada de operaciones de GPU. El trabajo en streams distintos puede correr en paralelo: una copia host→dispositivo en uno, un kernel en otro, una colectiva de NCCL en un tercero. Los eventos expresan dependencias entre streams sin bloquear la CPU.

Este es el mecanismo detrás de cada optimización de "solapamiento":

  • El all-reduce de gradientes que se solapa con el backward en DDP usa un stream de comunicación aparte.
  • Precargar el siguiente batch mientras se calcula el actual (ver pipeline de entrada).
  • ZeRO-3/FSDP precargando los parámetros de la siguiente capa (ver ZeRO y FSDP).

Proyectos como grCUDA van más lejos. Construyen el grafo de dependencias a partir de los datos que toca cada kernel y programan kernels independientes en streams separados automáticamente, así los programas políglotas obtienen concurrencia sin escribir código de streams a mano.

Trampa: cualquier sincronización implícita (cudaDeviceSynchronize, .item() en PyTorch, copias desde memoria paginable) colapsa tu solapamiento cuidadosamente construido en ejecución serial.

Relacionado

Fuentes y lecturas adicionales

Escrito para LazyLab con nuestras propias palabras; las fuentes se citan para profundizar y verificar.