torch.profiler
Создано: 18 декабря 2020 г. | Последнее обновление: 11 мая 2026 г.
Обзор
Профилировщик PyTorch — это инструмент, позволяющий собирать показатели производительности во время обучения и инференса. API контекстного менеджера профилировщика помогает лучше понять, какие операторы модели наиболее затратны, изучить формы их входных данных и трассировки стека, исследовать активность ядер устройства и визуализировать трассировку выполнения.
Примечание
Предыдущая версия API в модуле torch.autograd считается устаревшей и будет объявлена нерекомендуемой.
-
torch.profiler.profiler.schedule(*, wait, warmup, active, repeat=0, skip_first=0, skip_first_wait=0)[исходный код] -
Возвращает вызываемый объект, который можно использовать в качестве аргумента
scheduleпрофилировщика. Профилировщик пропустит первыеskip_firstшагов, затем будет ожидать в течениеwaitшагов, после чего выполнит прогрев в течение следующихwarmupшагов, а затем будет вести активную запись в течение следующихactiveшагов. После этого цикл повторится, начиная сwaitшагов. Необязательное число циклов указывается параметромrepeat; нулевое значение означает, что циклы будут продолжаться до завершения профилирования.Параметр
skip_first_waitопределяет, нужно ли пропустить первый этапwait. Это может быть полезно, если пользователь хочет ждать между циклами дольше, чемskip_first, но не во время первого профилирования. Например, еслиskip_firstравно 10, аwaitравно 20, перед прогревом в первом цикле будет выполнено ожидание в течение 10 + 20 = 30 шагов, еслиskip_first_waitравно нулю, и только 10 шагов, еслиskip_first_waitне равно нулю. Во всех последующих циклах ожидание между последней активной фазой и прогревом составит 20 шагов.- Тип возвращаемого значения:
-
Callable
-
torch.profiler.profiler.supported_activities()[исходный код] -
Возвращает набор поддерживаемых действий трассировки профилировщика.
Примечание: профилировщик использует библиотеку CUPTI для трассировки ядер CUDA на устройстве. Если CUDA включена, но CUPTI недоступна, передача
ProfilerActivity.CUDAпрофилировщику приводит к использованию устаревшего кода профилирования CUDA (как и в устаревшемtorch.autograd.profiler). В результате время CUDA включается в таблицу вывода профилировщика, но не в трассировку JSON.
-
torch.profiler.profiler.tensorboard_trace_handler(dir_name, worker_name=None, use_gzip=False, use_python_export=False)[исходный код] -
Выводит файлы трассировки в каталог
dir_name, после чего этот каталог можно напрямую передать TensorBoard в качестве logdir.worker_nameдолжен быть уникальным для каждого рабочего процесса в распределённом сценарии; по умолчанию ему присваивается значение «[hostname]_[pid]».
Справочник API
-
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, execution_trace_observer=None, acc_events=False, custom_trace_id_callback=None, post_processing_timeout_s=None)[исходный код] -
Контекстный менеджер профилировщика.
- Параметры:
-
-
activities (iterable) –
список групп действий (CPU, CUDA), используемых при профилировании; поддерживаемые значения:
torch.profiler.ProfilerActivity.CPU,torch.profiler.ProfilerActivity.CUDA,torch.profiler.ProfilerActivity.XPU. Значение по умолчанию: ProfilerActivity.CPU и, если доступны, ProfilerActivity.CUDA или ProfilerActivity.XPU.Каждый элемент может быть перечислением
ProfilerActivity(собирает все типы действий группы по умолчанию) или отображениемdict, сопоставляющимProfilerActivityсписку отдельных имён типов действий для сбора, например{ProfilerActivity.CUDA: ["GPU_MEMCPY", "CUDA_RUNTIME"]}. Пустой список (например,{ProfilerActivity.CUDA: []}) означает, что для этой группы ничего собираться не будет. Одна и та же группа действий не должна встречаться более одного раза. Допустимые имена типов действий и особенности поведения для разных устройств см. в разделеProfilerActivity. -
schedule (Callable) – вызываемый объект, принимающий шаг (int) в качестве единственного параметра и возвращающий значение
ProfilerAction, указывающее действие профилировщика для каждого шага. -
on_trace_ready (Callable) – вызываемый объект, который вызывается в конце каждого цикла профилирования (когда
scheduleвозвращаетProfilerAction.RECORD_AND_SAVE). Получает экземплярprofileв качестве единственного аргумента; обычно используется для экспорта трассировки (например, с помощьюexport_chrome_trace()) или вывода сводки. - record_shapes (bool) – сохранять информацию о формах входных данных операторов.
- profile_memory (bool) – отслеживать выделение и освобождение памяти тензоров.
- with_stack (bool) – записывать исходную информацию (имя файла и номер строки) для операций.
- with_flops (bool) – использовать формулу для оценки числа FLOPs (операций с плавающей запятой) для определённых операторов (умножения матриц и двумерной свёртки).
-
with_modules (bool) –
записывать иерархию модулей (включая имена функций), соответствующую стеку вызовов операции. Например, если прямой вызов модуля A вызывает прямой вызов модуля B, содержащего операцию aten::add, то иерархия модулей для aten::add — A.B.
Устарело начиная с версии ``with_modules``: свойство объявлено устаревшим и будет удалено в будущей версии. Оно собирает данные только для моделей TorchScript, которые сами объявлены устаревшими, и ничего не делает в eager-режиме. Используйте
with_stack=True, который записывает событияnn.Moduleдля моделей в eager-режиме. - experimental_config (_ExperimentalConfig) – набор экспериментальных параметров для функций библиотеки Kineto. Обратная совместимость не гарантируется.
- execution_trace_observer (ExecutionTraceObserver) – объект PyTorch Execution Trace Observer. Трассировки выполнения PyTorch представляют рабочие нагрузки ИИ/МО в виде графа и позволяют использовать бенчмарки с повторным воспроизведением, симуляторы и эмуляторы. Если этот аргумент задан, методы start() и stop() наблюдателя будут вызваны для того же временного интервала, что и профилировщик PyTorch. Пример кода см. в разделе с примерами ниже.
- acc_events (bool) – включить накопление FunctionEvents в нескольких циклах профилирования.
- post_processing_timeout_s (float) – необязательное время ожидания в секундах для постобработки результатов профилировщика. Если оно задано, разбор событий прекратится по истечении этого времени, а результат будет неполным. Полезно для обработки больших трассировок, обработка которых может занять слишком много времени.
-
custom_trace_id_callback (Callable[[], str], optional) – предоставляемый пользователем генератор идентификаторов трассировки, вызываемый один раз за цикл профилирования. По умолчанию используется случайный UUID; получить его можно с помощью
get_trace_id().
-
Примечание
Используйте
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, repeat=1, # profiler will skip the first step/iteration, # start warming up on the second, record # the third and the fourth 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()В следующем примере показана настройка Execution Trace Observer (
execution_trace_observer)with torch.profiler.profile( ... execution_trace_observer=( ExecutionTraceObserver().register_callback("./execution_trace.json") ), ) as p: for iter in range(N): code_iteration_to_profile(iter) p.step()Также можно обратиться к test_execution_trace_with_kineto() в tests/profiler/test_profiler.py. Примечание: можно также передать любой объект, соответствующий интерфейсу _ITraceObserver.
-
add_metadata(key, value)[исходный код] -
Добавляет в файл трассировки пользовательские метаданные с текстовым ключом и текстовым значением.
-
add_metadata_json(key, value)[исходный код] -
Добавляет в файл трассировки пользовательские метаданные с текстовым ключом и допустимым значением JSON.
-
events()[исходный код] -
Возвращает список неагрегированных объектов
FunctionEventдля использования в обратном вызове трассировки или после завершения профилирования.
-
export_chrome_trace(path, use_python_export=False)[исходный код] -
Экспортирует собранную трассировку в формате Chrome JSON. Если Kineto включён, экспортируется только последний цикл расписания.
-
export_memory_timeline(path, device=None)[исходный код] -
Экспортирует сведения о событиях памяти из собранного профилировщиком дерева для указанного устройства и строит временную диаграмму. С помощью
export_memory_timelineможно экспортировать файлы трёх типов; тип определяется суффиксомpath.- Для диаграммы в формате HTML используйте суффикс
.html; временная диаграмма памяти будет встроена в HTML-файл в виде изображения PNG. - Для точек графика, состоящих из
[times, [sizes by category]], гдеtimes— временные метки, аsizes— использование памяти для каждой категории. Временная диаграмма памяти будет сохранена в формате JSON (.json) или сжатого JSON (.json.gz) в зависимости от суффикса. - Для исходных точек данных о памяти используйте суффикс
.raw.json.gz. Каждое исходное событие памяти будет состоять из(timestamp, action, numbytes, category), гдеaction— одно из значений[PREEXISTING, CREATE, INCREMENT_VERSION, DESTROY], аcategory— одно из перечисленийtorch.profiler._memory_profiler.Category.
Результат: временная диаграмма памяти, сохранённая в виде сжатого JSON, JSON или HTML.
Устарело начиная с версии ``export_memory_timeline``: метод объявлен устаревшим и будет удалён в будущей версии. Вместо него используйте
torch.cuda.memory._record_memory_historyиtorch.cuda.memory._export_memory_snapshot. - Для диаграммы в формате HTML используйте суффикс
-
export_stacks(path, metric='self_cpu_time_total')[исходный код] -
Сохраняет трассировки стека в файл.
-
get_trace_id()[исходный код] -
Возвращает текущий идентификатор трассировки.
-
key_averages(group_by_input_shape=False, group_by_stack_n=0, group_by_overload_name=False, include_python_functions=False)[исходный код] -
Вычисляет средние значения событий, группируя их по имени оператора и (при необходимости) формам входных данных, стеку и имени перегрузки.
Возвращает
EventListагрегированных событий.Примечание
Чтобы использовать функции работы с формами и стеком, обязательно задайте record_shapes/with_stack при создании контекстного менеджера профилировщика.
-
preset_metadata_json(key, value)[исходный код] -
Задаёт пользовательские метаданные, пока профилировщик не запущен; они будут добавлены в файл трассировки позже. Метаданные представляют собой текстовый ключ и допустимое значение JSON.
-
set_custom_trace_id_callback(callback)[исходный код] -
Задаёт генератор идентификаторов трассировки. Он вызывается в начале каждого цикла, поэтому его изменение между циклами позволяет получать разные идентификаторы для каждого цикла.
-
step()[исходный код] -
Сообщает профилировщику о начале следующего шага профилирования.
-
take_pending_cupti_export()[исходный код] -
Отсоединяет ProfilerObserver cupti_monitor текущего цикла (с незаписанным интервалом), чтобы завершить отложенный экспорт ВНЕ потока обучения (вызвав
obs.join(force=False)в рабочем потоке). Для серверных компонентов, не использующих CUPTI, возвращает None.- Тип возвращаемого значения:
-
toggle_collection_dynamic(enable, activities)[исходный код] -
Включает или отключает сбор данных о действиях в любой момент сбора. В настоящее время поддерживается переключение операций Torch (CPU) и действий CUDA, поддерживаемых Kineto.
- Параметры:
-
activities (iterable) – список групп действий, используемых при профилировании; поддерживаемые значения:
torch.profiler.ProfilerActivity.CPU,torch.profiler.ProfilerActivity.CUDA
Примеры:
with torch.profiler.profile( activities=[ torch.profiler.ProfilerActivity.CPU, torch.profiler.ProfilerActivity.CUDA, ] ) as p: code_to_profile_0() // turn off collection of all CUDA activity p.toggle_collection_dynamic(False, [torch.profiler.ProfilerActivity.CUDA]) code_to_profile_1() // turn on collection of all CUDA activity p.toggle_collection_dynamic(True, [torch.profiler.ProfilerActivity.CUDA]) code_to_profile_2() print(p.key_averages().table( sort_by="self_cuda_time_total", row_limit=-1))
-
wait_for_exports()[исходный код] -
Блокирует выполнение, пока не будут записаны все отложенные экспорты cupti_monitor, затем отменяет регистрацию. Ничего не делает, если серверный компонент cupti_monitor не активен. Вызовите метод в потоке обучения, если файлы должны находиться на диске; при завершении выполняется принудительная очистка CUPTI (в этом случае безопасная).
-
class torch.profiler.ProfilerAction(value)[исходный код] -
Действия профилировщика, которые можно выполнять в указанные интервалы.
NONE, WARMUP, RECORD и RECORD_AND_SAVE — это значения, доступные пользователю и возвращаемые расписанием, предоставленным пользователем. DEVICE_STOPPED устанавливается самим профилировщиком, когда сбор данных с устройства прекращается раньше времени из-за ошибок; пользовательское расписание не должно возвращать это значение.
-
class torch.profiler.ProfilerActivity -
Типы устройств, поддерживаемые профилировщиком.
Элементы:
CPU : события CPU (операторы, среда выполнения, …).
XPU : активность устройства Intel XPU. В словаре действий с детальной настройкой (
{ProfilerActivity.XPU: [...]}) имена, не являющиеся типами действий XPU, интерпретируются как имена аппаратных метрик Intel XPU и включают профилировщик с областью действия на уровне отдельных ядер, например{ProfilerActivity.XPU: ["GpuTime", "GpuCoreClocks"]}. Значения метрик присоединяются к каждому ядру в виде счётчиков Perfetto. Для сбора аппаратных метрик необходимыZET_ENABLE_METRICS=1и доступ к счётчикам производительности графического процессора (perf_stream_paranoid/observation_paranoidдолжны быть установлены в0). Имена метрик зависят от устройства и определяются драйвером, а не PyTorch. Поскольку запись в словаре собирает именно перечисленные в ней данные, запрос только метрик (например,{ProfilerActivity.XPU: ["GpuTime"]}) не включает сбор действий XPU по умолчанию; чтобы продолжить их трассировку, укажите нужные имена типов действий вместе с метриками, например{ProfilerActivity.XPU: ["CONCURRENT_KERNEL", "XPU_RUNTIME", "GpuTime"]}.MTIA : активность устройства MTIA.
CUDA : ядра и среда выполнения CUDA.
HPU : активность устройства HPU.
PrivateUse1 : активность серверной части PrivateUse1.
-
property name
-
API Intel Instrumentation and Tracing Technology
-
torch.profiler.itt.is_available()[исходный код] -
Проверяет, доступна ли функция ITT.
-
torch.profiler.itt.mark(msg)[исходный код] -
Описывает мгновенное событие, произошедшее в определённый момент.
- Параметры:
-
msg (str) – сообщение ASCII, связанное с событием.
-
torch.profiler.itt.range_push(msg)[исходный код] -
Помещает диапазон в стек вложенных диапазонов. Возвращает глубину начатого диапазона, отсчитываемую от нуля.
- Параметры:
-
msg (str) – сообщение ASCII, связанное с диапазоном.
-
torch.profiler.itt.range_pop()[исходный код] -
Извлекает диапазон из стека вложенных диапазонов. Возвращает глубину завершённого диапазона, отсчитываемую от нуля.
-
torch.profiler.itt.range(msg, *args, **kwargs)[исходный код] -
Контекстный менеджер / декоратор, который помещает диапазон ITT в стек в начале своей области действия и извлекает его в конце. Если переданы дополнительные аргументы, они используются как аргументы функции msg.format().
- Параметры:
-
msg (str) – сообщение, связанное с диапазоном.
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/profiler.html