Lección 7: Medir correctamente — Warmup, synchronize y percentiles
El primer número que midas casi siempre va a ser una mentira. La GPU se ejecuta de forma asíncrona, así que time.time() captura solo el lanzamiento, no el cómputo. La primera ejecución paga por las asignaciones y el autotuning. Y un solo promedio esconde la cola que los usuarios realmente sienten. E
Cronometrar la GPU es como fotografiar un tren en movimiento: si presionas demasiado temprano obtienes un cuadro vacío. Tienes que esperar a que llegue (synchronize), ignorar las corridas de calentamiento (warmup), y fijarte también en los trenes lentos (percentiles), no solo en el promedio.
- torch.cuda.synchronize()
- Espera a que termine todo el trabajo en la GPU. Es obligatorio antes y después de cronometrar, porque las llamadas de CUDA son asíncronas.
- Warmup
- Ejecutar unas cuantas iteraciones antes de medir para superar los costos únicos (asignaciones, autotuning, caching).
- Percentiles (p50/p99)
- p99 es el tiempo que cumple el 99% de las solicitudes. Revela la cola lenta que un promedio esconde.