from torchair import logger logger.setLevel(logging.DEBUG)
图结构信息示例如下:
[INFO] TORCHAIR(2476445,python):2025-04-09 16:02:54.452.689 [npu_fx_compiler.py:364]2476445 graph: graph(): %arg0_1 : [num_users=1] = placeholder[target=arg0_1] %arg1_1 : [num_users=1] = placeholder[target=arg1_1] %select_scatter : [num_users=1] = call_function[target=torch.ops.aten.select_scatter.default](args = (%arg0_1, %arg1_1, 0, 1), kwargs = {}) %mul : [num_users=1] = call_function[target=torch.ops.aten.mul.Tensor](args = (%select_scatter, 10), kwargs = {}) return (mul,)
该功能通过torchair.get_npu_backend中compiler_config配置,示例如下,参数介绍参见表1。
1 2 3 4 5 6 | import torch_npu, torchair config = torchair.CompilerConfig() # 设置导出图结构文件格式 config.debug.graph_dump.type = "pbtxt" npu_backend = torchair.get_npu_backend(compiler_config=config) opt_model = torch.compile(model, backend=npu_backend) |
参数名 |
参数说明 |
---|---|
graph_dump.type |
开启图结构信息dump,并指定导出文件格式。支持的格式如下:
graph_dump.type缺省值为“None”,表示不导出图结构信息。 说明:
|
指定图dump格式后,生成的图结构文件缺省路径为当前脚本所在路径。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | from torch import tensor from torchair._ge_concrete_graph import ge_apis as ge from torchair.ge._ge_graph import get_default_ge_graph arg0_1_0 = ge.Data(index=0, dtype=0, shape=[2, 2, 2], placement="NPU", node_name="arg0_1") arg1_1_0 = ge.Data(index=1, dtype=0, shape=[2], placement="NPU", node_name="arg1_1") # File "/home/torchair_example/tests/examples/example_select_scatter.py", line 23, in forward output = torch.ops.aten.select_scatter(x, y, 0,1) ## FX Code: select_scatter = torch.ops.aten.select_scatter.default(arg0_1, arg1_1, 0, 1) Shape_0 = ge.Shape(arg0_1_0, node_name="Shape") BroadcastTo_0 = ge.BroadcastTo(1, Shape_0, node_name="BroadcastTo") ExpandDims_0 = ge.ExpandDims(arg1_1_0, 0, node_name="ExpandDims") BroadcastTo_1_0 = ge.BroadcastTo(ExpandDims_0, Shape_0, node_name="BroadcastTo_1") ScatterElements_0 = ge.ScatterElements(arg0_1_0, BroadcastTo_0, BroadcastTo_1_0, axis=0, node_name="ScatterElements") # File "/home/torchair_example/tests/examples/example_select_scatter.py", line 24, in forward return output*10 ## FX Code: mul = torch.ops.aten.mul.Tensor(select_scatter, 10) Mul_0 = ge.Mul(ScatterElements_0, ge.Const(10, dtype=0), node_name="Mul") Cast_0 = ge.Cast(Mul_0, dst_type=0, node_name="Cast") _ = ge.NetOutput([Cast_0], dependencies=[]) |
name: "graph_1" op { name: "arg0_1" type: "Data" attr { key: "_input_name_key" value { list { s: "x" } } } input_desc { name: "x" dtype: DT_FLOAT shape { dim: 2 dim: 2 dim: 2 } layout: "ND" device_type: "NPU" } output_desc { name: "y" dtype: DT_FLOAT shape { dim: 2 dim: 2 dim: 2 } layout: "ND" attr { key: "_meta" value { s: "Tensor(dtype=torch.float32, shape=torch.Size([2, 2, 2]))" } } attr { key: "format_for_int" value { i: 2 } } device_type: "NPU" } } ......... op { name: "arg1_1" type: "Data" attr { key: "_input_name_key" value { list { s: "x" } } } ...... }