Spec-Zone.ru › PyTorch 1

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

Примечание

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

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

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

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

Примечание

Используйте 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:

Callable

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

Spec-Zone.ru

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