安装
Pip安装
Q: 使用pip安装时报错: ERROR: mindspore_{VERSION}.whl is not a supported wheel on this platform
应该怎么办?
A: pip会通过wheel安装包的文件名来判断该安装包是否与当前Python环境兼容,例如安装mindspore_ascend-1.2.0-cp37-cp37m-linux_aarch64.whl时,pip会检查:
当前python环境为3.7.x版本
当前操作系统为Linux
操作系统架构为arm64
因此,如果出现 is not a supported wheel on this platform
问题,请检查当前环境是否满足MindSpore安装要求,以及该MindSpore安装包版本是否正确。
Q: macOS系统源码编译后使用pip安装报错: ERROR: mindspore-{VERSION}.whl is not a supported wheel on this platform
应该怎么办?
A: 首先检查output目录下编译得到的安装包名,类似mindspore-1.6.0-cp37-cp37m-macosx_11_1_x84_64.whl。包名中“11_1”的意思是编译时使用的SDK版本是11.1。如果使用的SDK版本为11.x,则可能是因为编译时使用的SDK版本过高导致无法安装。
解决方法一:可以重命名安装包后再尝试安装,例如将上述安装包重命名为mindspore-1.6.0-cp37-cp37m-macosx_10_15_x84_64.whl。
解决方法二:在源码编译前,设置环境变量MACOSX_DEPOLYMENT_TARGET
为10.15
并重新编译。
Q: 使用pip安装时报错: SSL:CERTIFICATE_VERIFY_FATLED
应该怎么办?
A: 在pip安装命令后添加参数 --trusted-host=ms-release.obs.cn-north-4.myhuaweicloud.com
重试即可。
Q: MindSpore对Protobuf版本是否有特别要求?
A: MindSpore默认安装Protobuf的3.13.0版本,如果不是该版本,在使用pytest测试代码时日志中会产生很多告警,建议您使用命令pip install protobuf==3.13.0
重新安装3.13.0版本。
Q: 使用pip安装时报错ProxyError(Cannot connect to proxy)
,应该怎么办?
A: 此问题一般是代理配置问题,Ubuntu环境下可通过export http_proxy={your_proxy}
设置代理;Windows环境可以在cmd中通过set http_proxy={your_proxy}
进行代理设置。
Q: 使用pip安装时提示错误,应该怎么办?
A: 请执行pip -V
查看是否绑定了Python3.7+。如果绑定的版本不对,建议使用python3.7 -m pip install
代替pip install
命令。
Q: 使用pip安装依赖库时提示No matching distribution found for XXX
错误,应该怎么办?
A: 请执行pip config list
,查看当前软件库索引路径index-url
。某些情况下,软件库索引会出现更新滞后,可尝试设置其它软件库索引路径。
Q: MindSpore网站安装页面找不到MindSpore Insight和MindSpore Armour的whl包,无法安装怎么办?
A: 您可以从MindSpore网站下载地址下载whl包,通过pip install
命令进行安装。
Q: pip同时安装MindSpore CPU和GPU版本,import时报错 cannot import name 'context' from 'mindspore'
,应该怎么办?
A: MindSpore不同版本的安装目录名同为mindspore
,安装在同一个Python环境可能产生目录相互覆盖问题,导致无法使用,如果需要使用多平台版本的MindSpore时(例如同时使用CPU和GPU版本),请先卸载其他版本再安装新版本。
Q: 在ARM架构的环境上使用pip安装MindSpore时报错: Could not find a version that satisfies the requirement
应该怎么办?
A: 大概率是因为pip版本低于19.3,无法识别manylinux2014
标签,导致pip install阶段下载了错误版本的numpy
或scipy
等python软件包,进而引发了无法找到构建依赖的问题,请执行pip install --upgrade pip
将环境中的pip升级到19.3以上,重新安装MindSpore。
Q: pip安装MindSpore时,报错 Running setup.py install for pillow: finished with status 'error' ... The headers or library files could not be found for jpeg, ...
,应该怎么办?
A: MindSpore依赖三方库pillow
进行部分的数据处理操作,而pillow
需要依赖环境上已经安装libjpeg
库,以Ubuntu环境为例,可以使用sudo apt-get install libjpeg8-dev
来安装libjpeg
库,然后再安装MindSpore。
Q: ARM版macOS在Python3.8环境中编译的mindspore包安装后执行报错 ImportError: dlopen ... no suitable image found. Did find:..._psutil_osx.cpython-38-darwin.so: mach-o, but wrong architecture
怎么办?
A: ARM版macOS上的Python3.8包含的psutil无法正确识别当前系统的架构,会自编译为适配x86架构的二进制,因此出现冲突问题。如果在Conda环境则执行pip uninstall psutil; conda install psutil
,如果在非Conda环境中则执行pip uninstall psutil; pip install --no-binary :all: psutil
以正确安装psutil。
具体原因可以参照该stackoverflow帖子。
Q: ARM版macOS在安装MindSpore时,安装依赖库scipy报错 error: metadata-generation-failed
怎么办?
A: 对应ARM版macOS的scipy在pypi源的版本仅适配MacOS 12以上版本的操作系统,低版本操作系统会自动下载scipy源码包进行编译,大概率会遇到编译失败问题。如果使用Conda环境,建议执行pip uninstall scipy; conda install scipy
,MacOS 11系统强烈建议使用Conda以规避类似的兼容性问题。
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这个文件。解决方法就是目录重命名或者向上退出一级或者多级目录。
Docker安装
Q: MindSpore是否支持Nvidia GPU独立显卡+Windows操作系统的个人电脑?
A: 目前MindSpore支持的情况是GPU+Linux与CPU+Windows的组合配置,Windows+GPU的支持还在开发中。 如果希望在GPU+Windows的环境上运行,可以尝试使用WSL+docker的方式,操作思路:
以WSL方式安装起Ubuntu18.04,参考Install Linux on Windows with WSL。
安装支持WSL的Nvidia驱动以及在WSL运行容器的环境部署,参考CUDA on WSL User Guide。
由于CUDA on WSL还是预览特性,注意参考链接里对Windows版本要求的说明,版本不够的需要做升级。
参考Docker镜像,取MindSpore-GPU镜像。如取MindSpore1.0.0版本容器,在WSL Ubuntu18.04中执行
docker pull mindspore/mindspore-gpu:1.0.0
运行容器:docker run -it --runtime=nvidia mindspore/mindspore-gpu:1.0.0 /bin/bash
详细步骤可以参考社区提供的实践张小白教你安装Windows10的GPU驱动(CUDA和cuDNN)。 在此感谢社区成员张辉的分享。
卸载
Q: 如何卸载MindSpore?
A: 首先请确定MindSpore的全称,例如gpu版本的MindSpore,可以执行命令pip uninstall mindspore-gpu
进行卸载。
环境变量
Q: 一些常用的环境变量设置,在新启动的终端窗口中需要重新设置,容易忘记应该怎么办?
A: 常用的环境变量设置写入到~/.bash_profile
或 ~/.bashrc
中,可让环境变量设置在新启动的终端窗口中立即生效。
Q: 使用GPU版本MindSpore时,如何设置DEVICE_ID
环境变量?
A: MindSpore GPU模式一般无需设置DEVICE_ID
环境变量,MindSpore会根据cuda环境变量CUDA_VISIBLE_DEVICES
,自动选择可见的GPU设备。设置CUDA_VISIBLE_DEVICES
环境变量后,则DEVICE_ID
环境变量代表可见GPU设备的下标:
执行
export CUDA_VISIBLE_DEVICES=1,3,5
后,DEVICE_ID
应当被设置为0
,1
或2
,若设置为3
及以上,MindSpore会由于设备ID不合法而运行失败。
Q: 编译应用时报错/usr/bin/ld: warning: libxxx.so, needed by libmindspore.so, not found
怎么办?
A: 寻找缺少的动态库文件所在目录,添加该路径到环境变量LD_LIBRARY_PATH
中。
Q: 运行应用时出现ModuleNotFoundError: No module named 'te'
怎么办?
A: 首先确认环境安装是否正确,te
、topi
等whl包是否正确安装。如果用户环境中有多个Python版本,如Conda虚拟环境中,需ldd name_of_your_executable_app
确认应用所链接的libpython3.so
是否与当前Python路径一致,如果不一致需要调整环境变量LD_LIBRARY_PATH
顺序,例如
export LD_LIBRARY_PATH=`python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))"`:$LD_LIBRARY_PATH
将当前的python
命令对应程序的运行库路径加入到LD_LIBRARY_PATH
的最前面。
安装验证
Q: MindSpore的GPU版本对设备的计算能力有限制吗?
A: 目前MindSpore仅支持计算能力大于5.3的设备。
Q: 个人电脑CPU环境安装MindSpore后验证代码时报错: the pointer[session] is null
,具体代码如下,该如何验证是否安装成功呢?
import numpy as np
import mindspore as ms
import mindspore.ops as ops
ms.set_context(device_target="Ascend")
x = ms.Tensor(np.ones([1,3,3,4]).astype(np.float32))
y = ms.Tensor(np.ones([1,3,3,4]).astype(np.float32))
print(ops.add(x,y))
A: 验证安装是否成功,可以参照对应版本的安装指南页面中 验证是否成功安装
段落的描述:
python -c "import mindspore;mindspore.run_check()"
如果输出:
MindSpore version: 版本号
The result of multiplication calculation is correct, MindSpore has been installed successfully!
说明MindSpore安装成功了。
Q: Linux
平台下执行用例的时候会报错sh:1:python:not found
或者由于链接到了Python2.7的版本中而报错No module named mindspore._extends.remote
,该怎么处理?
A: 遇到类似的问题,大多是由于Python的环境问题,可以通过如下方式检查Python环境是否是MindSpore运行时所需要的环境。
在终端窗口中输入
python
,检查以下进入Python交互环境中的版本信息,如果直接报错则是没有Python的软连接;如果进入的是非Python3.7版本的环境,则当前Python环境不是MindSpore运行所需要的。执行
sudo ln -sf /usr/bin/python3.7.x /usr/bin/python
创建Python的软连接,然后再检查执行。
Q: 在脚本中import mindspore
之前import了其他三方库,提示如下错误(/{your_path}/libgomp.so.1: cannot allocate memory in static TLS block
)该怎么解决?
A: 上述问题较为常见,当前有两种可行的解决方法,可任选其一:
交换import的顺序,先
import mindspore
再import其他三方库。执行程序之前先添加环境变量(
export LD_PRELOAD=/{your_path}/libgomp.so.1
),其中{your_path}
是上述报错提示的路径。
Q: 运行MindSpore时出现告警 UserWarning: The value of the smallest subnormal for <class 'numpy.float64'> type is zero.
应该怎么解决?
A: 上述问题出现在安装了较新版本的numpy(>=1.22.0)版本的ARM python3.9环境上。告警来自numpy而非MindSpore。如果告警影响到了代码的正常调测,可以考虑手动安装较低版本的numpy(<=1.21.2)来规避。
Q: 运行MindSpore时出现报错 AttributeError: module 'six' has no attribute 'ensure_text'
应该怎么解决?
A: 上述问题的原因是环境安装了较新版本的asttokens
(>=2.0.6),其依赖的six
版本不匹配。更新six
版本(>=1.12.0)即可解决。