最近需要用到MXNET这个库,第一次接触CUDA和MXNET这些,摸索着终于完成了配置,中间遇到如下BUG,记录下来解决方法和安装流程以供参考。
(1)import mxnet时出现:OSError: [WinError 126] 找不到指定的模块。
(2)安装CUDA时不识别显卡,提示:This graphics driver could not find compatible graphics hardware
(3)测试MXNET时,输入语句提示:Upgrade advisory: this mxnet has been built against cuDNN lib version 7300, which is older than the oldest version tested by CI (7600)
首先确定你的电脑是英伟达的显卡,因为CUDA只支持英伟达系列显卡,AMD的不行。
这些环境对版本的要求很高!切记CUDA、CUDNN、MXNET的版本需要匹配!如果没有要求的话可以按照我的版本来!
一、安装
1.安装Anaconda
见我上一篇博客https://blog.csdn.net/qq_40574708/article/details/107181522
2.安装VS2015
VS2015有三个版本:
社区版(Community)、专业版(Professional)、企业版(Enterprise)
通常我们只需要用社区版就可以了,免费的,足够我们使用。
社区版下载地址:http://download.microsoft.com/download/B/4/8/B4870509-05CB-447C-878F-2F80E4CB464C/vs2015.com_chs.iso
下载过后是一个.iso文件,有的朋友说需要安装虚拟光驱才可以打开,但是我并没有安装就可以使用…所以如果你和我一样,下载过后双击就可以如下图一样打开,就直接安装就可以了。如果不行的话,就装一个虚拟光驱吧。
运行这个.exe文件,进入安装界面,等待它初始化后在选择安装模式前一路next就好,由于怕出什么幺蛾子,安装位置我选择的默认,在选择工具处需要注意以下,如果你只需要C++编程,那么只需要勾选C++就好了,下面的web编程如果需要的话再勾选,当然如果你空间足够大,全选也没什么问题。
然后等待其安装就好。注意安装完成后有两个vs2015,其中一个是blend for vs2015,不要用这个…这个是干啥的我也不知道,但是我知道你需要的是vs2015。
3.安装CMAKE
下载地址:www.cmake.org
我安装的是最新的版本3.17,如果没有别的需求的话你也可以安装这个版本,可以用的。安装CMAKE没有什么好说的,安装过程中记得勾选上添加环境变量,然后一路NEXT即可。
4.安装CUDA10.0
下载地址:https://developer.nvidia.com/cuda-downloads
依次选择好操作系统等选项,按照我所选的(深绿色)选项选择好,先不要点下面的下载,默认下载是最新的CUDA版本,不过我们要安装的是CUDA10.0,点击图片最下面一行的最右边的按钮–历史版本。
点击下载我鼠标所指的CUDA10.0,切记版本很重要,如果你没有别的需求的话安装10.0,我已经试过啦。
然后等待其下载,下载好后打开,下图这个是资源临时提取位置,默认就好,提取安装完成后,这个位置的临时提取的文件会清除掉的。
注意如果你安装的CUDA版本比较旧,比如我一开始安装的CUDA8.0,可能会出现显卡不识别的问题,因为有的电脑厂商会给显卡做一些特殊的硬件编号,导致低版本的CUDA安装程序不识别。所以我推荐安装CUDA10.0,如果你有别的需求,必须要安装低版本的,而又出现显卡不匹配的情况,需要在此处做一些操作,后文“BUG解决“模块会给出方法。
然后等待其提取,文件比较多,需要好一会儿。
直到出现这个界面,点击同意。
然后点击自定义安装,因为我们有一些东西是不需要的。
然后安装组件如图这样选择,因为下面的两个组件一般情况下我们是有的,不需要重新安装了。
然后下一步,选择位置,我是一路默认。
5.安装CUDNN
请注意这个版本的匹配也很重要,选择不好的话会影响MXNET和CUDA,所以还是那句话,可以按我的版本来。
下载地址:https://developer.nvidia.com/rdp/cudnn-download
这里需要注册一个英伟达账号,注册就是了。
点击下面鼠标所指的历史版本:
往下翻,找到鼠标所指的7.3.1for CUDA10.0这个版本,点击下载
下载完成后是一个压缩包,解压后是这个样子,我们需要把目录下的bin、include以及lib目录中的文件拷贝到相应的cuda安装目录中的bin、include和lib目录中去,我的CUDA安装目录是默认的C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0,如果你更改了,需要复制到对应的你选择的安装位置。
注意是复制文件夹下的文件,而不是文件夹!这三个文件夹bin,include,lib中各有一个文件,一共三个文件。其中lib下有一个x64的子目录,再打开这个子目录,需要复制的是文件cudnn.lib
然后将解压后的cudnn目录下的bin目录加到PATH环境变量里去。
6.安装MXNET
我们要安装的是GPU版本的MXNET,安装CPU版本的是用pip install mxnet这个命令。
安装GPU版本的如下:
打开cmd,在anaconda中新建一个环境,具体操作可以百度。
然后在cmd中输入”activate 环境名“,进入到环境中。
接着输入命令:
注意此处的mxnet-cu100是表示对应的CUDA版本为CUDA10.0,如果你安装的是CUDA8,就要改成mxnet-cu80。另外如果你安装的是CUDA10.1,那么mxnet也有个版本是mxnet-cu101,但是其他小版本貌似没有这样子。这里命令后边的网址是用的豆瓣的源,下载比较快,要不然要等好半天。
pip install --pre mxnet-cu100 -i https://pypi.douban.com/simple
然后等待其下载安装完成。
完成后测试一下是否安装成功:
还是在刚才的cmd界面,在你创建的环境下输入”python“,运行python,然后输入如下语句:
import mxnet as mx
a = mx.nd.ones(1)
b = mx.nd.ones(1,mx.gpu())
a.asnumpy()
b.asnumpy()
如果结果如下,那恭喜你安装成功了。
但是此处如果版本不对的话,在import mxnet语句会出现OSError: [WinError 126] 找不到指定的模块。
或者在运行b = mx.nd.ones(1,mx.gpu())时,出现错误Upgrade advisory: this mxnet has been built against cuDNN lib version 7300, which is older than the oldest version tested by CI (7600)
这都是版本不对的问题,在下文给予解释。
6.安装完成
二、BUG解决
1.安装CUDA时不识别显卡,提示:This graphics driver could not find compatible graphics hardware
这是错误界面,借用一张别人的错误图。
我的电脑是华硕天选,显卡是2060,华硕在出厂时应该是给这块显卡做了一些单独的配置,所以其硬件号不被低版本的CUDA安装程序所识别,所以我安装了CUDA10.0,是可以识别的,如果你需要安装低版本的,请参考:
https://blog.csdn.net/jacke121/article/details/78960658
https://tieba.baidu.com/p/3105785379?red_tag=2608527661
https://tieba.baidu.com/p/5778946954
最快捷的方法还是安装高版本CUDA…
2.import mxnet时出现:OSError: [WinError 126] 找不到指定的模块。
这是由于CUDA和MXNET版本不匹配的原因。比如你安装的是CUDA10.1,但是安装MXNET时输入的是mxnet-cu100,那么就会造成版本不匹配。
通过查找DLL文件你会发现,其DLL文件需要的版本是不匹配的,但是DLL文件属实不好替换,所以不如重新安装版本匹配的CUDA和MXNET来的方便。
参考:
https://discuss.gluon.ai/t/topic/8390/13
往下翻,这个兄弟的话点醒了我。
所以我选择卸载不匹配版本的CUDA和MXNET,重新安装CUDA10.0和mxnet-cu100。
3.测试MXNET时,输入语句提示:Upgrade advisory: this mxnet has been built against cuDNN lib version 7300, which is older than the oldest version tested by CI (7600)
这是由于CUDNN和MXNET版本不匹配造成的。而且它不仅仅是错误提示,GPU也不会运行的。
提示信息意思是:”这个mxnet是根据cuDNN lib 7300版本构建的,该版本比CI(7600)测试的最旧版本旧。“
所以懂了,MXNET是通过旧版本的CUDNN7.3系列构建的,而你的CUDNN版本太新了,所以你需要下载旧版本的CUDNN,这个比较好解决,下载旧版本的CUDNN,再把那几个文件复制到对应CUDA安装目录就好了,见安装步骤所述。
————————————————————————————————
鸽了好久没写东西,这段时间一直在忙考试。考试完该写论文了…这个假期必须要写一篇出来。跌跌撞撞两天才安装好了这套配置…版本匹配真的很重要,要不出的错误都不好找原因。个人建议按照这个版本配置来,亲测可用。