Nie*_*els 4 python-3.x tensorflow ipu
我有一个 TensorFlow 模型,它被编译为 XLA 以与一些 Graphcore IPU 一起使用。出于调试目的,我试图将 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
Run Code Online (Sandbox Code Playgroud)
但是,我得到了多个输出文件,但不确定哪一个是正确的。它们的名称和编号也根据我是否编译图形(使用ipu.compile指令)而有所不同。
哪个文件包含图形以及名称的含义是什么?
小智 7
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 模块的唯一 ID。不能保证 ID 之间的间距,只是它们是唯一的并且不断增加。
要了解名称的其余部分 - YYYY.IPU.......dot - 我们需要了解 XLA 图由多个不同的 HLO 传递操作,每个传递都通过优化、改组或以其他方式重写它来修改 XLA 图. 在这些通过之后,图形然后被降低到杨树。有一些 TensorFlow 原生 HLO 通道,还有一些 IPU 特定通道。当转储 XLA 图时,我们可以通过提供参数 -- xla_dump_hlo_pass_re=XXX,在任何 HLO 传递之前和之后渲染 XLA 图(例如,查看传递对图的影响),其中XXX正则表达式描述了您想要的通行证。然后,TensorFlow 将在每次匹配该正则表达式(按其名称)之前和之后渲染 XLA 图。例如,如果您想查看涉及 while 循环的每个 XLA HLO IPU 传递的效果,您可以使用xla_dump_hlo_pass_re=*While*. 最后,数字YYYY是与生成这些图形的顺序有关的 ID,并且图形在呈现时处于“之间”的过程附加到文件名。如果转储 XLA,则始终呈现“before_optimizations”图。
不幸的是,没有正式的方法可以知道哪个 XLA 图是您的主程序,因为唯一 id 有点随意,每个 XLA 图的内容的重要性是用户的默认知识。最接近的可能是文件或视觉尺寸 - 主程序 XLA 图形应该比其他图形大得多。作为一种粗略的方式,您可以在主图中包含一个非常具体的操作,并在 XLA 图中搜索它。
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |