目录

检查器 API

概述

Inspector API 为分析 ETRecordETDump 的内容,帮助开发者了解模型 架构和性能统计数据。它构建在 EventBlock 类数据结构 它组织了一组 Events,以便轻松访问分析事件的详细信息。

用户可以通过多种方式与 Inspector 交互 蜜蜂属:

  • 通过使用类提供的公共方法Inspector

  • 通过访问 、 和 类的 public 属性InspectorEventBlockEvent

  • 通过使用 CLI 工具实现基本功能。

请参阅 e2e 用例文档,了解如何在实际示例中使用这些内容。

Inspector 方法

构造 函数

SDK 的 SDK 中。检查员。__init__selfetdump_path=etrecord_path=source_time_scale=TimeScale.NStarget_time_scale=TimeScale.MS)

使用基础 EventBlock初始化 Inspector 实例,其中填充了来自提供的 ETDump 路径的数据 和可选的 ETRecord 路径。

参数
  • etdump_path – ETDump 文件的路径。

  • etrecord_path – ETRecord 文件的可选路径。

  • source_time_scale – 从运行时检索的性能数据的时间刻度。运行时中的默认时间钩子实现返回 NS。

  • target_time_scale – 用户希望将其性能数据转换为的目标时间刻度。默认为 MS。

返回

没有

示例用法:

from executorch.sdk import Inspector

inspector = Inspector(etdump_path="/path/to/etdump.etdp", etrecord_path="/path/to/etrecord.bin")

find_total_for_module

SDK 的 SDK 中。检查员。find_total_for_moduleselfmodule_name)

返回指定模块中所有运算符的总平均计算时间。

参数

module_name – 要聚合的模块的名称。

返回

模块中所有运算符的平均计算时间(以秒为单位)的总和,其中 “module_name”。

示例用法:

print(inspector.find_total_for_module("L__self___conv_layer"))
0.002

get_exported_program

SDK 的 SDK 中。检查员。get_exported_programselfgraph=无))

ETRecord 的访问帮助程序默认返回 Edge Dialect 程序。

参数

graph – 要访问的图形的可选名称。如果为 None,则返回 Edge Dialect 程序。

返回

“graph” 的 ExportedProgram 对象。

示例用法:

print(inspector.get_exported_program())
ExportedProgram:
    class GraphModule(torch.nn.Module):
        def forward(self, arg0_1: f32[4, 3, 64, 64]):
            # No stacktrace found for following nodes
            _param_constant0 = self._param_constant0
            _param_constant1 = self._param_constant1

            ### ... Omit part of the program for documentation readability ... ###

Graph signature: ExportGraphSignature(parameters=[], buffers=[], user_inputs=['arg0_1'], user_outputs=['aten_tan_default'], inputs_to_parameters={}, inputs_to_buffers={}, buffers_to_mutate={}, backward_signature=None, assertion_dep_token=None)
Range constraints: {}
Equality constraints: []

Inspector 属性

EventBlock

通过属性 实例中,例如:EventBlockevent_blocksInspector

inspector.event_blocks
sdk.inspector.inspector 中。EventBlocknameevents=<factory>source_time_scale=TimeScale.NStarget_time_scale=TimeScale.MS[来源]

EventBlock 包含与从运行时检索的特定性能分析/调试块关联的事件集合。 每个 EventBlock 表示一种执行模式。例如,模型启动和加载位于单个 EventBlock 中。 如果存在控制流,则每个分支将由单独的 EventBlock 表示。

参数
  • name – 性能分析/调试块的名称。

  • events – 与性能分析/调试块关联的 Event列表。

Event

通过 instance 的属性访问实例。EventeventsEventBlock

sdk.inspector.inspector 中。Eventnameperf_dataop_types=<factory>delegate_debug_identifier=无debug_handles=无stack_traces=<factory>module_hierarchy=<factory>is_delegated_op=无delegate_backend_name=无debug_data=<factory>_instruction_id=无[来源]

Event 对应于一个运算符实例,其中包含从运行时检索的 perf 数据以及 ETRecord 中的其他元数据。

参数
  • name – 性能分析/调试事件的名称。

  • perf_data – 与从运行时检索的事件关联的性能数据(可用属性:p50、p90、avg、min 和 max)。

  • op_type – 与事件对应的操作类型列表。

  • delegate_debug_identifier – 与指令 ID 结合使用的补充标识符。

  • debug_handles – 与此事件相关的模型图中的 Debug 句柄。

  • stack_trace – 一个字典,用于将每个关联操作的名称映射到其堆栈跟踪。

  • module_hierarchy – 将每个关联运算的名称映射到其模块层次结构的字典。

  • is_delegated_op – 事件是否已委派。

  • delegate_backend_name – 此事件委托到的后端的名称。

  • debug_data – 在运行时收集的中间数据。

示例用法:

for event_block in inspector.event_blocks:
    for event in event_block.events:
        if event.name == "Method::execute":
            print(event.perf_data.raw)
[175.748, 78.678, 70.429, 122.006, 97.495, 67.603, 70.2, 90.139, 66.344, 64.575, 134.135, 93.85, 74.593, 83.929, 75.859, 73.909, 66.461, 72.102, 84.142, 77.774, 70.038, 80.246, 59.134, 68.496, 67.496, 100.491, 81.162, 74.53, 70.709, 77.112, 59.775, 79.674, 67.54, 79.52, 66.753, 70.425, 71.703, 81.373, 72.306, 72.404, 94.497, 77.588, 79.835, 68.597, 71.237, 88.528, 71.884, 74.047, 81.513, 76.116]

命令行界面

在终端中执行以下命令以显示数据 桌子。此命令生成的 table 输出与调用前面提到的 print_data_tabular 相同:

python3 -m sdk.inspector.inspector_cli --etdump_path <path_to_etdump> --etrecord_path <path_to_etrecord>

请注意,etrecord_path 参数是可选的。

我们计划在将来扩展 CLI 的功能。

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源