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, выполнив следующие действия:
- прикрепите журнал трассировки, созданный в
/tmp/tracedir, или - прикрепите 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 | Выводит отладочные журналы всех компонентов |
+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