При выгрузке графика XLA из программы TensorFlow, нацеленной на IP Graphcore, какой из выгруженных файлов содержит график и что означают имена? - PullRequest
4 голосов
/ 29 апреля 2020

У меня есть модель TensorFlow, которая скомпилирована в XLA для использования с некоторыми IPC Graphcore. В целях отладки я пытаюсь вывести график XLA в файл .dot, чтобы визуализировать его в своем браузере.

Для этого я использую следующие флаги:


--xla_dump_to=/mnt/data/perf_prof_5/xla_dump --xla_dump_hlo_as_dot --xla_dump_hlo_pass_re=forward-allocation --xla_hlo_graph_sharding_color 

Однако я получаю несколько выходных файлов и не уверен, какой из них правильный. Их имя и номер также зависят от того, составляю я график или нет (используя инструкцию ipu.compile).

Какой файл содержит график и что означают названия?

1 Ответ

6 голосов
/ 29 апреля 2020

Дамп XLA - это встроенная функция TensorFlow. Он выводит один файл на график. Количество создаваемых графиков зависит от количества произведенных модулей TensorFlow-XLA-HLO. Как правило, это можно предсказать по количеству вызовов sess.run на отдельных графиках, которые вы делаете. Например, если ваша программа содержит переменную инициализации, эта инициализация будет скомпилирована как отдельный граф XLA и отобразится как отдельный граф при выгрузке. Если ваша программа создает отчетный отчет, он также будет скомпилирован в виде отдельного графика XLA.

Обычно ipu_compiler.compile приводит к компиляции в один граф XLA. Если вы не используете ipu_compiler.compile, встроенный планировщик XLA будет комбинировать или разбивать части графика TensorFlow так, как он считает нужным, создавая много графиков XLA - вот почему вы видите гораздо больше графиков, которые не используются, если не используется ipu_compiler.compile.

ПРИМЕЧАНИЕ : Нет никаких гарантий, что ваша скомпилированная операция выдаст только один график XLA. Иногда другие сделаны, например, для кастинга.

Что касается именования, его можно разбить следующим образом:

module_XXXX.YYYY.IPU.after_allocation-finder.before_forward-allocation.dot

У нас всегда есть префикс module_ , который просто сигнализировать, что это график для модуля HLO.

Первый XXXX - это уникальный идентификатор модуля HLO. Нет никаких гарантий относительно расстояния между идентификаторами, просто они уникальны и увеличиваются.

Чтобы понять остальную часть названия - ГГГГ.IPU ....... точка - нам нужно понять, что график XLA оперирует несколькими различными проходами HLO, каждый изменение графика XLA путем оптимизации, перетасовки или иного переписывания. После этих проходов график опускается до тополя. Есть некоторые собственные проходы TensorFlow HLO, и есть некоторые определенные IPU c. При выводе графиков XLA мы можем визуализировать график XLA до и после любого прохода HLO (например, чтобы увидеть влияние прохода на график), указав аргумент - xla_dump_hlo_pass_re=XXX, где XXX - это регулярное выражение, описывающее который проходит ты хочешь. Затем TensorFlow будет визуализировать график XLA до и после каждого прохода, соответствующего этому регулярному выражению (по его имени). Например, если вы хотите увидеть эффект каждого прохода XLA HLO IPU, включающего циклы while, вы можете использовать xla_dump_hlo_pass_re=*While*. Наконец, число ГГГГ является идентификатором, относящимся к порядку, в котором эти графы сгенерированы, и проходы, между которыми граф находился «между» при его визуализации, добавляются к имени файла. График before_optimizations всегда отображается при сбросе XLA.

К сожалению, не существует формального способа узнать, какой граф XLA является вашей основной программой, так как уникальные идентификаторы несколько произвольны, и важность содержимого каждого графа XLA является скрытым знанием пользователя. Наиболее близкое возможное приближение - это, вероятно, размеры файла или изображения - график XLA основной программы должен быть намного больше, чем другие. Грубо говоря, вы можете включить очень специфическую c опцию в свой основной график и искать его в графиках XLA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...