【mindspore】(Pybind) Python层面上Import .so文件报错

问题描述:

【功能模块】

您好,我最近想在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_”,建议您通过新建文件的方式来实现

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值