Spec-Zone.ru › PyTorch 2

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. Обратите внимание, что обратная совместимость не гарантируется.

Примечание

Этот 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]

Сохраняет стеки вызовов в файл в формате, подходящем для визуализации.

Параметры
  • path (str) – сохранять стеки вызовов в этот файл;
  • metric (str) – метрика для использования: “self_cpu_time_total” или “self_cuda_time_total”

Примечание

Пример использования инструмента 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 при создании контекстного менеджера профилировщика.

END_OF_DOCUMENT_MARKER
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 вместо этого.

Примечание

Используйте 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, значение нуль означает, что циклы будут продолжаться до завершения профилирования.

Тип возвращаемого значения

Callable

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API