大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。
技术上主攻前端开发、鸿蒙开发和AI算法研究。
努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧
Conda安装
Q: Ascend硬件平台,在个人的Conda环境中,有时候出现报错RuntimeError: json.exception.parse_error.101 parse error at line 1, column 1: syntax error while parsing value - invalid literal; last read: 'T'
,该怎么处理?
A: 出现这种类型的报错,大概率是run包更新后个人的Conda环境中没有更新te或topi或hccl工具包,可以将当前Conda环境中的上述几个工具包卸载,然后使用如下命令再重新安装: pip install /usr/local/Ascend/ascend-toolkit/latest/lib64/{te/topi/hccl}-{version}-py3-none-any.whl
。
Source安装
Q: 编译时bash -p方式和 bash -e方式的区别?
A: MindSpore Serving的编译和运行依赖MindSpore,Serving提供两种编译方式: 一种指定已安装的MindSpore路径,即bash -p {python site-packages}/mindspore/lib
,避免编译Serving时再编译MindSpore;另一种,编译Serving时,编译配套的MindSpore,Serving会将-e、-V和-j选项透传给MindSpore。 比如,在Serving目录下,bash -e ascend -V 910 -j32
:
首先将会以bash -e ascend -V 910 -j32
方式编译third_party/mindspore目录下的MindSpore;
其次,编译脚本将MindSpore编译结果作为Serving的编译依赖。
Q: MindSpore安装: 版本0.6.0-beta + Ascend 910 + Ubuntu_aarch64 + Python3.7.5,手动下载对应版本的whl包,编译并安装gmp6.1.2。其他Python库依赖已经安装完成,执行样例失败,报错显示找不到so文件。
A: libdatatransfer.so动态库是fwkacllib/lib64目录下的,请先在/usr/local目录查找到这个库所在的路径,然后把这个路径加到LD_LIBRARY_PATH环境变量中,确认设置生效后,再执行。
Q: 在Linux中已经安装了交叉编译工具,但是编译命令要怎么写呢?
A: arm64版本编译: bash build.sh -I arm64;arm32版本编译: bash build.sh -I arm32;注意要先设置环境变量,指定Android NDK路径: export ANDROID_NDK=/path/to/android-ndk,编译成功后,在output目录可以找到编译出的包。
Q: 源码编译MindSpore过程时间过长,或时常中断该怎么办?
A: MindSpore通过submodule机制引入第三方依赖包,其中Protobuf依赖包(v3.13.0)下载速度不稳定,建议您提前进行包缓存。
Q: 源码编译时,报错MD5 does not match,应该怎么办?
A: 这种报错可能是在编译的时候由于网络问题导致一些第三方库下载中断,之后重新编译的时候,该文件已经存在但是不完整,在校验MD5的时候失败。解决方法是: 删除.mslib缓存路径中的相关第三方库,然后重新编译。
Q: 环境上安装了Python3.7.5,环境变量设置正确,编译MindSpore时仍然报错Python3 not found,应该怎么办?
A: 可能是因为当前环境上的Python未包含动态库。编译MindSpore需要动态链接Python库,因此需要使用开启动态库编译选项的Python3.7.5,即在源码编译Python时使用./configure --enable-shared命令。
Q: 如何改变第三方依赖库安装路径?
A: 第三方依赖库的包默认安装在build/mindspore/.mslib目录下,可以设置环境变量MSLIBS_CACHE_PATH来改变安装目录,比如 export MSLIBS_CACHE_PATH = ~/.mslib。
Q: 编译失败后,应该清理哪些路径以确保上次失败的编译结果不会影响到下一次编译?
A: 在编译MindSpore时,如果:
-
第三方组件下载或编译失败,例如icu4c的patch动作失败返回错误信息Cmake Error at cmake/utils.cmake:301 (message): Failed patch:,则进入编译目录下的build/mindspore/.mslib目录,或由MSLIBS_CACHE_PATH环境变量指定的第三方软件安装目录,并删除其中的对应软件。
-
其他阶段编译失败,或打算删除上一次编译结果,完全重新编译时,直接删除build目录即可。
Q: 编译时报错,打开CMakeError.txt提示pthread找不到怎么办?
A: 真正的失败原因会体现在打屏的日志里,CMakeError.txt无参考价值,请寻找打屏日志中的第一个报错。
Q: 编译成功后,运行时报错undefined reference to XXXX或undefined symbol XXXX怎么办?
A: 可能的原因有:
如果问题是git pull更新代码后出现,请删除掉build文件夹,排除前次构建的影响。
如果问题是修改代码后出现,可以使用c++filt XXXX查看该符号的意义,有可能是函数未实现、虚函数未实现、依赖未链接等原因引起。
如果问题发生在Ascend平台,排除上述原因后,很可能是由于MindSpore版本与CANN版本不匹配引起的,版本匹配关系参考安装说明。
Q: 编译完成时告警,SetuptoolsDeprecationWarning: setup.py install is deprecated ...怎么办?
A: Python的setuptools组件从58.3.0版本宣布放弃直接调用setup.py的使用方式,因此在安装了较高版本的setuptools的Python环境中源码编译时会遇到类似告警。该告警暂不影响MindSpore的使用,我们将在后续的版本中更换打包方式。 详情可以参照setuptools版本记录
Q: MindSpore要求的配套软件版本与Ubuntu默认版本不一致怎么办?
A: 当前MindSpore只提供版本配套关系,需要您手动进行配套软件的安装升级。(注明: MindSpore要求Python3.7.5和gcc7.3,Ubuntu 16.04默认为Python3.5和gcc5,Ubuntu 18.04默认自带Python3.7.3和gcc7.4)。
Q: 执行用例报错No module named 'mindpore.version',应该怎么办?
A: 当有这种报错时,有可能是在创建了和MindSpore安装包相同名字的路径中执行用例,导致Python导入包的时候优先找到了当前目录下,而当前目录没有version.py这个文件。解决方法就是目录重命名或者向上退出一级或者多级目录。