Created by: phlrain
Add dygraph execution context
目前的 OperatorBase 以及ExecutionContext 是为静态图模式设计,这种设计对于动态图不是非常的高效
这个pr做了两件事情
-
OperatorBase支持空的 input,output,attribute,OperatorBase中的input output 是string 到 vector的映射,动态图不会构造这个数据,如果特意构造会带来性能的影响;而且OperatorBase在动态图模式下会被频繁的构造和析构,input, output 的构造和析构 都带来一些开销 在一些的op实现中,通过ExecutionContext中 const OperatorBase& op() 接口来获取 var_name, 比如 ctx.op().input("X") 来获取 X 的var_name, 由于动态图不会传入input和output, ctx.op().input("X") 就会出错, 在ExecutionContext新增 InputName 来解决这种需求问题。
-
新增了动态图的DygraphInferShapeContext 和 DygraphExecutionContext,这两个都是基于现有的模块进行继承,主要是为了提高动态图的执行效率。
此pr会使ptb c++ 单测的时间从115 下降到76
整个任务训练时间 ptb任务的一个epoch训练时间从 350s 下降到240s
由于动态图不支持lod tensor,关闭了一些op 在输入为lod tensor情况下动态图的测试 列表如下 test_seq_pool test_gru_op test_cumsum_op test_row_conv_op test_sequence_expand_as test_var_conv_2d test_fused_embedding_fc_lstm_op test_collect_fpn_proposals_op test_lstmp_op test_add_position_encoding_op test_sequence_unpad_op test_one_hot_v2_op test_lstm_op test_sequence_pad_op test_fill_op test_iou_similarity_op test_fusion_gru_op test_sequence_expand test_fusion_lstm_op test_sequence_reverse test_cvm_op test_fusion_seqexpand_concat_fc_op test_warpctc_op test_sequence_scatter_op test_match_matrix_tensor_op test_one_hot_op test_attention_lstm_op