Урок 7: Измеряйте правильно — прогрев, synchronize и процентили
Первое число, которое вы измерите, почти всегда будет ложью. GPU работает асинхронно, поэтому time.time() фиксирует только запуск, а не вычисления. Первый запуск оплачивает выделение памяти и автонастройку. А одно среднее скрывает хвост, который пользователи на самом деле чувствуют. В этом уроке мы
Замерять время GPU — как фотографировать движущийся поезд: нажмёте слишком рано и получите пустой кадр. Вы должны дождаться его прибытия (synchronize), проигнорировать прогревочные запуски (прогрев) и посмотреть также на медленные поезда (процентили), а не только на среднее.
- torch.cuda.synchronize()
- Ждёт завершения всей работы GPU. Требуется до и после замера времени, потому что вызовы CUDA асинхронны.
- Прогрев
- Выполнение нескольких итераций перед измерением, чтобы пройти разовые затраты (выделение памяти, автонастройка, кэширование).
- Процентили (p50/p99)
- p99 — это время, в которое укладываются 99% запросов. Оно раскрывает медленный хвост, который скрывает среднее.