mindspore之中间文件保存

  • 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

cke_6797.png

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 属性设为 123 或者 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)  

执行脚本:

  • cke_89789.png

  • 生成的文件

  • 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图,可以根据这个图找到具体报错的语句