问题描述:

【功能模块】

您好,我最近想在ccsrc上添加python内置函数filter的算子,仿造的map函数的源码进行改编,编译成功。

但是在python层面上执行test_map.py,报错。

【操作步骤&问题现象】

1、在ccsrc/frontend/operator/composite目录下,对map.cc做更改

2、在323行REGISTER_PYBIND_DEFINE()内做如下更改:

REGISTER_PYBIND_DEFINE(Map_, ([](const py::module *m) {

                         (void)py::class_<MapPy, MetaFuncGraph, std::shared_ptr<MapPy>>(*m, "Map_")

                           .def(py::init<bool, std::shared_ptr<MultitypeFuncGraph>>(), py::arg("reverse"),

                                py::arg("ops"))

                           .def(py::init<bool>(), py::arg("reverse"));

                       }));

更改为

REGISTER_PYBIND_DEFINE(Filter_, ([](const py::module *m) {

                         (void)py::class_<MapPy, MetaFuncGraph, std::shared_ptr<MapPy>>(*m, "Filter_")

                           .def(py::init<bool, std::shared_ptr<MultitypeFuncGraph>>(), py::arg("reverse"),

                                py::arg("ops"))

                           .def(py::init<bool>(), py::arg("reverse"));

                       }));

即把'Map_'改为'Filter_',只改变两处地方;

3、在根目录运行bash -build.sh -e cpu -j8 -S on,编译通过,在build/package中生成了.whl文件;

4、安装这个mindspore包,之后运行test_map.py,然后报错

5、报错内容:

/Home/andaconda3/bin/python /home/xmuai/project/mindspore/tests/syntax/simple_expression/test_map.py

Traceback (most recent call last):

  File "/home/xmuai/project/mindspore/tests/syntax/simple_expression/test_map.py", line 19, in <module>

    from mindspore import Tensor, nn, Parameter

  File "/home/xmuai/.local/lib/python3.9/site-packages/mindspore/__init__.py", line 18, in <module>

    from . import common, dataset, mindrecord, train, log

  File "/home/xmuai/.local/lib/python3.9/site-packages/mindspore/common/__init__.py", line 16, in <module>

    from . import dtype

  File "/home/xmuai/.local/lib/python3.9/site-packages/mindspore/common/dtype.py", line 21, in <module>

    from .._c_expression import typing

ImportError: generic_type: type "Filter_" referenced unknown base type "mindspore::MetaFuncGraph"

Process finished with exit code 1

6、P.S.:我的预期工作是copy这个map.h和map.cc文件,然后更改为实现filter函数的功能,接着修改ccsrc/pipeline/jit/debug/anf_ir_utils.cc添加filter的接口。但是我在原本可以正常运行的map.cc里做了两个改动,就报错了。不知道是不是漏了哪里没修改,希望您不吝赐教!谢谢!

【截图信息】

解答:

你好,该问题报错的原因是pybind未先包装基类mindspore::MetaFunction。 REGISTER_PYBIND_DEFINE宏定义将pybind绑定函数添加到map中,由于MetaFunction对应的key是“FuncGraph”,在遍历map时由于你定义的名字是Filter_,导致其对应的绑定函数先于绑定MetaFunction的函数执行,就报出了描述中错误。 该问题为框架问题,已为您联系相关开发人员修复,给你带来不好的体验十分抱歉。 规避方案:您当前可以通过修改Filter_名字使其排序能够在FuncGraph后。 另外:您方案中直接将Map_改成Filter_方式也建议您修改,该方式会导致您在import mindspore时找不到“Map_”,建议您通过新建文件的方式来实现

 

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐