Spec-Zone.ru › PyTorch 2.14

tlparse / TORCH_TRACE

Создано: 29 июл. 2025 | Последнее обновление: 04 янв. 2026

tlparse / TORCH_TRACE — это пара инструментов, создающих отчёты о компиляции, похожие на этот.

Сбор трассировок достаточно прост. Чтобы собрать трассировку, запустите модель следующим образом:

TORCH_TRACE="/tmp/tracedir" python foo.py
pip install tlparse
tlparse /tmp/tracedir --latest

Флаг --latest обрабатывает последний журнал в каталоге. Можно также обработать определённый файл журнала с помощью tlparse <log_file>.

По умолчанию результаты сохраняются в папку tl_out. Можно также указать папку для результатов с помощью -o my_folder.

Этот подход работает и при запуске распределённой задачи, создавая трассировку для каждого ранга. В браузере откроется HTML-страница, похожая на приведённую выше. Если вы сообщаете об ошибке в сложной задаче, для которой у вас нет отдельного воспроизведения, вы всё равно можете значительно помочь разработчикам PyTorch, выполнив следующие действия:

  1. прикрепите журнал трассировки, созданный в /tmp/tracedir, или
  2. прикрепите zip-архив со всеми результатами работы tlparse (например, все файлы из tl_out). Не прикрепляйте только файл index.html: он содержит лишь перечень выходных файлов, а не сами результаты.

Предупреждение

Журнал трассировки содержит весь код вашей модели. Не передавайте его, если модель, с которой вы работаете, является конфиденциальной. Журнал трассировки НЕ содержит веса.

Результаты работы tlparse предназначены в первую очередь для разработчиков PyTorch, а формат журнала позволяет легко загружать его на GitHub и делиться им. Однако даже если вы не разрабатываете PyTorch, из него можно извлечь полезную информацию. Советуем начать со встроенной справки в отчёте, где объясняется его содержимое. Вот какую информацию можно получить из tlparse:

  • Какой код модели был скомпилирован? Это можно увидеть по дереву стека. Это особенно полезно, если вы не знакомы с компилируемой кодовой базой!
  • Сколько имеется разрывов графа / отдельных областей компиляции? (Каждая отдельная компиляция выделена цветным блоком, например [0/0]). Кадры, в которых потенциально произошёл разрыв графа, подсвечены светло-зелёным цветом [2/4]. Большое количество кадров должно насторожить: это может указывать на критические разрывы графа или на то, что ваш код плохо подходит для torch.compile.
  • Сколько раз выполнялась повторная компиляция определённого кадра? Если кадр перекомпилировался много раз, это будет выглядеть так: [10/0] [10/1] [10/2]. Частые повторные компиляции должны насторожить и заслуживают изучения, даже если они не являются первопричиной проблемы.
  • Возникала ли ошибка компиляции? Кадры, при компиляции которых произошла ошибка, выглядят так: [0/1].
  • Какие промежуточные результаты компилятора были созданы для заданного кадра? Например, можно посмотреть на сгенерированный граф FX высокого уровня или сгенерированный код Triton.
  • Есть ли важная информация для определённого кадра? Её можно найти в compilation_metrics.

Ниже приведены имена некоторых файлов и их описания. В зависимости от вашей программы некоторые из этих файлов могут отсутствовать.

Имя файла

Описание

dynamo_output_graph

Выходной граф, полученный при захвате графа интерфейсной частью Dynamo

before_pre_grad_graph

Граф FX до выполнения каких-либо проходов графа перед автоградом

after_pre_grad_graph

Граф FX после выполнения всех проходов графа перед автоградом

aot_autograd_cache_miss / aot_autograd_cache_hit

Ключ кэша aot_autograd_cache и сведения о том, произошло ли попадание в кэш или промах

aot_inference_graph

Если автоград не требуется (например, ни для одного из тензоров не нужны градиенты), граф FX после декомпозиции.

aot_joint_graph

Совместный граф прямого и обратного проходов после автограда и декомпозиции

aot_forward_graph

Граф прямого прохода после разбиения aot_joint_graph

aot_backward_graph

Граф обратного прохода после разбиения aot_joint_graph

before_joint_graph

Граф FX до выполнения каких-либо проходов совместного графа

after_joint_graph

Граф FX после выполнения всех проходов совместного графа

before_post_grad_graph

Граф FX до выполнения каких-либо проходов графа после автограда

inductor_post_grad_graph

Граф FX после выполнения всех проходов графа после автограда

fx_graph_runnable

Почти такой же граф, как before_post_grad_graph, но в виде исполняемого скрипта Python. Он также содержит конфигурации torch и код-обёртку, позволяющие запускать граф с фиктивными входными данными.

inductor_output_code

Код, сгенерированный Inductor

fx_graph_cache_miss/ fx_graph_cache_hit

Ключ кэша графа FX и сведения о том, произошло ли попадание в кэш или промах

dynamo_cpp_guards_str

Информация о проверках из dynamo

TORCH_LOGS

С помощью переменной окружения TORCH_LOGS можно выборочно включать журналирование отдельных частей стека torch.compile. Фактически TORCH_LOGS является источником журналов для tlparse. Формат переменной окружения TORCH_LOGS выглядит так:

TORCH_LOGS="<option1>,<option2>,..." python foo.py

Параметры журналирования также можно задавать программно с помощью torch._logging.set_logs:

import logging
torch._logging.set_logs(graph_breaks=True, dynamic=logging.DEBUG)

Наиболее полезные параметры:

  • graph_breaks: регистрирует места разрывов графа в пользовательском коде и причины разрыва
  • guards: регистрирует создаваемые проверки
  • recompiles: регистрирует функцию, которая была перекомпилирована, и проверки, завершившиеся неудачей и приведшие к повторной компиляции
  • dynamic: регистрирует информацию, связанную с динамическими формами
  • output_code: регистрирует код, сгенерированный Inductor

Вот ещё несколько полезных параметров TORCH_LOGS:

Параметр

Описание

+all

Выводит отладочные журналы всех компонентов torch.compile

+dynamo

Выводит отладочные журналы TorchDynamo

+aot

Выводит отладочные журналы AOTAutograd

+inductor

Выводит отладочные журналы TorchInductor

dynamic

Выводит журналы о динамических формах

graph_code

Выводит код Python для графа FX, сгенерированного Dynamo

graph_sizes

Выводит размеры тензоров графа FX, сгенерированного Dynamo

trace_bytecode

Выводит инструкции байт-кода, которые отслеживает Dynamo, и стек символического интерпретатора, за которым следит Dynamo

trace_source

Выводит строку исходного кода, которую в данный момент отслеживает Dynamo

bytecode

Выводит байт-код, сгенерированный Dynamo

guards

Выводит созданные проверки

recompiles

Выводит причины повторной компиляции (только первую проверку, завершившуюся неудачей)

recompiles_verbose

Выводит все проверки, завершившиеся неудачей при повторной компиляции

aot_graphs

Выводит граф, сгенерированный AOTAutograd

aot_joint_graphs

Выводит совместный граф прямого и обратного проходов, сгенерированный AOTAutograd

output_code

Выводит код, сгенерированный Inductor

kernel_code

Выводит код, сгенерированный Inductor для каждого ядра отдельно

schedule

Выводит журналы планирования Inductor

perf_hints

Выводит журналы подсказок по производительности Inductor

fusion

Выводит журналы слияния Inductor

Полный список параметров см. в документации torch._logging и torch._logging.set_logs.

tlparse и TORCH_LOGS

Как правило, при возникновении проблем мы рекомендуем сначала использовать tlparse. tlparse идеально подходит для отладки больших моделей и получения общего представления о том, как была скомпилирована ваша модель. С другой стороны, TORCH_LOGS лучше подходит для небольших примеров и детальной отладки, если мы уже знаем, какой компонент torch.compile вызывает проблему.

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/user_guide/torch_compiler/compile/programming_model.observability.html

Spec-Zone.ru

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