- 1 环境准备
- 2 保存中间文件
- 3 IR图解读
前面介绍了三个网络调试方法(print/gdb/dump),这次讲一下ir图,是一个通过保存中间文件辅助定位的方法
1 环境准备
准备的是x86 ascend机器
Linux localhost.localdomain 4.18.0-147.5.2.1.h579.eulerosv2r10.x86_64 #1 SMP Sat Jul 31 09:58:46 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
python 3.7.5

mindspore master
commit_id = ‘[sha1]:4a7eaf1b,[branch]:(HEAD,origin/master,origin/HEAD,master)’
2 保存中间文件
保存中间文件是通过set_context(save_graphs=3)来控制保存图的,其中save_graphs的值不一样,效果也是不同的:
-
save_graphs (bool 或 int) - 表示是否保存中间编译图。默认值:
0。可用的选项为:-
False或0:不保存中间编译图。
-
1:运行时会输出图编译过程中生成的一些中间文件。
-
True或2:生成更多后端流程相关的ir文件。
-
3:生成可视化计算图和更多详细的前端ir图。
-
当 save_graphs 属性设为 1 、 2 、 3 或者 True 时, save_graphs_path 属性用于设置中间编译图的存储路径。默认情况下,计算图保存在当前目录下。
可以输入save_graphs_path 控制保存的ir图的地址
import numpy as np
import mindspore as ms
import mindspore.ops as ops
import mindspore.nn as nn
import pdb
ms.set_context(device_target="Ascend", mode=ms.GRAPH_MODE, save_graphs=3)
class PrintDemo(nn.Cell):
def __init__(self):
super(PrintDemo, self).__init__()
self.add1 = ops.Add()
self.add2 = ops.Add()
def construct(self, x, y):
out = self.add1(x, y)
out = self.add2(out, x)
return x
x = ms.Tensor(np.ones([2, 1]).astype(np.int32))
y = ms.Tensor(np.ones([2, 2]).astype(np.int32))
net = PrintDemo()
output = net(x, y)
执行脚本:
-

-
生成的文件
-
total 1288
drwx------. 3 root root 20480 Jul 31 21:53 .
drwxr-xr-x. 30 root root 4096 Jul 27 10:08 ..
-r--------. 1 root root 2805 Jul 31 21:53 00_parse_0000.ir
-r--------. 1 root root 5977 Jul 31 21:53 00_parse_0001.dot
-r--------. 1 root root 1402 Jul 31 21:53 01_symbol_resolve_0008.ir
-r--------. 1 root root 4153 Jul 31 21:53 01_symbol_resolve_0009.dot
-r--------. 1 root root 1402 Jul 31 21:53 02_combine_like_graphs_0010.ir
-r--------. 1 root root 4153 Jul 31 21:53 02_combine_like_graphs_0011.dot
-r--------. 1 root root 1402 Jul 31 21:53 03_meta_unpack_prepare_0014.ir
-r--------. 1 root root 4153 Jul 31 21:53 03_meta_unpack_prepare_0015.dot
-r--------. 1 root root 1782 Jul 31 21:53 04_abstract_specialize_0016.ir
-r--------. 1 root root 4291 Jul 31 21:53 04_abstract_specialize_0017.dot
-r--------. 1 root root 1782 Jul 31 21:53 05_pack_expand_0018.ir
-r--------. 1 root root 4291 Jul 31 21:53 05_pack_expand_0019.dot
-r--------. 1 root root 481 Jul 31 21:53 06_auto_monad_0020.ir
-r--------. 1 root root 1076 Jul 31 21:53 06_auto_monad_0021.dot
-r--------. 1 root root 481 Jul 31 21:53 07_inline_0022.ir
-r--------. 1 root root 1076 Jul 31 21:53 07_inline_0023.dot
-r--------. 1 root root 563 Jul 31 21:53 08_pre_auto_parallel_0024.ir
-r--------. 1 root root 1076 Jul 31 21:53 08_pre_auto_parallel_0025.dot
-r--------. 1 root root 563 Jul 31 21:53 09_pipeline_split_0026.ir
-r--------. 1 root root 1076 Jul 31 21:53 09_pipeline_split_0027.dot
-r--------. 1 root root 682 Jul 31 21:53 10_optimize_0278.ir
-r--------. 1 root root 1078 Jul 31 21:53 10_optimize_0279.dot
-r--------. 1 root root 682 Jul 31 21:53 11_auto_monad_reorder_0280.ir
-r--------. 1 root root 1078 Jul 31 21:53 11_auto_monad_reorder_0281.dot
-r--------. 1 root root 682 Jul 31 21:53 12_get_jit_bprop_graph_0282.ir
-r--------. 1 root root 1078 Jul 31 21:53 12_get_jit_bprop_graph_0283.dot
-r--------. 1 root root 682 Jul 31 21:53 13_eliminate_special_op_node_0290.ir
-r--------. 1 root root 1078 Jul 31 21:53 13_eliminate_special_op_node_0291.dot
-r--------. 1 root root 682 Jul 31 21:53 14_validate_0292.ir
-r--------. 1 root root 1078 Jul 31 21:53 14_validate_0293.dot
-r--------. 1 root root 682 Jul 31 21:53 15_distribtued_split_0294.ir
-r--------. 1 root root 1078 Jul 31 21:53 15_distribtued_split_0295.dot
-r--------. 1 root root 682 Jul 31 21:53 16_task_emit_0296.ir
-r--------. 1 root root 1078 Jul 31 21:53 16_task_emit_0297.dot
-r--------. 1 root root 682 Jul 31 21:53 17_execute_0298.ir
-r--------. 1 root root 1078 Jul 31 21:53 17_execute_0299.dot
-r--------. 1 root root 730 Jul 31 21:53 ModelDigraph_0300.dot
-r--------. 1 root root 110 Jul 31 21:53 ms_output_optimize.pb
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_addn_check_dump_0056.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_addn_check_dump_0057.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_arithmetic_simplify_0066.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_arithmetic_simplify_0067.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_compare_switch_simplify_0054.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_compare_switch_simplify_0055.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_depend_value_elim_0078.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_depend_value_elim_0079.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_environ_get_eliminate_0076.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_environ_get_eliminate_0077.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_float_environ_get_switch_0060.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_float_environ_get_switch_0061.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_float_tuple_getitem_switch_0058.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_float_tuple_getitem_switch_0059.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_incorporate_call_0072.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_incorporate_call_0073.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_incorporate_call_switch_0074.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_incorporate_call_switch_0075.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_inline_0062.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_inline_0063.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_merge_addn_0052.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_merge_addn_0053.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_reduce_all_const_elim_0080.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_reduce_all_const_elim_0081.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_specialize_transform_0050.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_specialize_transform_0051.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_switch_simplify_0048.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_switch_simplify_0049.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_tuple_list_get_item_eliminator_0070.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_tuple_list_get_item_eliminator_0071.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_tuple_list_set_item_eliminator_0068.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_tuple_list_set_item_eliminator_0069.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_a_r1_a_2_updatestate_useless_node_eliminater_0064.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_a_2_updatestate_useless_node_eliminater_0065.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_a_r1_a_3_check_bprop_eliminate_0124.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_a_r1_a_3_check_bprop_eliminate_0125.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_a_r1_a_3_micro_step_allgather_replace_0134.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_a_r1_a_3_micro_step_allgather_replace_0135.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_a_r1_a_3_mini_step_allgather_replace_0132.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_a_r1_a_3_mini_step_allgather_replace_0133.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_a_r1_a_3_replace_applicator_0128.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_a_r1_a_3_replace_applicator_0129.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_a_r1_a_3_row_tensor_add_zeros_like_0130.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_a_r1_a_3_row_tensor_add_zeros_like_0131.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_a_r1_a_3_same_eliminate_0122.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_a_r1_a_3_same_eliminate_0123.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_a_r1_a_3_split_environ_get_set_with_tuple_value_0136.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_a_r1_a_3_split_environ_get_set_with_tuple_value_0137.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_a_r1_a_3_switch_layer_defer_inline_0126.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_a_r1_a_3_switch_layer_defer_inline_0127.dot
-r--------. 1 root root 596 Jul 31 21:53 opt_a_r1_cell_reuse_handle_not_recompute_node_pass_remove_not_recompute_node_0102.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_a_r1_cell_reuse_handle_not_recompute_node_pass_remove_not_recompute_node_0103.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_environ_add_const_eliminate__0190.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_environ_add_const_eliminate__0191.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_environ_get_add_eliminate_0184.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_environ_get_add_eliminate_0185.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_environ_get_depend_swap_0188.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_environ_get_depend_swap_0189.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_environ_get_eliminate_0182.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_environ_get_eliminate_0183.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_environ_get_set_eliminate_0186.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_environ_get_set_eliminate_0187.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_float_tuple_getitem_switch_0166.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_float_tuple_getitem_switch_0167.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_inline_0170.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_inline_0171.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_load_eliminater_0176.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_load_eliminater_0177.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_make_slice_get_slice_eliminator_0164.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_make_slice_get_slice_eliminator_0165.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_parallel_virtual_node_0194.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_parallel_virtual_node_0195.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_reset_defer_inline_0168.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_reset_defer_inline_0169.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_special_op_eliminate_0180.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_special_op_eliminate_0181.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_stopgrad_eliminater_0178.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_stopgrad_eliminater_0179.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_tuple_list_convert_item_index_to_positive_0162.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_tuple_list_convert_item_index_to_positive_0163.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_tuple_list_get_item_const_eliminator_0154.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_tuple_list_get_item_const_eliminator_0155.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_tuple_list_get_item_depend_reorder_0160.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_tuple_list_get_item_depend_reorder_0161.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_tuple_list_get_item_eliminator_0152.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_tuple_list_get_item_eliminator_0153.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_tuple_list_get_set_item_eliminator_0158.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_tuple_list_get_set_item_eliminator_0159.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_tuple_list_set_item_eliminator_0156.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_tuple_list_set_item_eliminator_0157.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_updatestate_pure_node_eliminater_0174.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_updatestate_pure_node_eliminater_0175.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_updatestate_useless_node_eliminater_0172.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_updatestate_useless_node_eliminater_0173.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_value_based_eliminate_0192.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_value_based_eliminate_0193.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_b_r1_b_1_zero_like_fill_zero_0150.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_b_r1_b_1_zero_like_fill_zero_0151.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_pass_0_py_interpret_to_execute_0028.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_pass_0_py_interpret_to_execute_0029.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_pass_10_remove_dup_value_0230.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_10_remove_dup_value_0231.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_pass_11_tuple_transform_0236.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_11_tuple_transform_0237.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_pass_12_add_cache_embedding_0238.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_12_add_cache_embedding_0239.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_13_add_recomputation_0240.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_13_add_recomputation_0241.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_14_cse_after_recomputation_0244.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_14_cse_after_recomputation_0245.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_15_environ_conv_0246.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_15_environ_conv_0247.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_16_label_micro_interleaved_index_0248.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_16_label_micro_interleaved_index_0249.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_17_slice_recompute_activation_0250.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_17_slice_recompute_activation_0251.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_18_micro_interleaved_order_control_0252.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_18_micro_interleaved_order_control_0253.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_19_comp_comm_scheduling_0254.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_19_comp_comm_scheduling_0255.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_pass_1_rewriter_before_opt_a_0030.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_pass_1_rewriter_before_opt_a_0031.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_20_reorder_send_recv_between_fp_bp_0256.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_20_reorder_send_recv_between_fp_bp_0257.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_21_comm_op_add_attrs_0258.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_21_comm_op_add_attrs_0259.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_22_process_send_recv_for_ge_0260.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_22_process_send_recv_for_ge_0261.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_23_add_comm_op_reuse_tag_0262.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_23_add_comm_op_reuse_tag_0263.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_24_overlap_opt_shard_in_pipeline_0264.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_24_overlap_opt_shard_in_pipeline_0265.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_25_grouped_pairwise_exchange_alltoall_0266.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_25_grouped_pairwise_exchange_alltoall_0267.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_26_overlap_recompute_and_grad_model_parallel_0268.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_26_overlap_recompute_and_grad_model_parallel_0269.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_27_split_matmul_comm_elemetwise_0270.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_27_split_matmul_comm_elemetwise_0271.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_28_split_layernorm_comm_0272.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_28_split_layernorm_comm_0273.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_29_overlap_grad_matmul_and_grad_allreduce_0274.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_29_overlap_grad_matmul_and_grad_allreduce_0275.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_pass_2_opt_a_0140.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_2_opt_a_0141.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_pass_30_handle_group_info_0276.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_30_handle_group_info_0277.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_pass_3_slice_cell_reuse_recomputed_activation_0142.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_3_slice_cell_reuse_recomputed_activation_0143.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_pass_4_rewriter_after_opt_a_0144.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_4_rewriter_after_opt_a_0145.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_pass_5_convert_pyexecute_list_input_0146.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_5_convert_pyexecute_list_input_0147.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_pass_6_order_py_execute_after_rewriter_0148.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_6_order_py_execute_after_rewriter_0149.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_pass_7_opt_b_0210.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_7_opt_b_0211.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_pass_8_cconv_0212.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_8_cconv_0213.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_pass_9_opt_after_cconv_0228.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_pass_9_opt_after_cconv_0229.dot
-r--------. 1 root root 1827 Jul 31 21:53 opt_resolve_r1_resolve_getattr_setattr_resolve_0002.ir
-r--------. 1 root root 4153 Jul 31 21:53 opt_resolve_r1_resolve_getattr_setattr_resolve_0003.dot
-r--------. 1 root root 1827 Jul 31 21:53 opt_resolve_r1_resolve_getattr_setattr_resolve_0004.ir
-r--------. 1 root root 4153 Jul 31 21:53 opt_resolve_r1_resolve_getattr_setattr_resolve_0005.dot
-r--------. 1 root root 1180 Jul 31 21:53 opt_substep_meta_unpack_prepare_r1_0_meta_unpack_prepare_0012.ir
-r--------. 1 root root 4153 Jul 31 21:53 opt_substep_meta_unpack_prepare_r1_0_meta_unpack_prepare_0013.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_after_cconv_r1_0_c_1_0214.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_after_cconv_r1_0_c_1_0215.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_after_cconv_r1_1_parameter_eliminate_0216.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_after_cconv_r1_1_parameter_eliminate_0217.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_after_cconv_r1_2_updatestate_depend_eliminate_0218.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_after_cconv_r1_2_updatestate_depend_eliminate_0219.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_after_cconv_r1_3_updatestate_assign_eliminate_0220.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_after_cconv_r1_3_updatestate_assign_eliminate_0221.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_after_cconv_r1_4_updatestate_loads_eliminate_0222.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_after_cconv_r1_4_updatestate_loads_eliminate_0223.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_after_cconv_r1_5_cse_0224.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_after_cconv_r1_5_cse_0225.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_after_cconv_r1_6_renormalize_0226.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_after_cconv_r1_6_renormalize_0227.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_substep_opt_after_recompute_r1_0_cse_0242.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_after_recompute_r1_0_cse_0243.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_substep_opt_a_r1_0_expand_dump_flag_0032.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_0_expand_dump_flag_0033.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_substep_opt_a_r1_10_pynative_shard_0086.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_10_pynative_shard_0087.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_substep_opt_a_r1_11_auto_parallel_0088.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_11_auto_parallel_0089.dot
-r--------. 1 root root 596 Jul 31 21:53 opt_substep_opt_a_r1_12_parallel_0090.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_12_parallel_0091.dot
-r--------. 1 root root 596 Jul 31 21:53 opt_substep_opt_a_r1_13_allreduce_fusion_0092.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_13_allreduce_fusion_0093.dot
-r--------. 1 root root 596 Jul 31 21:53 opt_substep_opt_a_r1_14_virtual_dataset_0094.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_14_virtual_dataset_0095.dot
-r--------. 1 root root 596 Jul 31 21:53 opt_substep_opt_a_r1_15_get_grad_eliminate__0096.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_15_get_grad_eliminate__0097.dot
-r--------. 1 root root 596 Jul 31 21:53 opt_substep_opt_a_r1_16_virtual_output_0098.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_16_virtual_output_0099.dot
-r--------. 1 root root 596 Jul 31 21:53 opt_substep_opt_a_r1_17_cell_reuse_recompute_pass_0100.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_17_cell_reuse_recompute_pass_0101.dot
-r--------. 1 root root 596 Jul 31 21:53 opt_substep_opt_a_r1_18_cell_reuse_handle_not_recompute_node_pass_0104.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_18_cell_reuse_handle_not_recompute_node_pass_0105.dot
-r--------. 1 root root 596 Jul 31 21:53 opt_substep_opt_a_r1_19_meta_fg_expand_0106.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_19_meta_fg_expand_0107.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_substep_opt_a_r1_1_switch_simplify_0034.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_1_switch_simplify_0035.dot
-r--------. 1 root root 596 Jul 31 21:53 opt_substep_opt_a_r1_20_after_resolve_0108.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_20_after_resolve_0109.dot
-r--------. 1 root root 596 Jul 31 21:53 opt_substep_opt_a_r1_21_a_after_grad_0110.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_21_a_after_grad_0111.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_a_r1_22_renormalize_0112.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_a_r1_22_renormalize_0113.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_a_r1_23_real_op_eliminate_0114.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_a_r1_23_real_op_eliminate_0115.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_a_r1_24_auto_monad_grad_0116.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_a_r1_24_auto_monad_grad_0117.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_a_r1_25_auto_monad_eliminator_0118.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_a_r1_25_auto_monad_eliminator_0119.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_a_r1_26_cse_0120.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_a_r1_26_cse_0121.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_a_r1_27_a_3_0138.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_a_r1_27_a_3_0139.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_substep_opt_a_r1_2_a_1_0036.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_2_a_1_0037.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_substep_opt_a_r1_3_recompute_prepare_0038.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_3_recompute_prepare_0039.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_substep_opt_a_r1_4_updatestate_depend_eliminate_0040.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_4_updatestate_depend_eliminate_0041.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_substep_opt_a_r1_5_updatestate_assign_eliminate_0042.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_5_updatestate_assign_eliminate_0043.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_substep_opt_a_r1_6_updatestate_loads_eliminate_0044.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_6_updatestate_loads_eliminate_0045.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_substep_opt_a_r1_7_parameter_eliminate_0046.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_7_parameter_eliminate_0047.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_substep_opt_a_r1_8_a_2_0082.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_8_a_2_0083.dot
-r--------. 1 root root 518 Jul 31 21:53 opt_substep_opt_a_r1_9_accelerated_algorithm_0084.ir
-r--------. 1 root root 1076 Jul 31 21:53 opt_substep_opt_a_r1_9_accelerated_algorithm_0085.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_b_r1_0_b_1_0196.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_b_r1_0_b_1_0197.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_b_r1_1_b_2_0198.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_b_r1_1_b_2_0199.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_b_r1_2_updatestate_depend_eliminate_0200.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_b_r1_2_updatestate_depend_eliminate_0201.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_b_r1_3_updatestate_assign_eliminate_0202.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_b_r1_3_updatestate_assign_eliminate_0203.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_b_r1_4_updatestate_loads_eliminate_0204.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_b_r1_4_updatestate_loads_eliminate_0205.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_b_r1_5_renormalize_0206.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_b_r1_5_renormalize_0207.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_b_r1_6_cse_0208.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_b_r1_6_cse_0209.dot
-r--------. 1 root root 1827 Jul 31 21:53 opt_substep_opt_resolve_r1_0_resolve_0006.ir
-r--------. 1 root root 4153 Jul 31 21:53 opt_substep_opt_resolve_r1_0_resolve_0007.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_trans_graph_r1_0_d_1_0232.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_trans_graph_r1_0_d_1_0233.dot
-r--------. 1 root root 602 Jul 31 21:53 opt_substep_opt_trans_graph_r1_1_renormalize_0234.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_opt_trans_graph_r1_1_renormalize_0235.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_substep_special_op_eliminate_r1_0_ad_related_special_op_eliminate_0284.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_special_op_eliminate_r1_0_ad_related_special_op_eliminate_0285.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_substep_special_op_eliminate_r1_1_mutable_op_eliminate_0286.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_special_op_eliminate_r1_1_mutable_op_eliminate_0287.dot
-r--------. 1 root root 637 Jul 31 21:53 opt_substep_special_op_eliminate_r1_2_convert_tensor_op_eliminate_0288.ir
-r--------. 1 root root 1078 Jul 31 21:53 opt_substep_special_op_eliminate_r1_2_convert_tensor_op_eliminate_0289.dot
drwx------. 4 root root 53 Jul 31 20:22 rank_0
-rw-------. 1 root root 73 Jul 31 20:30 test2.py
-r--------. 1 root root 90 Jul 31 20:22 test.data
-rw-------. 1 root root 581 Jul 31 21:52 test.py
.dot文件可以通过graphviz转换为图片格式来查看,例如将dot转换为png的命令是dot -Tpng *.dot -o *.png
可以看到上面的ir图分多个阶段:
-
parse阶段负责解析入口函数,该阶段会初步生成MindIR,如果查看IR文件,我们能观察到该阶段仅仅解析了顶层Cell的图信息; -
symbol_resolve阶段负责进一步解析入口函数,主要是递归解析入口函数直接或间接引用到的其他函数和对象。如果使用了尚不支持的语法,一般会在此阶段出错; -
abstract_specialize阶段,会根据输入信息推导出IR中所有节点的数据类型和形状信息。当需要查看IR中具体算子的形状或数据类型,可查看该IR文件; -
optimize阶段负责硬件无关的优化,自动微分与自动并行功能也是在该阶段展开。该阶段又可细分为若干个子阶段,在IR文件列表中,其中以opt_pass_[序号]为前缀的文件分别是这些子阶段结束后保存的IR文件,非框架开发人员无需过多关注; -
validate阶段负责校验编译出来的计算图,如果到此阶段IR中还有仅临时使用的内部算子,则会报错退出; -
task_emit阶段负责将计算图传给后端进一步处理; -
execute阶段负责启动执行图流程,该阶段的IR图是前端编译阶段的最终图。
我们来看看execute阶段的图,这个是前端的最终图
17_execute_0298.ir
额,图中竟然没有add算子
# IR entry: @2_1___main___PrintDemo_construct.12
# Total subgraphs: 1
# Attrs:
check_set_strategy_valid_once_only : 1
auto_parallel_finish_pre_action : 1
# Total params: 2
# Params:
%para1_x : <Tensor[Int32], (2, 1)>
%para2_y : <Tensor[Int32], (2, 2)>
subgraph attr:
check_set_strategy_valid_once_only : 1
auto_parallel_finish_pre_action : 1
subgraph instance: 2_1___main___PrintDemo_construct.12 : 0x55d1997f51b0
# In file test.py:15/ def construct(self, x, y):/
subgraph @2_1___main___PrintDemo_construct.12() {
Return(%para1_x) cnode_attrs: {checkpoint: Bool(1)}
: (<Tensor[Int32], (2, 1)>)
# Scope: (Default)
# In file test.py:18/ return x/
}
- 看了一下刚开始还是有的
01_symbol_resolve_0008.ir: %0(out) = S-Prim-Add(%para1_x, %para2_y)
估计直接被优化掉了,毕竟算法太简单
若是写复杂一点的
%0([CNode]20) = Add(%para1_x, %para2_y)
图里面会出现类似这样的关键字
若是编译失败,会出现analyze_fail.ir这样的ir图,可以根据这个图找到具体报错的语句