torch.profiler
Обзор
Профилировщик PyTorch — это инструмент, позволяющий собирать метрики производительности во время обучения и вывода. API менеджера контекста профилировщика позволяет лучше понять, какие операторы модели являются наиболее дорогостоящими, изучить их входные формы и трассировки стеков, изучить активность ядра устройства и визуализировать трассировку выполнения.
Примечание
Более ранний вариант API в модуле torch.autograd считается устаревшим и будет устаревать.
Справочник API
-
class torch.profiler._KinetoProfile(*, activities=None, record_shapes=False, profile_memory=False, with_stack=False, with_flops=False, with_modules=False, experimental_config=None)[source] -
Профилировщик низкого уровня, оборачивающий профилировщик autograd.
- Параметры:
-
-
activities (iterable) – список групп активностей (CPU, CUDA) для использования при профилировании, поддерживаемые значения:
torch.profiler.ProfilerActivity.CPU,torch.profiler.ProfilerActivity.CUDA. Значение по умолчанию: ProfilerActivity.CPU и (при наличии) ProfilerActivity.CUDA. - record_shapes (bool) – сохранять информацию о форматах входных данных операторов.
- profile_memory (bool) – отслеживать выделение/освобождение памяти тензоров.
- with_stack (bool) – записывать исходную информацию (файл и строка) для операций.
- with_flops (bool) – использовать формулу для оценки FLOPS (операций с плавающей запятой) конкретных операторов (умножение матриц и 2D свёртки).
- with_modules (bool) – записывать иерархию модулей (включая имена функций), соответствующую стеку вызовов операции. Например, если вызов forward модуля A вызывает forward модуля B, содержащего оператор aten::add, то иерархия модулей для aten::add будет A.B. Обратите внимание, что эта поддержка в данный момент доступна только для TorchScript-моделей, а не для моделей в режиме eager.
- experimental_config (_ExperimentalConfig) – набор экспериментальных опций, используемых библиотеками профилирования, такими как Kineto. Обратите внимание, что обратная совместимость не гарантируется.
-
activities (iterable) – список групп активностей (CPU, CUDA) для использования при профилировании, поддерживаемые значения:
Примечание
Этот API экспериментальный и может быть изменён в будущем.
Включение отслеживания форм и стеков приводит к дополнительной нагрузке. При record_shapes=True профилировщик временно удерживает ссылки на тензоры, что может препятствовать определённым оптимизациям, зависящим от счётчика ссылок, и вводить дополнительные копии тензоров.
-
add_metadata(key, value)[source] -
Добавляет пользовательские метаданные со строковым ключом и строковым значением в файл трассировки.
-
add_metadata_json(key, value)[source] -
Добавляет пользовательские метаданные со строковым ключом и корректным JSON-значением в файл трассировки.
-
events()[source] -
Возвращает список не агрегированных событий профилировщика, для использования в обратном вызове трассировки или после завершения профилирования.
-
export_chrome_trace(path)[source] -
Экспортирует собранную трассировку в формате Chrome JSON.
-
export_stacks(path, metric='self_cpu_time_total')[source] -
Сохраняет стеки вызовов в файл в формате, подходящем для визуализации.
- Параметры:
Примечание
Пример использования инструмента FlameGraph:
- git clone https://github.com/brendangregg/FlameGraph
- cd FlameGraph
- ./flamegraph.pl –title “Время CPU” –countname “us.” profiler.stacks > perf_viz.svg
-
key_averages(group_by_input_shape=False, group_by_stack_n=0)[source] -
Средние значения событий, группируя их по имени оператора и (необязательно) форматам входных данных и стеку.
Примечание
Для использования функциональности форм/стеков убедитесь, что record_shapes/with_stack установлены при создании контекстного менеджера профилировщика.
-
class torch.profiler.profile(*, activities=None, schedule=None, on_trace_ready=None, record_shapes=False, profile_memory=False, with_stack=False, with_flops=False, with_modules=False, experimental_config=None, use_cuda=None)[source] -
Контекстный менеджер профилировщика.
- Параметры:
-
-
activities (iterable) – список групп активностей (CPU, CUDA) для использования при профилировании, поддерживаемые значения:
torch.profiler.ProfilerActivity.CPU,torch.profiler.ProfilerActivity.CUDA. Значение по умолчанию: ProfilerActivity.CPU и (при наличии) ProfilerActivity.CUDA. -
schedule (Callable) – функция, которая принимает шаг (int) в качестве единственного параметра и возвращает
ProfilerActionзначение, определяющее действие профилировщика на каждом шаге. -
on_trace_ready (Callable) – функция, которая вызывается на каждом шаге, когда
scheduleвозвращаетProfilerAction.RECORD_AND_SAVEво время профилирования. - record_shapes (bool) – сохранять информацию о форматах входных данных операторов.
- profile_memory (bool) – отслеживать выделение/освобождение памяти тензоров.
- with_stack (bool) – записывать исходную информацию (файл и строка) для операций.
- with_flops (bool) – использовать формулу для оценки FLOPS (операций с плавающей запятой) конкретных операторов (умножение матриц и 2D свёртки).
- with_modules (bool) – записывать иерархию модулей (включая имена функций), соответствующую стеку вызовов операции. Например, если вызов forward модуля A вызывает forward модуля B, содержащего оператор aten::add, то иерархия модулей для aten::add будет A.B. Обратите внимание, что эта поддержка в данный момент доступна только для TorchScript-моделей, а не для моделей в режиме eager.
- experimental_config (_ExperimentalConfig) – набор экспериментальных опций, используемых для функций библиотеки Kineto. Обратная совместимость не гарантируется.
-
use_cuda (bool) –
Устарело начиная с версии 1.8.1: используйте
activitiesвместо этого.
-
activities (iterable) – список групп активностей (CPU, CUDA) для использования при профилировании, поддерживаемые значения:
Примечание
Используйте
schedule()для генерации вызываемой функции расписания. Нестандартные расписания полезны при профилировании длительных обучающих процессов и позволяют пользователю получать несколько трассировок на разных итерациях процесса обучения. Стандартное расписание просто непрерывно записывает все события в течение всего срока действия контекстного менеджера.Примечание
Используйте
tensorboard_trace_handler()для генерации файлов результатов для TensorBoard:on_trace_ready=torch.profiler.tensorboard_trace_handler(dir_name)После профилирования файлы результатов будут найдены в указанной директории. Используйте команду:
tensorboard --logdir dir_nameчтобы увидеть результаты в TensorBoard. Для получения дополнительной информации см. Плагин PyTorch Profiler для TensorBoard
Примечание
Включение отслеживания форм и стеков приводит к дополнительной нагрузке. При record_shapes=True профилировщик временно удерживает ссылки на тензоры, что может препятствовать определённым оптимизациям, зависящим от счётчика ссылок, и вводить дополнительные копии тензоров.
Примеры:
with torch.profiler.profile( activities=[ torch.profiler.ProfilerActivity.CPU, torch.profiler.ProfilerActivity.CUDA, ] ) as p: code_to_profile() print(p.key_averages().table( sort_by="self_cuda_time_total", row_limit=-1))Использование функций профилировщика
schedule,on_trace_readyиstep.# Non-default profiler schedule allows user to turn profiler on and off # on different iterations of the training loop; # trace_handler is called every time a new trace becomes available def trace_handler(prof): print(prof.key_averages().table( sort_by="self_cuda_time_total", row_limit=-1)) # prof.export_chrome_trace("/tmp/test_trace_" + str(prof.step_num) + ".json") with torch.profiler.profile( activities=[ torch.profiler.ProfilerActivity.CPU, torch.profiler.ProfilerActivity.CUDA, ], # In this example with wait=1, warmup=1, active=2, # profiler will skip the first step/iteration, # start warming up on the second, record # the third and the forth iterations, # after which the trace will become available # and on_trace_ready (when set) is called; # the cycle repeats starting with the next step schedule=torch.profiler.schedule( wait=1, warmup=1, active=2), on_trace_ready=trace_handler # on_trace_ready=torch.profiler.tensorboard_trace_handler('./log') # used when outputting for tensorboard ) as p: for iter in range(N): code_iteration_to_profile(iter) # send a signal to the profiler that the next iteration has started p.step()-
step()[source] -
Сигнализирует профилировщику, что начался следующий шаг профилирования.
-
class torch.profiler.ProfilerAction(value)[source] -
Действия профилирования, которые могут быть выполнены в указанные интервалы
-
class torch.profiler.ProfilerActivity -
Члены:
CPU
CUDA
-
property name
-
-
torch.profiler.schedule(*, wait, warmup, active, repeat=0, skip_first=0)[source] -
Возвращает вызываемый объект, который может быть использован в качестве аргумента профилирования. Профилировщик пропустит первые
skip_firstшаги, затем подождетwaitшагов, затем выполнит разогрев для следующихwarmupшагов, затем выполнит активную запись для следующихactiveшагов, и затем повторит цикл, начиная сwaitшагов. Необязательное число циклов задаётся параметромrepeat, значение нуль означает, что циклы будут продолжаться до завершения профилирования.- Return type:
-
torch.profiler.tensorboard_trace_handler(dir_name, worker_name=None, use_gzip=False)[source] -
Выводит файлы трассировки в директорию
dir_name, затем эта директория может быть напрямую передана в tensorboard как logdir.worker_nameдолжен быть уникальным для каждого работника в распределённом сценарии, по умолчанию он будет установлен в ‘[hostname]_[pid]’.
Intel Instrumentation and Tracing Technology APIs
-
torch.profiler.itt.is_available()[source] -
Проверка доступности функции ITT
-
torch.profiler.itt.mark(msg)[source] -
Описывает мгновенное событие, произошедшее в какой-то момент.
- Parameters:
-
msg (str) – ASCII-сообщение для ассоциации с событием.
-
torch.profiler.itt.range_push(msg)[source] -
Помещает диапазон в стек вложенных диапазонов. Возвращает нулевую базу глубины диапазона, который начался.
- Parameters:
-
msg (str) – ASCII-сообщение для ассоциации с диапазоном
-
torch.profiler.itt.range_pop()[source] -
Извлекает диапазон из стека вложенных диапазонов. Возвращает нулевую базу глубины диапазона, который закончился.
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/1.13/profiler.html