Leçon 7 : bien mesurer — Warmup, synchronize et percentiles
Le premier chiffre que tu mesureras sera presque toujours un mensonge. Le GPU tourne de façon asynchrone, donc time.time() ne capture que le lancement, pas le calcul. La première exécution paie pour les allocations et l'autotuning. Et une moyenne unique cache la traîne que les utilisateurs ressenten
Chronométrer le GPU, c'est comme photographier un train en mouvement : appuie trop tôt et tu obtiens une image vide. Il faut attendre qu'il arrive (synchronize), ignorer les tours d'échauffement (warmup), et regarder aussi les trains lents (percentiles), pas seulement la moyenne.
- torch.cuda.synchronize()
- Attend que tout le travail sur le GPU soit terminé. Obligatoire avant et après une mesure de temps, car les appels CUDA sont asynchrones.
- Warmup
- Faire tourner quelques itérations avant la mesure pour dépasser les coûts ponctuels (allocations, autotuning, mise en cache).
- Percentiles (p50/p99)
- p99 est le temps que respectent 99 % des requêtes. Il révèle la traîne lente qu'une moyenne cache.