ExecuTorch 中的内存规划检查¶
在 ExecuTorch 的内存规划通道之后,内存分配信息将存储在ExportedProgram
的节点上。在这里,我们提供了一个旨在检查内存分配和可视化所有活动张量对象的工具。
用法¶
用户应该在调用 to_executorch() 后添加此代码,它会将存储在节点上的内存分配信息写入文件路径“memory_profile.json”。该文件与 Chrome 跟踪查看器兼容;有关解释结果的更多信息,请参阅下文。
from executorch.util.activation_memory_profiler import generate_memory_trace
generate_memory_trace(
executorch_program_manager=prog,
chrome_trace_filename="memory_profile.json",
enable_memory_offsets=True,
)
prog
是ExecuTorchProgramManager
的一个实例,由 to_executorch() 返回。将
enable_memory_offsets
设置为True
以显示内存空间中每个张量的位置。
Chrome 跟踪¶
打开一个 Chrome 浏览器标签页并导航至 chrome://tracing/。上传生成的 .json
文件以进行查看。例如,MobileNet V2 模型。
请注意,由于我们正在重新利用 Chrome 跟踪工具,因此在此上下文中,坐标轴的含义可能与您之前遇到过的其他 Chrome 跟踪图有所不同。
水平轴虽然标记为秒 (s),但实际上代表兆字节 (MB)。
垂直轴具有 2 级层次结构。第一级“pid”代表内存空间。对于 CPU,所有内容都分配在一个“空间”中;其他后端可能有多个。在第二级,每一行代表一个时间步。由于节点将按顺序执行,因此每个节点代表一个时间步,因此您将有与行数相同的节点数。