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

С помощью Memory Viewer можно визуализировать использование памяти в течение всего жизненного цикла программы. Вы можете детально изучить содержимое памяти в момент пикового использования, в том числе для отладки ситуаций нехватки памяти (OOM). Memory Viewer поможет вам увидеть глобальное использование памяти и степень близости вычислений к исчерпанию памяти.

Вся информация, отображаемая в Memory Viewer, является чисто статической и получена от компилятора XLA; динамическая информация времени выполнения представлена ​​в инструменте Memory Profile.

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

ТПУ: поддерживается

Графический процессор: поддерживается

Компоненты средства просмотра памяти

Memory Viewer состоит из нескольких ключевых компонентов:

  1. Раскрывающиеся списки управления пользователем, позволяющие настраивать визуализируемые данные:
    • Типы памяти: поддерживаемые типы памяти зависят от ускорителя. Для графических процессоров основное внимание уделяется памяти с высокой пропускной способностью (HBM) и памяти хоста. Для TPU также можно просматривать использование встроенной памяти, включая VMEM, SMEM, CMEM, Sync Flags (SFlag) и Sparsecore, а также памяти хоста.
    • Модули: это программы XLA, которые участвовали в выполнении. Хорошей отправной точкой часто служит модуль верхнего уровня, называемый, например, «jit_train_step» или «jit_generate».
  2. В текстовом разделе обзора представлена ​​общая информация, такая как пиковый объём памяти, необходимый для программы, разделение между аргументами и временными переменными и т. д. Существуют накладные расходы, связанные с заполнением памяти, обусловленные ограничениями на поддерживаемые формы тензоров в ускорителях. Если это заполнение составляет значительную долю от общего объёма памяти, это может указывать на возможность оптимизации.
  3. Линейная диаграмма «Размер выделения памяти в зависимости от порядка программы» отображает использование памяти в зависимости от точек программы (последовательность HLO), запланированных компилятором.
    • Обратите внимание, что ось X не отображает время.
    • На диаграмме специально выделена точка в программе с пиковым использованием памяти выбранным модулем . Профилировщик и инструменты не учитывают совместное размещение модулей на данном чипе/в памяти. При компиляции каждого модуля компилятор аннотирует профиль, указывая «базовую» начальную точку общего выделенного объёма памяти (модулями, скомпилированными до этого), и отсчитывает от неё по мере последующих выделений и освобождений памяти. Однако любые будущие выделения памяти другими модулями, скомпилированными до выполнения, не учитываются; имейте это в виду при отладке ситуаций с OOM.
  4. Диаграммы использования буферов в нижней части страницы показывают использование памяти в момент пикового использования программы (обозначенного вертикальной линией на линейном графике использования памяти). Имеется три диаграммы, каждая из которых показывает весь набор буферов, выделенных программой, но отсортированных тремя различными способами:

    • По порядку выполнения программы: в том порядке, в котором они были запущены во время выполнения программы, причем самые старые появляются слева.
    • По размеру: те, которые оказывают наибольшее влияние на пиковую точку использования памяти, находятся слева.
    • Судя по накладным расходам, которые они взимают: самые «неэффективные» с точки зрения аппаратного обеспечения элементы отображаются слева.

      Обратите внимание, что цвета буферов не имеют особого значения.

  5. Нажатие на ссылку «Временная шкала» рядом с заголовком диаграммы открывает визуализацию распределения памяти с серией цветных блоков, по одному на каждое распределение. При наведении курсора на блок отображается дополнительная информация о распределении, например, операция HLO, создавшая распределение, форма распределения и т. д. Визуализацию можно интерпретировать следующим образом:

    • Ось X — порядок программы.
    • Высота каждого блока на оси Y соответствует размеру распределения.
    • Ширина каждого блока — это время жизни выделения с точки зрения порядка программы.
  6. При наведении курсора на буфер в любой из трех диаграмм появляются два дополнительных дисплея:

    • Наложение на линейный график использования памяти, цвет которого соответствует цвету карты буфера, отображающее время жизни этого буфера; то есть горизонтальная полоса, левый и правый края которой указывают точки выделения и освобождения памяти в порядке выполнения программы. Высота горизонтальной полосы отображает относительный размер выбранного буфера по сравнению с пиковым выделением.
    • Отдельная карточка с данными о буфере, обычно с левой стороны, с подробностями о конкретной операции (при необходимости). Типичная карточка включает в себя следующую информацию:
      • Имя: Имя операции XLA, которое можно найти в средстве просмотра графиков или средстве просмотра трассировок.
      • Размер: размер выделенного буфера с заполнением и без него.
      • Форма: описывает ранг, размер и тип данных N-мерного массива.
      • Имя операции фреймворка: показывает имя операции фреймворка, связанной с этим распределением.
      • Тип выделения: классифицирует выделение буферов по следующим типам: параметр, вывод, локальный поток и временный (например, выделение буфера внутри слияния).
      • Источник: показывает расположение исходного кода (файл и номер строки) для операции, создавшей буфер.
      • Исходный стек: отображает полный стек вызовов для операции, предоставляя контекст выполнения, который привел к выделению буфера.