MXNet gpu 版本快速安装(mxnet-cu101)
最近有项目要用mxnet,要从头开始配置mxnet,记录一下全过程,先说下在Windows 10下的安装GPU版本的问题。
查看cuda版本
首先要查看一下自己安装 的cuda版本,一般情况下可以使用nvcc --version或nvidia-smi -q指令,比如我的是10.1版,
C:\Users\SpaceVision>nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:12:52_Pacific_Daylight_Time_2019
Cuda compilation tools, release 10.1, V10.1.243
C:\Users\SpaceVision>nvidia-smi -q
# nvidia-smi -q
==============NVSMI LOG==============
Timestamp : Sun Jun 14 21:19:39 2020
Driver Version : 432.00
CUDA Version : 10.1
........
总体安装步骤
简要介绍一下总体的实际安装步骤。注意这里VS不是必须的,但通常我电脑里都是装好了的。
1、安装Microsoft Visual Studio
在https://visualstudio.microsoft.com/downloads/下载并安装最新的Community版
2、安装Nvida cuda-toolkit
在https://developer.nvidia.com/cuda-downloads下载并安装最新版的CURD,我安装的是10.1版
3、安装cuDNN
在https://developer.nvidia.com/cudnn下载cuDNN。注意这要注册登录才能下载,比较麻烦,但只有耐心一步一步去注册和登录了。
下载后,将其解压,将其中的三个文件夹复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\下面对应的地方(同样能看到bin、include、lib目录的地方)。cuDNN安装教程上第3条说的分别复制,其实可以一起复制即可。
增加环境变量,在命令行下执行control sysdm.cpl进入系统属性,高级,环境变量,新建,变量名输入“CUDA_PATH”,变量值输入“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1”(实际的安装路径)。
4、安装Mxnet GPU
一般情况下,我使用的都是anaconda,这时创建一个环境,比如名称为mxnet36,然后用命令 conda activate mxnet36 切换到该环境中再安装mxnet-cu101。其命令为, pip install mxnet-cu101
5、测试
在python中import mxnet,如果没有出错,即大功告成。当然还可以进一步在gpu上创建nd数组,打印确认是否是在GPU上创建的。
注意上面的CUDA、cuDNN、Mxnet gpu都安装的是101版,我没有测试过不同版本号是否兼容。教程上要求VS的版本是2015或2017,我实际安装的是2019,没有问题。
安装Mxnet GPU
我最初使用conda install mxnet-gpu,发现安装的是cudatoolkit9.0,然后到 https://anaconda.org/anaconda/mxnet-gpu/files 看了一下,发现mxnet-gpu并没有太多的版本可以选择。当然, 如果这个版本和你的驱动版本正好相符,倒能省不少事,cudnn什么的都会配套给你装好。
因为版本我的驱动器的不相符,最后只能放弃。回过头来再用下面的指令安装, pip install mxnet-cu101
安装cudatoolkit+cudnn
吸取刚才的教训,这次直接指定版本号,
conda install -c anaconda cudatoolkit=10.1
当然,后续还要安装 cudnn(参考:https://anaconda.org/anaconda/cudnn),这次可以不用指定版本号,
conda install -c anaconda cudnn
然后提示中可以看到相兼容的版本信息,
The following packages will be downloaded:
package | build
---------------------------|-----------------
cudnn-7.6.5 | cuda10.1_0 250.4 MB anaconda
------------------------------------------------------------
Total: 250.4 MB
The following NEW packages will be INSTALLED:
cudnn anaconda/win-64::cudnn-7.6.5-cuda10.1_0
补充一点在Ubuntu碰到的情况,在已经安装cudatoolkit10.1的情况下,conda install -c anaconda cudnn居然会把10.1版本卸载掉,然后硬生生装上cudatoolkit10.2和cudnn7.6.5,这种情况在windows下没有碰到过,解决办法是一次性强行指定安装,如下,
conda install -c anaconda cudatoolkit=10.1 cudnn
后续问题
也不知道是为什么,虽然 我仔细检查了一下,各个配置都正常,但使用时还是报错,
(mxgpu36) C:\Users\space>python
Python 3.6.10 |Anaconda, Inc.| (default, May 7 2020, 19:46:08) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import mxnet as mx
>>> mx.gpu
<function gpu at 0x0000014FFFF22840>
>>> import mxnet.ndarray as nd
>>> a = nd.ones(shape=(2,3),dtype='int32',ctx=mx.gpu(0))
[16:43:31] c:\jenkins\workspace\mxnet-tag\mxnet\src\imperative\./imperative_utils.h:91: GPU support is disabled. Compile MXNet with USE_CUDA=1 to enable GPU support.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\space\AppData\Roaming\Python\Python36\site-packages\mxnet\ndarray\ndarray.py", line 2437, in ones
return _internal._ones(shape=shape, ctx=ctx, dtype=dtype, **kwargs)
File "<string>", line 34, in _ones
File "C:\Users\space\AppData\Roaming\Python\Python36\site-packages\mxnet\_ctypes\ndarray.py", line 92, in _imperative_invoke
ctypes.byref(out_stypes)))
File "C:\Users\space\AppData\Roaming\Python\Python36\site-packages\mxnet\base.py", line 253, in check_call
raise MXNetError(py_str(_LIB.MXGetLastError()))
mxnet.base.MXNetError: [16:43:31] C:\Jenkins\workspace\mxnet-tag\mxnet\src\imperative\imperative.cc:81: Operator _ones is not implemented for GPU.
这个是比较经典的,找不到mxnet-gpu版本,而只找到了mxnet cpu版本的报错。我估计是anaconda在环境设置上有什么问题,把另一个环境中的mxnet cpu版本引用到这个mxgpu36新环境中来了,或者有什么东西安装时没清理干净。
于是我卸载了mxnet,
(mxgpu36) C:\Users\SpaceVision>pip uninstall mxnet
Found existing installation: mxnet 1.5.0
Uninstalling mxnet-1.5.0:
Would remove:
c:\users\space\appdata\roaming\python\python36\site-packages\dmlc_tracker\*
c:\users\space\appdata\roaming\python\python36\site-packages\mxnet-1.5.0.dist-info\*
c:\users\space\appdata\roaming\python\python36\site-packages\mxnet\*
Proceed (y/n)? y
Successfully uninstalled mxnet-1.5.0
然后再安装mxnet-cu101,如下,
(mxgpu36) C:\Users\SpaceVision>pip install mxnet-cu101
Requirement already satisfied: mxnet-cu101 in d:\anaconda3\envs\mxgpu36\lib\site-packages (1.5.0)
Requirement already satisfied: requests<2.19.0,>=2.18.4 in c:\users\space\appdata\roaming\python\python36\site-packages (from mxnet-cu101) (2.18.4)
Requirement already satisfied: graphviz<0.9.0,>=0.8.1 in c:\users\space\appdata\roaming\python\python36\site-packages (from mxnet-cu101) (0.8.4)
Requirement already satisfied: numpy<1.17.0,>=1.8.2 in d:\anaconda3\envs\mxgpu36\lib\site-packages (from mxnet-cu101) (1.16.6)
Requirement already satisfied: urllib3<1.23,>=1.21.1 in c:\users\space\appdata\roaming\python\python36\site-packages (from requests<2.19.0,>=2.18.4->mxnet-cu101) (1.22)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\users\space\appdata\roaming\python\python36\site-packages (from requests<2.19.0,>=2.18.4->mxnet-cu101) (3.0.4)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\space\appdata\roaming\python\python36\site-packages (from requests<2.19.0,>=2.18.4->mxnet-cu101) (2020.4.5.2)
Requirement already satisfied: idna<2.7,>=2.5 in c:\users\space\appdata\roaming\python\python36\site-packages (from requests<2.19.0,>=2.18.4->mxnet-cu101) (2.6)
测试
最后再测试一下,
(mxgpu36) C:\Users\SpaceVision>python
Python 3.6.10 |Anaconda, Inc.| (default, May 7 2020, 19:46:08) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import mxnet as mx
>>> import mxnet.ndarray as nd
>>> a = nd.ones(shape=(2,3),dtype='int32',ctx=mx.gpu(0))
>>> print(a.shape, a.dtype, a.size, a.context)
(2, 3) <class 'numpy.int32'> 6 gpu(0)
>>>
OK,大功告成。
附:Anaconda弄错环境的原因分析
这个分析起来比较麻烦,目前没有头绪,anaconda用久了,怪异的现象还真不少。我另外开了一贴,在这里
https://blog.csdn.net/tanmx219/article/details/106794021
供参考。
附:使用时碰到的numpy的版本问题
尽管我已经装了正确的版本,但使用时还是经常碰到,
mxnet 1.5.0 has requirement numpy<1.17.0,>=1.8.2, but you'll have numpy 1.18.5 which is incompatible.
我按照
pip install -U numpy==1.16.6
一般当时能解决问题,重启之后又会再次报错,目前这个错误有点不可思议了。