解决昇腾 MindX 多用户环境下 Python 导入 MxpiDataType_pb2 失败的问题

解决昇腾 MindX mxVision Python 导入不成功的问题(MxpiDataType_pb2 例)

太长不看系列

因为在多用户运行模式下,默认的 MindX SDK 权限不足。将 MindX SDK 中的所有文件赋予读取+执行权限,便可正常执行。

文章目录

  • 解决昇腾 MindX mxVision Python 导入不成功的问题(MxpiDataType\_pb2 例)
  • 太长不看系列
  • 问题复现
  • 环境
  • 硬件
  • 软件
  • 代码执行
  • 解决问题
  • 确定 MindX 路径
  • 提升文件夹内所有文件的权限
  • 再次测试
  • 其他案例
  • 感想
  • 链接

  • 昇腾 MindStudio IDE 中好用的工具(模型转换、模型查看、日志查看、MindX)-开发昇腾应用

    我的上一篇文章是介绍昇腾 MindStudio IDE 的,其也可以用来开发 MindX 应用,进行可视化流程编排。

    问题复现

    环境

    硬件

    昇腾 Atlas 200I DK A2 开发者套件(本例中等同于 Atlas 200I A2 模块)

    软件

    Ubuntu 20.04 LTS Arm64

    CANN 6.2

    mxVision 5.0

    代码执行

    首先安装好 CANN ,MindX SDK (mxVision)

    打开python,尝试导入 MxpiDataType_pb2

    import MxpiDataType_pb2
    

    会抛出错误:

    Traceback (most recent call last):

    File “<stdin>”, line 1, in <module>

    ModuleNotFoundError: No module named ‘MxpiDataType_pb2’

    或者:

    Traceback (most recent call last):

    File “<stdin>”, line 1, in <module>

    File “<frozen importlib._bootstrap>”, line 1007, in _find_and_load

    File “<frozen importlib._bootstrap>”, line 986, in _find_and_load_unlocked

    File “<frozen importlib._bootstrap>”, line 680, in _load_unlocked

    File “<frozen importlib._bootstrap_external>”, line 786, in exec_module

    File “<frozen importlib._bootstrap_external>”, line 922, in get_code

    File “<frozen importlib._bootstrap_external>”, line 979, in get_data

    PermissionError: [Errno 13] Permission denied: ‘/usr/local/Ascend/mxVision/python/MxpiDataType_pb2.py’

    这种情况就是 MindX 权限不足的问题,造成配置脚本无法正常读取,需要手动提升权限。

    解决问题

    我们需要找出 MindX 所在路径,将 MindX 的所有文件都提升权限。

    注意:是所有的文件,因为文件内有互相引用的情况

    确定 MindX 路径

    当 MindX 刚安装好时,会给你一个 set_env.sh 文件用于配置。当使用 root 用户安装时,它的路径可能像这样:

    /usr/local/Ascend/mxVision/set_env.sh

    我们定位到其上一级的文件夹,并查看所属权限

    cd /usr/local/Ascend
    ls -l
    

    total 24
    drwxr-xr-x 4 root root 4096 May 5 08:07 ascend-toolkit (CANN 的文件夹)
    lrwxrwxrwx 1 root root 16 May 5 08:16 mxVision -> mxVision-5.0.RC1
    drwxr-x— 11 root root 4096 May 5 08:16 mxVision-5.0.RC1

    可以看见 mxVision 的软链接虽然被赋予了所有权限,但相关的“5.0.RC1”并没有相关权限,这不是重点,我们只要搞好软链接文件夹就行了。

    查看软链接文件夹内部权限情况:

    ls -l mxVision/
    

    total 1076
    drwxr-x— 2 root root 4096 Jul 22 16:20 bin
    drwxr-x— 2 root root 4096 May 5 08:15 config
    -rw-r—– 1 root root 1054625 Feb 20 2022 filelist.txt
    dr-xr-x— 6 root root 4096 May 5 08:15 include
    dr-xr-x— 4 root root 4096 May 5 08:15 lib
    dr-xr-x— 7 root root 4096 May 5 08:16 opensource
    drwxr-x— 3 root root 4096 May 5 08:16 operators
    dr-xr-x— 3 root root 4096 May 5 09:03 python
    drwxr-x— 3 root root 4096 May 5 08:16 samples
    -r-x—— 1 root root 973 Feb 20 2022 set_env.sh
    drwxr-x— 3 root root 4096 May 5 08:16 toolkit
    -r–r—– 1 root root 77 Feb 20 2022 version.info

    可以发现用户完全没有执行权限(基本上权限是 550),我们需要提升普通用户的读取与执行权限。

    提升文件夹内所有文件的权限

    chmod -R 755 mxVision/
    

    total 1076
    drwxr-xr-x 2 root root 4096 Jul 22 16:20 bin
    drwxr-xr-x 2 root root 4096 May 5 08:15 config
    -rwxr-xr-x 1 root root 1054625 Feb 20 2022 filelist.txt
    drwxr-xr-x 6 root root 4096 May 5 08:15 include
    drwxr-xr-x 4 root root 4096 May 5 08:15 lib
    drwxr-xr-x 7 root root 4096 May 5 08:16 opensource
    drwxr-xr-x 3 root root 4096 May 5 08:16 operators
    drwxr-xr-x 3 root root 4096 May 5 09:03 python
    drwxr-xr-x 3 root root 4096 May 5 08:16 samples
    -rwxr-xr-x 1 root root 973 Feb 20 2022 set_env.sh
    drwxr-xr-x 3 root root 4096 May 5 08:16 toolkit
    -rwxr-xr-x 1 root root 77 Feb 20 2022 version.info

    可以看见后面**都有 r-x **,说明提升权限完成。

    再次测试

    import MxpiDataType_pb2
    

    此时应该可以完成导出

    其他案例

    因为 MindX SDK 有很多库可以导入,不止 MxpiDataType_pb2 ,所以后续有看见可以使用相同方法解决的将会添加在这里。

    (待续)

    感想

    “小藤”开发板使用了多个用户各司其职,确实保证了系统安全性,虽然会比单用户运行遇到更多的问题,但是这个“分用户运行”的方法是正确的。

    链接

    昇腾 MindX SDK 文档 – 昇腾社区

    昇腾 MindX SDK 示例代码仓库 – Gitee

    作者:fradeet

    物联沃分享整理
    物联沃-IOTWORD物联网 » 解决昇腾 MindX 多用户环境下 Python 导入 MxpiDataType_pb2 失败的问题

    发表回复