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,所有内容都分配在一个“空间”上;其他后端可能有多个。在第二层中,每一行表示一个时间步长。由于节点将按顺序执行,因此每个节点表示一个时间步长,因此您将拥有与行数一样多的节点。