昇腾社区首页
中文
注册
开发者
下载

DUMP_GRAPH_FORMAT

功能描述

控制需要生成的dump文件类型。

支持的取值包括:

  • onnx:基于ONNX的模型描述结构,可以使用Netron等可视化软件打开,生成文件名为ge_onnx*.pbtxt。
  • ge_proto:protobuf格式存储的文本文件,生成文件名为ge_proto*.txt。
  • readable:类似Dynamo fx图风格的高可读性文本文件,生成文件名为ge_readable*.txt。文件内容解析请参见readable文件解析

使用方式:

配置按照“|”分隔的字符串,类型全部为小写,支持组合配置,例如“ge_proto|onnx|readable”,表示dump全量类型的文件;也支持单独配置,例如“ge_proto”,表示只dump ge_proto类型的文件ge_proto*.txt。

DUMP_GRAPH_FORMAT环境变量只有在DUMP_GE_GRAPH开启时才生效,默认为“ge_proto|onnx”。

配置示例

export DUMP_GRAPH_FORMAT="ge_proto|onnx"

使用约束

  • 如果此环境变量设置了其他非法值,可能会导致未定义的行为发生。
  • 如果开启了采集算子dump数据功能,可以参考图模式开发指南>ge.exec.enableDump参数,

    即使DUMP_GRAPH_FORMAT环境变量取值不包括“ge_proto”,最终都会dump子图ge_proto_xxxx_Build.txt。

readable文件解析

如下为一个完整的ge_readable*.txt文件:

graph("MakeTransformerSubGraph"):
  %input_0 : [#users=1] = Node[type=Data] (attrs = {index: 0})
  %input_1 : [#users=1] = Node[type=Data] (attrs = {index: 1})
  %input_2 : [#users=1] = Node[type=Data] (attrs = {index: 2})
  %Const_0 : [#users=1] = Node[type=Const] (attrs = {value: [-1 7168]})
  %Reshape_1 : [#users=1] = Node[type=Reshape] (inputs = (%input_0, %Const_0), attrs = {axis: 0, num_axes: -1})
  %Cast_2 : [#users=1] = Node[type=Cast] (inputs = (%Reshape_1), attrs = {dst_type: 0})
  %Cast_3 : [#users=1] = Node[type=Cast] (inputs = (%input_1), attrs = {dst_type: 0})
  %Const_4 : [#users=1] = Node[type=Const] (attrs = {value: [1 0]})
  %Transpose_5 : [#users=1] = Node[type=Transpose] (inputs = (%Cast_3, %Const_4))
  %MatMul_6 : [#users=1] = Node[type=MatMul] (inputs = (%Cast_2, %Transpose_5), attrs = {transpose_x1: false, transpose_x2: false})
  %Sigmoid_7 : [#users=1] = Node[type=Sigmoid] (inputs = (%MatMul_6))
  %Const_8 : [#users=1] = Node[type=Const] (attrs = {value: [-1 256]})
  %Reshape_9 : [#users=1] = Node[type=Reshape] (inputs = (%Sigmoid_7, %Const_8), attrs = {axis: 0, num_axes: -1})
  %Unsqueeze_10 : [#users=1] = Node[type=Unsqueeze] (inputs = (%input_2), attrs = {axes: {0}})
  %Cast_11 : [#users=1] = Node[type=Cast] (inputs = (%Unsqueeze_10), attrs = {dst_type: 0})
  %Add_12 : [#users=1] = Node[type=Add] (inputs = (%Reshape_9, %Cast_11))
  %Const_13 : [#users=1] = Node[type=Const] (attrs = {value: [2]})
  %TopKV2_14 : [#users=2] = Node[type=TopKV2] (inputs = (%Add_12, %Const_13), attrs = {sorted: true, dim: -1, largest: true, indices_dtype: 3})
  %ret : [#users=1] = get_element[node=%TopKV2_14](0)
  %ret_1 : [#users=0] = get_element[node=%TopKV2_14](1)
  %Const_15 : [#users=1] = Node[type=Const] (attrs = {value: [-1]})
  %ReduceSum_16 : [#users=1] = Node[type=ReduceSum] (inputs = (%ret, %Const_15), attrs = {keep_dims: false, noop_with_empty_axes: true})
  %Const_17 : [#users=1] = Node[type=Const] (attrs = {value: [4]})
  %TopKV2_18 : [#users=2] = Node[type=TopKV2] (inputs = (%ReduceSum_16, %Const_17), attrs = {sorted: false, dim: -1, largest: true, indices_dtype: 3})
  %ret_2 : [#users=0] = get_element[node=%TopKV2_18](0)
  %ret_3 : [#users=1] = get_element[node=%TopKV2_18](1)
  %Cast_19 : [#users=1] = Node[type=Cast] (inputs = (%ret_3), attrs = {dst_type: 9})
  %ZerosLike_20 : [#users=1] = Node[type=ZerosLike] (inputs = (%ReduceSum_16))
  %Shape_21 : [#users=1] = Node[type=Shape] (inputs = (%Cast_19), attrs = {dtype: 3})
  %Const_22 : [#users=1] = Node[type=Const] (attrs = {value: [1.000000]})
  %Cast_23 : [#users=1] = Node[type=Cast] (inputs = (%Const_22), attrs = {dst_type: 0})
  %Fill_24 : [#users=1] = Node[type=Fill] (inputs = (%Shape_21, %Cast_23))
  %ScatterElements_25 : [#users=1] = Node[type=ScatterElements] (inputs = (%ZerosLike_20, %Cast_19, %Fill_24), attrs = {axis: 0, reduction: "none"})
  %Unsqueeze_26 : [#users=1] = Node[type=Unsqueeze] (inputs = (%ScatterElements_25), attrs = {axes: {-1}})
  %Const_27 : [#users=1] = Node[type=Const] (attrs = {value: [256 256]})
  %BroadcastTo_28 : [#users=1] = Node[type=BroadcastTo] (inputs = (%Unsqueeze_26, %Const_27))
  %Identity_29 : [#users=1] = Node[type=Identity] (inputs = (%BroadcastTo_28))
  %Const_30 : [#users=1] = Node[type=Const] (attrs = {value: [256 256]})
  %Reshape_31 : [#users=1] = Node[type=Reshape] (inputs = (%Identity_29, %Const_30), attrs = {axis: 0, num_axes: -1})
  %Cast_32 : [#users=1] = Node[type=Cast] (inputs = (%Reshape_31), attrs = {dst_type: 12})
  %LogicalNot_33 : [#users=1] = Node[type=LogicalNot] (inputs = (%Cast_32))
  %Const_34 : [#users=1] = Node[type=Const] (attrs = {value: [0.000000]})
  %MaskedFill_35 : [#users=1] = Node[type=MaskedFill] (inputs = (%Add_12, %LogicalNot_33, %Const_34))
  %Const_36 : [#users=1] = Node[type=Const] (attrs = {value: [4]})
  %TopKV2_37 : [#users=2] = Node[type=TopKV2] (inputs = (%MaskedFill_35, %Const_36), attrs = {sorted: false, dim: -1, largest: true, indices_dtype: 3})
  %ret_4 : [#users=0] = get_element[node=%TopKV2_37](0)
  %ret_5 : [#users=1] = get_element[node=%TopKV2_37](1)
  %Cast_38 : [#users=1] = Node[type=Cast] (inputs = (%ret_5), attrs = {dst_type: 9})
  %GatherElements_39 : [#users=1] = Node[type=GatherElements] (inputs = (%Sigmoid_7, %Cast_38), attrs = {dim: 1})
  %Const_40 : [#users=1] = Node[type=Const] (attrs = {value: [0.000001]})
  %RealDiv_41 : [#users=1] = Node[type=RealDiv] (inputs = (%GatherElements_39, %Const_40))
  %Const_42 : [#users=1] = Node[type=Const] (attrs = {value: [2.500000]})
  %Mul_43 : [#users=1] = Node[type=Mul] (inputs = (%RealDiv_41, %Const_42))
  %Cast_44 : [#users=1] = Node[type=Cast] (inputs = (%Mul_43), attrs = {dst_type: 0})
  return (%Cast_38, %Cast_44)

字段解释如下:

  • 图名称:graph("<图名称>")。
  • 节点实例:%<节点实例名称> : [#users=<出度>] = Node[type=<节点类型>](inputs = (%<节点输入实例1>, %<节点输入实例2>, ...), attrs = {<属性名称1>: <属性值>, <属性名称2>: <属性值>, ...})。
    • <节点实例名称>:节点实例名称。
    • #users=<出度> :节点输出个数。
    • Node[type=<节点类型>]:节点对应OP算子类型,比如算子MatMul对应Node[type=MatMul]。
    • inputs = (<input节点输入实例#num>, ...) :节点的输入节点实例,不区分可选与必选输入,如果为空则缺省。
    • attrs = {<属性名称1>: <属性值>, ...}:节点对应的属性名称与属性值,不区分可选与必选属性,如果为空则缺省。
  • 包含多输出的节点:%ret/ret_#cnt : [#users=<消费者个数>] = get_element[node=%<节点实例名称>](<输出index>)。
    • %ret/ret_#cnt:统一用ret来表示多输出情况,按照ret、ret_1、ret_2的格式递增。
    • #users=<出度>:此输出有几个消费者。
    • get_element[node=%<节点实例名称>]:该输出对应的节点名称,以get_element表示输出,通过node=%<节点实例名称>表示这是哪个节点实例的输出。
    • <输出index>:输出对应的index。
  • 图输出:return (%<图输出1>, %<图输出2>, ...)

    表示图的输出,对应图NetOutput的输入。