Инструмент просмотра трассировок
Вы можете использовать Trace Viewer для визуализации временной шкалы событий, произошедших во время сеанса профилирования. Он отображает длительность операций, выполняемых вашей моделью на различных компонентах системы, таких как хост (ЦП) и ускорители (графические процессоры или TPU). Это позволяет понять, как ваша модель использует аппаратные ресурсы, выявить узкие места производительности и оптимизировать её для более быстрого выполнения. Интерфейс Trace Viewer основан на интерфейсе chrome://tracing
и поэтому требует использования браузера Chrome.
Поддерживаемые платформы
ТПУ: поддерживается
Графический процессор: поддерживается
Trace Viewer для графических процессоров группирует события на временных шкалах по каждому чипу графического процессора и потокам внутри него, тогда как для TPU он организует события на временных шкалах по каждому чипу TPU и ядру. В любом случае, Trace Viewer также отображает события на временных шкалах по каждому потоку для центрального процессора, к которому подключены ускорители.
Взаимодействие с временной шкалой
Trace Viewer предоставляет несколько инструментов и методов для навигации и изучения временной шкалы:
- Навигация: вы можете использовать следующие сочетания клавиш:
- В: Увеличить.
- С: Уменьшить масштаб.
- А: Панорамирование влево.
- D: Панорамирование вправо.
- Селектор инструментов: Вы можете щелкнуть инструмент в селекторе инструментов или использовать соответствующее сочетание клавиш:
- Инструмент выбора (1 или !): Щёлкните по событию, чтобы выбрать его и просмотреть подробную информацию на панели «Подробности». Выберите несколько событий, удерживая клавишу Ctrl и щёлкнув по ним, чтобы просмотреть сводку.
- Инструмент «Панорама» (2 или @): перетаскивайте, чтобы перемещать временную шкалу по горизонтали или вертикали.
- Инструмент «Масштаб» (3 или #): перетащите, чтобы увеличить масштаб определенной области временной шкалы.
- Инструмент «Время» (4 или $): Перетащите, чтобы отметить временной интервал. Длительность отмеченного интервала будет отображена. Вы также можете использовать клавишу «m», чтобы отметить выбранный фрагмент и определить его общую длительность.
- Масштабировать выбранные события (f): выберите одно или несколько событий и нажмите клавишу «f», чтобы быстро увеличить масштаб нужного участка временной шкалы. Это полезно для фокусировки на определённом этапе обучения.
При обработке большого количества событий трассировки Trace Viewer работает в потоковом режиме. Это означает, что он загружает данные по запросу по мере перемещения и масштабирования по временной шкале, подобно тому, как работают картографические приложения. Если масштабирование выполняется быстрее, чем загружаются данные, вы можете увидеть низкое разрешение изображения до завершения загрузки.
Компоненты интерфейса Trace Viewer
Вот основные компоненты пользовательского интерфейса Trace Viewer:
- Ось времени расположена горизонтально вверху, показывая время относительно начала трассы.
- Временные шкалы организованы по разделам и трекам, с метками, расположенными на левой вертикальной оси. Каждый раздел представляет собой элемент обработки (например, узел устройства или потоки хоста) и может быть развёрнут или свёрнут. Внутри каждого раздела находятся треки, представляющие собой временные шкалы для определённых действий.
- События — это цветные прямоугольные блоки на временной шкале, отображающие длительность операции или метасобытия, например, этапа обучения. Цвет событий не имеет определённого значения.
- На панели сведений отображается дополнительная информация о событиях, выбранных на панели временной шкалы, например их название, время начала и продолжительность.
Типичные участки и пути
Trace Viewer предоставляет следующие разделы и треки.
- По одной секции для каждого узла TPU со следующими дорожками:
- Модуль XLA: исполняемая программа XLA.
- XLA Ops: показывает операции XLA HLO, выполненные на ядре TPU. Каждая операция фреймворка более высокого уровня (например, JAX, Tensorflow или PyTorch) транслируется в одну или несколько операций XLA, которые затем компилируются для выполнения на TPU. При щелчке по операции XLA в окне просмотра графиков отображаются ссылки на неё, а также дополнительная информация об операции, такая как время начала/остановки, длительность и трассировка исходного стека (если она доступна фреймворком и компилятором).
- XLA TraceMe: аннотации, добавляемые пользователем в код, описывающие логические единицы работы, которые он намерен отслеживать. Вы можете видеть здесь данные, даже если не добавляли никаких аннотаций; обычно их добавляет XLA (например, барьерные ядра) или сам XProf (например, удаленные записи трассировки).
- Шаг: показывает продолжительность этапов обучения, выполняемых на данном ядре TPU, если они соответствующим образом аннотированы в пользовательской программе или фреймворке.
- Framework Ops: отображает операции фреймворка (например, JAX, Tensorflow или PyTorch), выполняемые на ядре TPU, если они соответствующим образом аннотированы в пользовательской программе или фреймворке.
- Область действия имени фреймворка: визуализация трассировки стека для каждой операции фреймворка. Для краткости эта дорожка отображается только для одного устройства.
- Исходный код: Путь к исполняемому исходному коду, если он доступен в профиле.
- Скалярный блок: для TPU события, выполняемые на скалярном блоке, отображаются, если присутствуют в профиле.
- Флаги синхронизации TensorCore: механизм синхронизации на TPU, отображается, если присутствует в профиле.
- Host Offload: операции, которые асинхронно перемещают данные между памятью хоста и памятью ускорителя. Обычно в строке XLA Ops отображаются соответствующие операции запуска и остановки, указывающие на подготовку ускорителя к передаче данных (например, помечающие области памяти источника/назначения как «используемые» на время передачи). Если несколько операций разгрузки выполняются параллельно, может присутствовать несколько строк host offload, что требует от средства просмотра трассировки одновременного отображения нескольких событий.
- Один раздел для каждого узла Sparsecore: некоторые поколения TPU (например, TPU v5p и Trillium ) оснащены одним или несколькими блоками SparseCore в дополнение к плотным вычислительным блокам MXU; модули, операции и TraceMes, связанные с этими ядрами, будут отображаться в этом разделе.
- Один раздел для каждого узла GPU со следующими дорожками:
- Модули XLA, операции фреймворка, область действия имени фреймворка, шаги, исходный код. Всё это похоже на разделы TPU.
- По одной дорожке на поток, при этом имя потока также включает информацию о типах операций, выполняемых в потоке (Memcpy, Compute и т. д.).
- XLA TraceMe не поддерживается для графических процессоров.
- Операции XLA отображаются в разделах, посвященных графическому процессору, но в настоящее время они не всегда точны, поскольку выводятся из потоковых данных. Поэтому они не могут полностью учитывать модель выполнения графического процессора, где может существовать сопоставление операций XLA с фактическими ядрами, выполняемыми в разных потоках, в соотношении N:M, а также динамическое распределение нескольких потоков по разным SM в аппаратном обеспечении.
- Один раздел для каждого компонента (например, одного пула потоков), работающего на процессоре хост-машины, с одной дорожкой на поток в случае пулов потоков. Здесь также будут отображаться трассировки Python, если они были включены при сборе профилей.
Обратите внимание, что только данные XLA Ops для TPU и потоковые данные для GPU напрямую основаны на собранном профиле; все остальные строки являются «производными строками», включающими дополнительную информацию о «боковой полосе», предоставленную компилятором, дополнительные пользовательские аннотации и/или эвристики, применяемые XProf. Следовательно, эти производные строки могут присутствовать или не присутствовать в некоторых профилях.
Другие особенности
- Вы можете искать конкретные названия событий с помощью строки поиска «Найти события...». В настоящее время поиск выполняется только в видимом временном интервале на экране, а не по всей трассировке.
- События потока: включение этой опции нажатием кнопки «События потока» на верхней панели добавляет визуализации, связывая события в одном потоке или строке с событиями в другой строке потока. Например, может быть нарисована стрелка от операции на хосте, которая ставит в очередь или запускает работу для ускорителя, к операции на ускорителе, которая выполняет эту работу. XProf определяет эти связи, комбинируя пользовательские аннотации, встроенные эвристики и постобработку информации, получаемой от различных компонентов (например, драйверов CUPTI, идентификаторов запуска ядра, информации среды выполнения TPU и т. д.).
- При нажатии на операцию XLA на панели сведений отображается дополнительная информация. Например, открывается ссылка на операцию в инструменте просмотра графиков. Также могут быть указаны ссылки на исходный код и/или трассировку стека Python, операцию фреймворка, вызвавшую генерацию этой операции XLA, и т. д. (если они есть в профиле). Также может отображаться количество операций с плавающей запятой (FLOPS) и количество байтов, к которым обратилась операция; эта информация статически извлекается из XLA во время компиляции, а не информация из профиля во время выполнения.