Инструмент просмотра памяти
С помощью Memory Viewer можно визуализировать использование памяти в течение всего жизненного цикла программы. Вы можете детально изучить содержимое памяти в момент пикового использования, в том числе для отладки ситуаций нехватки памяти (OOM). Memory Viewer поможет вам увидеть глобальное использование памяти и степень близости вычислений к исчерпанию памяти.
Вся информация, отображаемая в Memory Viewer, является чисто статической и получена от компилятора XLA; динамическая информация времени выполнения представлена в инструменте Memory Profile.
Поддерживаемые платформы
ТПУ: поддерживается
Графический процессор: поддерживается
Компоненты средства просмотра памяти
Memory Viewer состоит из нескольких ключевых компонентов:
- Раскрывающиеся списки управления пользователем, позволяющие настраивать визуализируемые данные:
- Типы памяти: поддерживаемые типы памяти зависят от ускорителя. Для графических процессоров основное внимание уделяется памяти с высокой пропускной способностью (HBM) и памяти хоста. Для TPU также можно просматривать использование встроенной памяти, включая VMEM, SMEM, CMEM, Sync Flags (SFlag) и Sparsecore, а также памяти хоста.
- Модули: это программы XLA, которые участвовали в выполнении. Хорошей отправной точкой часто служит модуль верхнего уровня, называемый, например, «jit_train_step» или «jit_generate».
- В текстовом разделе обзора представлена общая информация, такая как пиковый объём памяти, необходимый для программы, разделение между аргументами и временными переменными и т. д. Существуют накладные расходы, связанные с заполнением памяти, обусловленные ограничениями на поддерживаемые формы тензоров в ускорителях. Если это заполнение составляет значительную долю от общего объёма памяти, это может указывать на возможность оптимизации.
- Линейная диаграмма «Размер выделения памяти в зависимости от порядка программы» отображает использование памяти в зависимости от точек программы (последовательность HLO), запланированных компилятором.
- Обратите внимание, что ось X не отображает время.
- На диаграмме специально выделена точка в программе с пиковым использованием памяти выбранным модулем . Профилировщик и инструменты не учитывают совместное размещение модулей на данном чипе/в памяти. При компиляции каждого модуля компилятор аннотирует профиль, указывая «базовую» начальную точку общего выделенного объёма памяти (модулями, скомпилированными до этого), и отсчитывает от неё по мере последующих выделений и освобождений памяти. Однако любые будущие выделения памяти другими модулями, скомпилированными до выполнения, не учитываются; имейте это в виду при отладке ситуаций с OOM.
Диаграммы использования буферов в нижней части страницы показывают использование памяти в момент пикового использования программы (обозначенного вертикальной линией на линейном графике использования памяти). Имеется три диаграммы, каждая из которых показывает весь набор буферов, выделенных программой, но отсортированных тремя различными способами:
- По порядку выполнения программы: в том порядке, в котором они были запущены во время выполнения программы, причем самые старые появляются слева.
- По размеру: те, которые оказывают наибольшее влияние на пиковую точку использования памяти, находятся слева.
Судя по накладным расходам, которые они взимают: самые «неэффективные» с точки зрения аппаратного обеспечения элементы отображаются слева.
Обратите внимание, что цвета буферов не имеют особого значения.
Нажатие на ссылку «Временная шкала» рядом с заголовком диаграммы открывает визуализацию распределения памяти с серией цветных блоков, по одному на каждое распределение. При наведении курсора на блок отображается дополнительная информация о распределении, например, операция HLO, создавшая распределение, форма распределения и т. д. Визуализацию можно интерпретировать следующим образом:
- Ось X — порядок программы.
- Высота каждого блока на оси Y соответствует размеру распределения.
- Ширина каждого блока — это время жизни выделения с точки зрения порядка программы.
При наведении курсора на буфер в любой из трех диаграмм появляются два дополнительных дисплея:
- Наложение на линейный график использования памяти, цвет которого соответствует цвету карты буфера, отображающее время жизни этого буфера; то есть горизонтальная полоса, левый и правый края которой указывают точки выделения и освобождения памяти в порядке выполнения программы. Высота горизонтальной полосы отображает относительный размер выбранного буфера по сравнению с пиковым выделением.
- Отдельная карточка с данными о буфере, обычно с левой стороны, с подробностями о конкретной операции (при необходимости). Типичная карточка включает в себя следующую информацию:
- Имя: Имя операции XLA, которое можно найти в средстве просмотра графиков или средстве просмотра трассировок.
- Размер: размер выделенного буфера с заполнением и без него.
- Форма: описывает ранг, размер и тип данных N-мерного массива.
- Имя операции фреймворка: показывает имя операции фреймворка, связанной с этим распределением.
- Тип выделения: классифицирует выделение буферов по следующим типам: параметр, вывод, локальный поток и временный (например, выделение буфера внутри слияния).
- Источник: показывает расположение исходного кода (файл и номер строки) для операции, создавшей буфер.
- Исходный стек: отображает полный стек вызовов для операции, предоставляя контекст выполнения, который привел к выделению буфера.