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

 

後續問題

也不知道是爲什麼,雖然 我仔細檢查了一下,各個配置都正常,但使用時還是報錯,

(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

一般當時能解決問題,重啓之後又會再次報錯,目前這個錯誤有點不可思議了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章