Инструмент просмотра трассировки

С помощью Trace Viewer можно визуализировать временную шкалу событий, произошедших во время сеанса профилирования. Он отображает продолжительность операций, выполняемых вашей моделью на разных частях системы, таких как хост (ЦП) и ускорители (GPU или TPU). Это позволяет понять, как ваша модель использует аппаратные ресурсы, выявить узкие места в производительности и оптимизировать модель для более быстрого выполнения.

Программа просмотра трассировки

Поддерживаемые платформы

Поддерживаются как TPU, так и GPU.

Программа Trace Viewer для графических процессоров группирует события на временных шкалах по каждому чипу графического процессора и потокам внутри него, а для TPU она организует события на временных шкалах по каждому чипу и ядру TPU. В любом случае, Trace Viewer также отображает события на временных шкалах по каждому потоку для хост-процессора, к которому подключены ускорители.

Программа для просмотра трассировки графических процессоров

Взаимодействие с временной шкалой

Программа Trace Viewer предоставляет несколько инструментов и методов для навигации и анализа временной шкалы:

  • Навигация: После щелчка по событию на временной шкале вы можете использовать следующие сочетания клавиш:
    • W: Увеличьте масштаб.
    • S: Отдаление.
    • А: Поверните влево.
    • D: Поверните вправо.
  • Панель выбора инструментов: Плавающая панель выбора инструментов содержит инструменты, которые можно использовать, щелкая по соответствующим значкам или используя соответствующие сочетания клавиш:
    • Инструмент выделения (1 или !): Щелкните событие, чтобы выделить его и просмотреть подробную информацию в панели «Подробности». Выберите несколько событий, нажав Ctrl+клик, чтобы просмотреть сводку.
    • Инструмент «Панорамирование» (2 или @): перетаскивайте для перемещения временной шкалы по горизонтали или вертикали.
    • Инструмент масштабирования (3 или #): перетащите для увеличения масштаба определенной области временной шкалы.
    • Инструмент «Время» (4 или $): Перетащите курсор, чтобы отметить временной интервал. Будет отображена продолжительность отмеченного интервала. Вы также можете использовать клавишу «m», чтобы отметить область и определить ее общую продолжительность.
  • Приближение к выбранным событиям (f): Выберите одно или несколько событий и нажмите клавишу «f», чтобы быстро приблизить этот участок временной шкалы. Это полезно для фокусировки на конкретном этапе обучения.

Инструмент выбора средства просмотра трассировки

При обработке большого количества событий трассировки Trace Viewer работает в потоковом режиме. Это означает, что данные загружаются по запросу по мере перемещения и масштабирования временной шкалы, аналогично тому, как работают картографические приложения. Если вы масштабируете изображение быстрее, чем данные успевают загружаться, вы можете видеть низкокачественное представление данных до завершения загрузки.

Компоненты интерфейса просмотра трассировки

Вот основные компоненты пользовательского интерфейса в Trace Viewer:

  • В верхней части графика горизонтально расположена временная ось, показывающая время относительно начала графика.
  • Временные шкалы организованы по разделам и дорожкам, с метками, расположенными на левой вертикальной оси. Каждый раздел представляет собой элемент обработки (например, узел устройства или потоки хоста) и может быть развернут или свернут. Внутри каждого раздела находятся дорожки, которые представляют собой временные шкалы для конкретных действий.
  • События представляют собой цветные прямоугольные блоки на временной шкале, отображающие продолжительность операции или метасобытия, например, этапа обучения. Цвет событий не имеет конкретного значения.
  • Панель с подробной информацией, которая появляется внизу временной шкалы при выборе одного или нескольких событий, отображает дополнительную информацию о выбранных событиях, такую ​​как их имя, время начала и продолжительность. При выборе операции XLA можно увидеть ссылки на операцию в инструменте Graph Viewer и другую информацию, которая может быть предоставлена ​​фреймворком и компилятором, включая указатели на исходный код и/или трассировку стека Python, операцию фреймворка, которая вызвала генерацию этой операции XLA и т. д. Также может отображаться количество операций с плавающей запятой (FLOPS), выполненных операцией, и количество байтов, к которым обращалась операция. Эта информация статически получается из XLA во время компиляции, а не из информации, полученной во время выполнения из профилирования.

    Панель сведений о средстве просмотра трассировки

Trace Viewer v2

Для очень больших файлов (сотни МБ или ГБ) можно использовать Trace Viewer v2 для более плавной навигации по миллионам событий. Он использует WebGPU/Canvas для высокопроизводительного рендеринга.

Чтобы переключиться на Trace Viewer v2, нажмите кнопку «Переключиться на V2» в пользовательском интерфейсе Trace Viewer. В настоящее время это единственный способ переключиться на интерфейс v2.

Типичные участки и пути

Программа Trace Viewer предоставляет следующие разделы и дорожки.

  • Для каждого узла TPU предусмотрен отдельный раздел со следующими дорожками:
    • Шаги : Отображает продолжительность этапов обучения, выполняемых на данном ядре TPU, если это соответствующим образом указано в пользовательской программе или фреймворке.
    • Модули XLA : выполняемая программа XLA.
    • XLA Ops : Отображает операции XLA HLO, выполненные на ядре TPU. Каждая операция высокоуровневого фреймворка (например, JAX, Tensorflow или PyTorch) преобразуется в одну или несколько операций XLA, которые затем компилируются для выполнения на TPU.
    • XLA TraceMe : Заданные пользователем аннотации в коде, описывающие логические единицы работы, которые он намерен отслеживать. Вы можете видеть данные здесь, даже если не добавляли никаких аннотаций; обычно они добавляются XLA (например, ядра барьеров) или самим XProf (например, удаленные записи трассировки).
    • Область видимости имени фреймворка : Для каждой операции фреймворка отображается визуализация трассировки стека. Для краткости эта трассировка отображается только для одного устройства.
    • Framework Ops : Отображает операции фреймворка (например, JAX, Tensorflow или PyTorch), выполняемые на ядре TPU, если они соответствующим образом аннотированы в пользовательской программе или фреймворке.
    • Область видимости имени фреймворка : Для каждой операции фреймворка отображается визуализация трассировки стека. Для краткости эта трассировка отображается только для одного устройства.
    • Исходный код : Путь к выполняемому исходному коду, если он указан в профиле.
    • Скалярный блок : Для TPU — события, выполняемые в скалярном блоке, отображаются, если они присутствуют в профиле.
    • Флаги синхронизации TensorCore : механизм синхронизации на TPU, отображается, если присутствует в профиле.
    • Операции Host Offload : операции, которые асинхронно перемещают данные между памятью хоста и памятью ускорителя. Обычно в строке XLA Ops отображаются соответствующие операции запуска и остановки, указывающие на подготовку ускорителя к передаче данных (например, пометка областей памяти источника/назначения как «используемых» на время передачи). Может присутствовать несколько строк Host Offload, если параллельно выполняется несколько операций Offload, что требует одновременного отображения нескольких событий в средстве просмотра трассировки.
    • Использование LLO : Отображает использование аппаратных ресурсов для пользовательских вызовов XLA , если соответствующие флаги XLA включены.
  • Для каждого узла Sparsecore предусмотрен отдельный раздел: некоторые поколения TPU (например, TPU v5p и Trillium ) оснащены одним или несколькими блоками SparseCore в дополнение к блокам MXU для плотных вычислений; модули, операции и TraceMe, связанные с этими ядрами, будут отображаться в этом разделе.
  • Для каждого узла GPU предусмотрен отдельный раздел со следующими дорожками:
    • Для каждого потока требуется отдельная дорожка, при этом название потока должно также содержать информацию о типах операций, выполняемых над потоком (Memcpy, Compute и т. д.).
    • Статистика запуска : показывает максимальное и среднее время, затраченное на фазу запуска.
    • Шаги , модули XLA , операции фреймворка , область видимости имени фреймворка , исходный код : все это аналогично разделам TPU.
    • Технология XLA TraceMe не поддерживается для графических процессоров.
    • Операции XLA действительно отображаются в секциях GPU, но в настоящее время они не всегда точны, поскольку получены из потоковых данных. Следовательно, они не могут в полной мере учитывать модель выполнения GPU, где может существовать отображение операций XLA в соотношении N:M на фактические ядра, выполняемые в разных потоках, а также динамическое планирование нескольких потоков на разные SM в аппаратном обеспечении.
  • Для каждого компонента (например, пула потоков), работающего на процессоре хост-машины, предусмотрен отдельный раздел с одной дорожкой на каждый поток в случае пулов потоков. Здесь же вы увидите трассировку Python, если она была включена во время сбора профилированных данных.

Обратите внимание, что только операции XLA для TPU и потоковые данные для GPU напрямую основаны на собранном профиле; все остальные строки являются «производными строками», включающими необязательную информацию о «боковых полосах», предоставляемую компилятором, необязательные пользовательские аннотации и/или эвристические алгоритмы, применяемые XProf. Поэтому эти производные строки могут появляться или не появляться в некоторых профилях.

Другие функции

  • Вы можете искать конкретные названия событий, используя строку поиска «Найти события...». В настоящее время поиск осуществляется только в пределах видимого на экране временного окна, а не по всей трассировке.

    Панель поиска событий в окне просмотра трассировки

  • События потока : Включение этой опции путем нажатия кнопки «События потока» на верхней панели добавляет визуализации, связывающие события в одном потоке или строке с событиями в другой строке потока. Например, может быть нарисована стрелка от операции на хосте, которая ставит в очередь или запускает работу для ускорителя, к операции на ускорителе, которая выполняет эту работу. XProf определяет эти связи с помощью комбинации пользовательских аннотаций, встроенных эвристических алгоритмов и постобработки информации, получаемой от различных компонентов (например, драйверов CUPTI, идентификаторов запуска ядра, информации о среде выполнения TPU и т. д.).

    кнопка «Просмотр трассировки событий потока»