MXNet gpu 版本快速安装(mxnet-cu101)

2022-11-18 17:42:55 浏览数 (2)

大家好,又见面了,我是你们的朋友全栈君。

最近有项目要用mxnet,要从头开始配置mxnet,记录一下全过程,先说下在Windows 10下的安装GPU版本的问题。

查看cuda版本

首先要查看一下自己安装 的cuda版本,一般情况下可以使用nvcc –version或nvidia-smi -q指令,比如我的是10.1版,

代码语言:javascript复制
C:UsersSpaceVision>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:UsersSpaceVision>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 FilesNVIDIA GPU Computing ToolkitCUDA下面对应的地方(同样能看到bin、include、lib目录的地方)。cuDNN安装教程上第3条说的分别复制,其实可以一起复制即可。

增加环境变量,在命令行下执行control sysdm.cpl进入系统属性,高级,环境变量,新建,变量名输入“CUDA_PATH”,变量值输入“C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.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

然后提示中可以看到相兼容的版本信息,

代码语言:javascript复制
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

后续问题

也不知道是为什么,虽然 我仔细检查了一下,各个配置都正常,但使用时还是报错,

代码语言:javascript复制
(mxgpu36) C:Usersspace>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:jenkinsworkspacemxnet-tagmxnetsrcimperative./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:UsersspaceAppDataRoamingPythonPython36site-packagesmxnetndarrayndarray.py", line 2437, in ones
    return _internal._ones(shape=shape, ctx=ctx, dtype=dtype, **kwargs)
  File "<string>", line 34, in _ones
  File "C:UsersspaceAppDataRoamingPythonPython36site-packagesmxnet_ctypesndarray.py", line 92, in _imperative_invoke
    ctypes.byref(out_stypes)))
  File "C:UsersspaceAppDataRoamingPythonPython36site-packagesmxnetbase.py", line 253, in check_call
    raise MXNetError(py_str(_LIB.MXGetLastError()))
mxnet.base.MXNetError: [16:43:31] C:Jenkinsworkspacemxnet-tagmxnetsrcimperativeimperative.cc:81: Operator _ones is not implemented for GPU.
​

这个是比较经典的,找不到mxnet-gpu版本,而只找到了mxnet cpu版本的报错。我估计是anaconda在环境设置上有什么问题,把另一个环境中的mxnet cpu版本引用到这个mxgpu36新环境中来了,或者有什么东西安装时没清理干净。

于是我卸载了mxnet,

代码语言:javascript复制
(mxgpu36) C:UsersSpaceVision>pip uninstall mxnet
Found existing installation: mxnet 1.5.0
Uninstalling mxnet-1.5.0:
  Would remove:
    c:usersspaceappdataroamingpythonpython36site-packagesdmlc_tracker*
    c:usersspaceappdataroamingpythonpython36site-packagesmxnet-1.5.0.dist-info*
    c:usersspaceappdataroamingpythonpython36site-packagesmxnet*
Proceed (y/n)? y
  Successfully uninstalled mxnet-1.5.0

然后再安装mxnet-cu101,如下,

代码语言:javascript复制
(mxgpu36) C:UsersSpaceVision>pip install mxnet-cu101
Requirement already satisfied: mxnet-cu101 in d:anaconda3envsmxgpu36libsite-packages (1.5.0)
Requirement already satisfied: requests<2.19.0,>=2.18.4 in c:usersspaceappdataroamingpythonpython36site-packages (from mxnet-cu101) (2.18.4)
Requirement already satisfied: graphviz<0.9.0,>=0.8.1 in c:usersspaceappdataroamingpythonpython36site-packages (from mxnet-cu101) (0.8.4)
Requirement already satisfied: numpy<1.17.0,>=1.8.2 in d:anaconda3envsmxgpu36libsite-packages (from mxnet-cu101) (1.16.6)
Requirement already satisfied: urllib3<1.23,>=1.21.1 in c:usersspaceappdataroamingpythonpython36site-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:usersspaceappdataroamingpythonpython36site-packages (from requests<2.19.0,>=2.18.4->mxnet-cu101) (3.0.4)
Requirement already satisfied: certifi>=2017.4.17 in c:usersspaceappdataroamingpythonpython36site-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:usersspaceappdataroamingpythonpython36site-packages (from requests<2.19.0,>=2.18.4->mxnet-cu101) (2.6)
​

测试

最后再测试一下,

代码语言:javascript复制
(mxgpu36) C:UsersSpaceVision>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

一般当时能解决问题,重启之后又会再次报错,目前这个错误有点不可思议了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/213408.html原文链接:https://javaforall.cn

0 人点赞