Memory Viewer 工具
您可以使用 Memory Viewer 直观地了解程序生命周期内的内存用量。您可以深入了解内存使用量达到峰值时内存内容的详细信息,包括调试内存不足 (OOM) 情况。Memory Viewer 可帮助您查看全局内存用量,以及计算是否即将耗尽内存。
Memory Viewer 中显示的所有信息均为纯静态信息,从 XLA 编译器获取;Memory Profile 工具中会显示动态运行时信息。
支持的平台
TPU:受支持
GPU:受支持
Memory Viewer 组件
内存查看器由多个关键组件组成:
- 用户控制下拉菜单,可让您自定义要可视化的数据:
- 内存类型:支持的内存类型取决于加速器。对于 GPU,重点是高带宽内存 (HBM);对于 TPU,您还可以查看 VMEM、SMEM、CMEM、同步标志 (SFlag)、Sparsecore 以及主机内存等芯片内存的使用情况。
- 模块:这些是执行过程中使用的 XLA 程序。一个不错的起点通常是顶级模块,标签为“jit_train_step”或“jit_generate”之类。
- 文本概览部分提供了一些概要信息,例如程序所需的峰值内存分配、参数与临时变量之间的拆分等。由于加速器对支持的张量形状的限制,因此会产生由内边距带来的开销。如果此内边距占总分配量的很大一部分,则可能表示存在优化机会。
- “内存分配大小与程序顺序”线图会按编译器的调度,绘制内存用量与程序点 (HLO 序列) 的对比图。
- 请注意,X 轴不是时间。
- 该图表会特别突出显示程序中所选模块的内存用量达到峰值的位置。性能分析器和工具不知道模块在给定芯片/内存上是否共存。编译每个模块时,编译器都会在配置文件中添加分配内存总量的“基准”起点(由之前编译的模块分配),并在发生进一步分配和取消分配时从该点向上和向下计数。不过,在执行之前编译的其他模块的任何未来分配都不会被捕获;在调试 OOM 情况时,请注意这一点。
页面底部的缓冲区图表会按程序峰值使用点(由内存用量线图中的垂直线表示)对内存用量进行细分。图表有三个,它们都显示了程序分配的全部缓冲区,但排序方式不同:
- 按程序顺序:即它们在程序执行期间启动的顺序,最早的显示在左侧。
- 按大小:对峰值内存用量点影响最大的位于左侧。
从硬件角度来看,左侧的“效率”最低。
请注意,缓冲区的颜色没有特定含义。
将鼠标悬停在三个图表中的任意一个缓冲区上,系统会显示另外两个显示屏:
- 内存用量折线图上的叠加层,颜色与缓冲区卡片一致,表示该缓冲区的生命周期;即,一个水平条,其左侧和右侧边缘表示程序顺序中的分配点和取消分配点。水平条的高度表示所选缓冲区相对于峰值分配的相对大小。
- 单独的缓冲区详细信息卡片(通常位于左侧),其中包含特定操作的详细信息(如适用)。典型的卡片包含以下信息:
- 名称:XLA 操作名称,您可以在 Graph Viewer 或 Trace Viewer 中进行搜索。
- 大小:有填充和无填充的缓冲区分配的大小。
- 形状:描述 N 维数组的阶、大小和数据类型。
- 框架操作名称:显示与此分配关联的框架操作名称。
- 分配类型:将缓冲区分配分为以下类型:参数、输出、线程局部和临时(例如某个融合中的缓冲区分配)。