跳到主要内容
版本:0.13.0

调试器

TVM 调试器是一个用于调试 TVM 计算图执行过程的接口。它有助于访问 TVM runtime 的计算图结构和张量值。

调试交换格式

1. 计算图

由 Relay 以 JSON 序列化格式构建的优化图按原样转储。包含有关计算图的全部信息。UX 可以直接使用此图,也可以将此图转换为 UX 可以理解的格式。

Graph JSON 格式解释如下

  1. nodes 节点是占位符,或是 json 中的计算节点。节点存储为列表。一个节点包含以下信息:
    • op - 操作类型,null 表示它是一个占位符/变量/输入节点,tvm_op 表示该节点可以执行
    • name - 节点名称
    • inputs - 算子的输入位置,Inputs 是一个(nodeid、index、version)元组列表。(可选)
    • attrs - 包含以下信息的节点属性
      • flatten_data - 执行前是否需要对数据进行展开
      • func_name - 融合函数名,对应 Relay 编译过程生成的 lib 的符号。
      • num_inputs - 节点的输入数量
      • num_outputs - 节点产生的输出数量
  2. arg_nodes:arg_nodes 是节点的索引列表,它是计算图的占位符/变量/输入或常量/参数。
  3. heads:heads 是计算图输出的条目列表。
  4. node_row_ptr:node_row_ptr 存储前向传播路径的历史记录,因此可以在推理任务中跳过构建整个计算图。
  5. attrs:attrs 包含版本号或类似的有用信息。
    • storage_id - 存储布局中每个节点的内存插槽 id。
    • dtype - 每个节点的数据类型(枚举值)。
    • dltype - 按顺序排列的每个节点的数据类型。
    • shape - 每个节点的 shape 为 k 阶。
    • device_index - 计算图中每个条目的设备分配。

转储图示例:

{
"nodes": [ # 节点列表
{
"op": "null", # operation type