torch.profiler
Обзор
PyTorch Profiler — это инструмент, позволяющий собирать метрики производительности во время обучения и вывода. API контекстного менеджера Profiler позволяет лучше понять, какие операторы модели являются наиболее дорогими, изучить их входные формы и стеки вызовов, изучить активность ядер устройства и визуализировать трассировку выполнения.
Примечание
Предыдущая версия 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] -
Профилировщик низкого уровня, оборачивающий автоград-профилировщик
- Параметры
-
-
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] -
Экспортирует собранную трассировку в формате JSON Chrome.
-
export_memory_timeline(path, device=None)[source] -
Извлекает информацию о памяти из дерева профиля памяти для заданного устройства и экспортирует график временной шкалы, состоящий из [времени, [размеры по категориям]], где время — это метки времени, а размеры — использование памяти для каждой категории. График временной шкалы памяти будет сохранён в формате JSON (по умолчанию) или сжатом формате JSON.
Вход: (путь к файлу, устройство) Выход: Файл, записанный в формате JSON или сжатом формате 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) – вызываемый объект, принимающий шаг (целое число) в качестве единственного параметра и возвращающий
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) – записывать иерархию модулей (включая имена функций), соответствующие стеку вызовов операции. Например, если прямой вызов модуля A вызывает прямой вызов модуля 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. Более подробная информация доступна в Плагине TensorBoard для PyTorch Profiler.
Примечание
Включение отслеживания размеров и стека приводит к дополнительным накладным расходам. При 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, repeat=1, # 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, repeat=1), 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
XPU
MTIA
CUDA
-
property name
-
-
torch.profiler.schedule(*, wait, warmup, active, repeat=0, skip_first=0)[source] -
Возвращает вызываемый объект, который может быть использован как аргумент
scheduleпрофилировщика. Профилировщик пропустит первыеskip_firstшаги, затем подождётwaitшагов, затем выполнит разогрев в течение следующихwarmupшагов, затем активную запись в течение следующихactiveшагов, а затем повторит цикл, начиная сwaitшагов. Необязательное число циклов задаётся параметромrepeat, значение нуль означает, что циклы будут продолжаться до завершения профилирования.- Тип возвращаемого значения
-
torch.profiler.tensorboard_trace_handler(dir_name, worker_name=None, use_gzip=False)[source] -
Выводит файлы трассировки в директорию
dir_name, затем эту директорию можно напрямую передать в TensorBoard в качестве logdir.worker_nameдолжен быть уникальным для каждого работника в распределённой среде, по умолчанию он устанавливается в ‘[hostname]_[pid]’.
API технологий Intel Instrumentation and Tracing
-
torch.profiler.itt.is_available()[source] -
Проверка доступности функции ITT
-
torch.profiler.itt.mark(msg)[source] -
Описание мгновенного события, произошедшего в какой-то момент.
- Параметры
-
msg (str) – ASCII сообщение, которое нужно связать с событием.
-
torch.profiler.itt.range_push(msg)[source] -
Добавление диапазона в стек вложенных диапазонов. Возвращает нулевую глубину диапазона, который начался.
- Параметры
-
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/2.1/profiler.html