VizTracer — это инструмент ведения журнала/отладки/профилирования с низкими затратами, который может отслеживать и визуализировать выполнение вашего кода Python.
Интерфейсный интерфейс создан на базе Perfetto. Используйте «AWSD» для масштабирования/перемещения . Дополнительную помощь можно найти в разделе «Поддержка — Управление».
Предпочтительный способ установки VizTracer — через pip.
pip install viztracer
# Instead of "python3 my_script.py arg1 arg2"
viztracer my_script.py arg1 arg2
result.json
, который вы можете открыть с помощью vizviewer
# You can display all the files in a directory and open them in browser too
vizviewer ./
# For very large trace files, try external trace processor
vizviewer --use_external_processor result.json
vizviewer разместит HTTP-сервер по http://localhost:9001
. Вы также можете открыть браузер и использовать этот адрес.
Если вы не хотите, чтобы vizviewer автоматически открывал веб-браузер, вы можете использовать
vizviewer --server_only result.json
Если вам просто нужно один раз вызвать отчет о трассировке и вам не нужен постоянный сервер, используйте
vizviewer --once result.json
vizviewer result.json
Доступно расширение VS Code, которое сделает вашу жизнь еще проще.
--open
, чтобы открывать отчеты сразу после трассировки. viztracer --open my_script.py arg1 arg2
viztracer -o result.html --open my_script.py arg1 arg2
flask
) также поддерживаются. viztracer -m your_module
viztracer flask run
Вы также можете вручную запустить/остановить VizTracer в своем скрипте.
from viztracer import VizTracer
tracer = VizTracer ()
tracer . start ()
# Something happens here
tracer . stop ()
tracer . save () # also takes output_file as an optional argument
Или вы можете сделать это с with
оператора
with VizTracer ( output_file = "optional.json" ) as tracer :
# Something happens here
Если вы используете Jupyter, вы можете использовать магию ячеек viztracer.
# You need to load the extension first
% load_ext viztracer
% % viztracer
# Your code after
После ячейки появится кнопка VizTracer Report
, и вы можете нажать ее, чтобы просмотреть результаты.
VizTracer может регистрировать собственные вызовы и события графического процессора PyTorch (на основе torch.profiler
) с помощью --log_torch
.
with VizTracer ( log_torch = True ) as tracer :
# Your torch code
viztracer --log_torch your_model.py
VizTracer может отфильтровывать ненужные данные, чтобы сократить накладные расходы, и сохранять информацию за более длительный период времени, прежде чем вы выгрузите журнал.
VizTracer может регистрировать дополнительную информацию без изменения исходного кода.
VizTracer поддерживает вставку пользовательских событий во время работы программы. Это работает как отладка печати, но вы можете узнать, когда произойдет эта печать, просматривая данные трассировки.
Для Python3.12+ VizTracer поддерживает многопоточную трассировку на уровне Python без необходимости внесения каких-либо изменений в код.
Для версий до 3.12 VizTracer поддерживает собственный модуль threading
Python. Просто запустите VizTracer
перед созданием потоков, и он просто заработает.
В других многопоточных сценариях вы можете использовать enable_thread_tracing()
, чтобы уведомить VizTracer о потоке и отследить его.
Подробности см. в многопоточной документации.
VizTracer поддерживает subprocess
, multiprocessing
, os.fork()
, concurrent.futures
и loky
«из коробки».
Для более общих случаев с несколькими процессами VizTracer может поддерживать некоторые дополнительные шаги.
Подробности см. в документации по нескольким процессам.
VizTracer изначально поддерживает asyncio
, но может улучшить отчет, используя --log_async
.
Подробности см. в документации по асинхронности.
Perfetto поддерживает встроенный Flamegraph, просто выберите фрагменты в пользовательском интерфейсе и выберите «Slice Flamegraph».
VizTracer поддерживает удаленное подключение к произвольному процессу Python для его отслеживания, если viztracer можно импортировать.
См. документацию по удаленному подключению.
VizTracer необходимо сохранить внутренние данные в формате json. Пользователям рекомендуется установить orjson
, который работает намного быстрее, чем встроенная библиотека json
. VizTracer попытается импортировать orjson
и вернется к встроенной библиотеке json
, если orjson
не существует.
VizTracer прилагает много усилий для снижения накладных расходов. Фактическое влияние на производительность во многом зависит от вашего приложения. Ожидается, что для типичных кодовых баз накладные расходы будут ниже 1x. Если в вашем коде вызовы функций выполняются нечасто, накладные расходы могут быть минимальными.
Накладные расходы, вносимые VizTracer, по сути, представляют собой фиксированный промежуток времени во время входа и выхода из функции, поэтому чем больше времени тратится на вход и выход из функции, тем больше будет наблюдаться накладных расходов. Чисто рекурсивная функция fib
может понести накладные расходы в 3–4 раза на Python3.11+ (когда вызов Python оптимизирован, до этого вызов Python был медленнее, поэтому коэффициент накладных расходов был бы меньше).
В реальном сценарии ваш код не должен тратить слишком много времени на вызовы функций (на самом деле они не делают ничего полезного), поэтому накладные расходы будут намного меньше.
Многие методы применяются для минимизации общих накладных расходов во время выполнения кода, чтобы уменьшить неизбежные искажения, вносимые VizTracer (часть сохранения отчета не так критична). Например, VizTracer пытается использовать счетчик временных меток ЦП вместо системного вызова, чтобы получить время, когда оно доступно. В Python 3.12+ VizTracer использует sys.monitoring
, который требует меньше накладных расходов, чем sys.setprofile
. Все усилия сделали его заметно быстрее, чем cProfile
, профилировщик stdlib Python.
Однако VizTracer является трассировщиком, а это означает, что он должен записывать каждый вход и выход из функции, поэтому он не может быть таким же быстрым, как профилировщики выборки — это не одно и то же. Благодаря дополнительным затратам VizTracer предоставляет гораздо больше информации, чем обычные профилировщики выборки.
Полную документацию можно найти на странице https://viztracer.readthedocs.io/en/stable.
Пожалуйста, присылайте отчеты об ошибках и запросы функций через систему отслеживания ошибок GitHub. VizTracer в настоящее время находится в стадии разработки и открыт для любых конструктивных предложений.
Copyright 2020-2024 Тянь Гао.
Распространяется на условиях лицензии Apache 2.0.