问题描述:
使用的是mindspore1.3.0
【操作步骤&问题现象】
1、当 context.set_context(mode=context.GRAPH_MODE,enable_graph_kernel=True, device_target=device_type) 时报错;
2、改成下面两种方式,则正常运行;
context.set_context(mode=context.PYNATIVE_MODE, enable_graph_kernel=True,device_target=device_type)
context.set_context(mode=context.GRAPH_MODE, device_target=device_type)
【截图信息】

解答:
非常感谢你使用mindspore的图算融合特性来进行实验的验证,从你这错误中不难发现应该是matmul算子在昇腾上使能图算融合这一特性后,进行了细粒度的展开,但是这个算子的info信息里的attrs缺少了transpose的具体值导致的错误。在R1.3分支上,图算融合对于Matmul算子的支持还不是很好,因此给出以下两种可能可以帮助你跑通该特性的解决方案:
1.继续使用r1.3分支的包来使能图算融合,需要在设置的时候多加一个限制,将代码从
context.set_context(mode=context.GRAPH_MODE,enable_graph_kernel=True, device_target=device_type)
多加一个flag控制:
context.set_context(device_target=device_type, mode=context.GRAPH_MODE,enable_graph_kernel=True, graph_kernel_flags="--disable_expand_ops=MatMul")
使得在昇腾芯片上,MatMul这一个算子走正常的算子编译流程,应该可以解决这个问题。
2.不需要加任何flag控制,直接拉取r1.5分支的包,运行网络脚本,这个问题应该也不会出现。(推荐使用该解决方案,因为r1.5版本,图算的功能应该更加完善,鲁棒性更强。)
这两种方案,看您更倾向于使用哪种,修改后可以尝试再运行一下该网络看是否还会有问题,期待您的反馈,谢谢!