MindSpore在Ascend后端报错算子不支持

发布于:2022-11-28 ⋅ 阅读:(248) ⋅ 点赞:(0)

【现象描述】

ascend 后端报错算子不支持,“Can not find any available kernel info for xxx”或者 “Can not select a valid kernel info for xxx in AI CORE or AI CPU kernel info candidates list”

【原因分析】

算子使用时,出现上述报错的有很多,一般有以下几种原因:

1、该算子在ascend平台上真的不支持

2、由于版本配套关系,算子的信息发生变化,没有及时做相应的修改(个人可以尝试修改,但是一般会在mindspore下个版本中完修复)

【解决方法】

1、对于第一种原因,由于平台限制,算子不支持在ascend平台上使用,只能更换算子。算子在各个平台上的支持情况,可以参考:https://www.mindspore.cn/docs/note/zh-CN/master/operator_list.html 。每个算子都会有在各硬件平台上的支持情况。比如 :

2、针对第二种原因,举例说明。

import numpy as np
​
from mindspore import context
from mindspore.common.tensor import Tensor
from mindspore.nn import Cell
from mindspore.ops import operations as P
from mindspore.train.model import Model
​
context.set_context(mode=context.GRAPH_MODE, device_target="Ascend")
​
​
class Net(Cell):
    def __init__(self):
        super(Net, self).__init__()
        self.batchmatmul = P.BatchMatMul()
​
    def construct(self, inputa, inputb):
        x = self.batchmatmul(inputa, inputb)
        return x
​
​
def tf_me_batchmatmul(inputa, inputb):
    net = Net()
    net.set_train()
    model = Model(net)
    model.predict(Tensor(inputa), Tensor(inputb))
​
​
def test_batchmatmul_normal_shape1():
    inputa = np.random.randn(128, 16, 128).astype(np.float32)
    inputb = np.random.randn(128, 128, 64).astype(np.float32)
    tf_me_batchmatmul(Tensor(inputa), Tensor(inputb))

执行上述用例,发现算子在编译阶段报错:

其实我们是知道该算子在ascend平台上是支持的。然后我们再细看报错,会发现有如下信息:

也就是说,我们其实是找到了相关算子,但是在调用算子的相关函数时失败了,说没有check_supported这个函数。此时我们去算子的信息库看一下batchmatmul到底有没有提供这个方法。在run包安装路径下find查找如下文件“aic-ascend910-ops-info.json”,在该文件中找到batchmatmul算子的描述,这时候发现该算子已经没有“needCheckSupport"这个标记了:

也就是说算子已经不再提供check_supported方法。再回头找到mindspore对该算子的注册描述文件mindspore/python/mindspore/ops/_op_impl/tbe/batch_matmul.py,查看发现:

啥意思呢,翻译过来就是算子没有提供check_supported方法,但是你mindspore偏要去调用这个方法,那不是自寻烦恼?我们将这一行代码删除,再次执行,算子可以正常编译,用例执行pass。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到