tvm.runtime.profiling

在 Python 中注册性能分析对象。

class tvm.runtime.profiling.Report(calls: Sequence[Dict[str, Object]], device_metrics: Dict[str, Dict[str, Object]], configuration: Dict[str, Object])

用于存储性能分析运行期间收集的信息的容器。

calls

每次调用的性能分析指标(函数名、运行时、设备、...)。

类型:

Array[Dict[str, Object]]

device_metrics

在整个运行过程中收集的每个设备的指标。

类型:

Dict[Device, Dict[str, Object]]

csv()

将此性能分析报告转换为 CSV 格式。

这仅包括调用,不包括总体指标。

返回值:

csv – CSV 格式的 calls

返回类型:

str

table(sort=True, aggregate=True, col_sums=True)

生成人类可读的表格

参数:
  • sort (bool) – 如果 aggregate 为 true,是否按持续时间降序对调用帧进行排序。如果 aggregate 为 False,是否按调用帧在程序中出现的顺序进行排序。

  • aggregate (bool) – 是否将对同一操作的多次调用合并为一行。

  • col_sums (bool) – 是否包含每列的总和。

返回值:

table – 人类可读的表格

返回类型:

str

json()

将此性能分析报告转换为 JSON 格式。

示例输出

返回值:

json – 格式化的 JSON

返回类型:

str

classmethod from_json(s)

从 JSON 反序列化报告。

参数:

s (str) – 通过 json() 序列化的报告。

返回值:

report – 反序列化的报告。

返回类型:

报告

class tvm.runtime.profiling.Count(count: int)

某事物的整数计数

class tvm.runtime.profiling.Duration(duration: float)

某事物的持续时间

class tvm.runtime.profiling.Percent(percent: float)

某事物的百分比

class tvm.runtime.profiling.Ratio(ratio: float)

两件事物的比率

class tvm.runtime.profiling.MetricCollector

用户定义的性能分析指标收集的接口。

class tvm.runtime.profiling.DeviceWrapper(dev: Device)

封装 tvm.runtime.Device

tvm.runtime.profiling.profile_function(mod, dev, collectors, func_name=None, warmup_iters=10)

收集函数执行的性能信息。通常与编译后的 PrimFunc 一起使用。

此信息可以包括性能计数器,如缓存命中率和 FLOP,这些计数器在调试单个 PrimFunc 的性能问题时很有用。可以根据使用的 MetricCollector 收集不同的指标。

示例

参数:
  • mod (Module) – 包含要分析的函数的模块。

  • dev (Device) – 运行函数的设备。

  • collectors (List[MetricCollector]) – MetricCollector,它将收集性能信息。

  • func_name (Optional[str]) – 要分析的 mod 中的函数名称。默认为 modentry_name

  • warmup_iters (int) – 在收集性能信息之前运行函数的迭代次数。建议将其设置为大于 0,以获得一致的缓存效果。默认为 10。

返回值:

prof – PackedFunc,它接受与 mod[func_name] 相同的参数,并以 Dict[str, ObjectRef] 的形式返回性能指标,其中值可以是 CountNodeDurationNodePercentNode

返回类型:

PackedFunc[args, Dict[str, ObjectRef]]