1. 程式人生 > >Windows10下安裝Mxnet

Windows10下安裝Mxnet

剛開始是看到這篇文章https://zhuanlan.zhihu.com/p/24879716

準備開始在自己電腦上搭MXNet

按照他的步驟做,碰到了幾個問題

1. cuDNN要解壓到CUDA目錄,但是找了半天也不知道要到底要解壓到哪裡最後就沒有管

2. 裝Anaconda之前,要記得把電腦上原來的Python給解除安裝了,不然容易出現問題

3. 安裝Visual C++ Compiler Nov 2013 CTP,提示已經有了需要解除安裝,然而並沒有找到

做到第9步時,已經可以在命令列在成功訓練image-classification了。以為這次搭環境這麼簡單就成功了,然而發現自己還是太年輕了。

第10步,vs裡提示無法開啟輸入檔案“libmxnet.lib”

。在第4步時,就是直接使用了編譯好的libmxnet.lib動態連結庫,看來沒有成功。

百度一番以後,找到這篇文章:

http://blog.csdn.net/u010414386/article/details/53304177

裡面寫使用GPU版本的MXNet不推薦用直接編譯好的版本,於是我就接著按照這個文章來搭建,其中裡面開頭還馬上解決了我的第3個問題:安裝Visual C++ Compiler Nov 2013 CTP,要解除安裝”Microsoft Visual C++ 2013 Redistributable (x64)”,而且實際操作中,還要把x86的也解除安裝了,都解除安裝完後就能夠成功安裝。

我的步驟:

1.由於使用VS2013,增強vs對C++11的支援

下載安裝Visual C++ Compiler Nov 2013 CTP,

拷貝C:\Program Files (x86)\Microsoft Visual C++ Compiler Nov 2013 CTP內的檔案到C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC (都是安裝目錄下)

ps:vs2015不用這個步驟

2.CUDA,cuDNN

這兩個在之前的操作中已經下載好了,要做的就是把cudnn目錄下的bin目錄加入環境變數

CUDA版本是8.0,cuDNN版本是5.1

ps:把cuDNN解壓后里面就是一個CUDA的資料夾,別搞混了,我直接把CUDA資料夾放在了D盤下,不知道會不會出錯,在這裡寫一下防止以後忘記了,CUDA其實並沒有安裝在d盤

3.OpenBLAS

安裝文章下載mingw64_dll.zip和OpenBLAS-v0.2.14-Win64-int32.zip這兩個檔案
並建立環境變數 OpenBLAS_HOME,把openBLAS根目錄加進去 
把DLL所在目錄需要新增到環境變數path中(我理解為把mingw64_dll根目錄加入path)

4.anaconda

我已經在之前的步驟中安裝好了,需要注意的是,安裝前最好將電腦上原來的python解除安裝。這裡我也走了一點彎路,因為以前的python是手動配置的,還不知道有沒有刪乾淨。

5.mxnet

這裡完全按照文章中的步驟走

“工程裡面包含有引用資訊,記得把引用的檔案也下載下來”,這句話沒有看懂,沒管

按照步驟最後configure時,報錯,提示OpenCV_DIR-NOTFOUND,看來以前OpenCV沒有裝好?

原來是OpenCV的環境變數沒有配置好,參考文章OpenCV部分重新配置了環境變數,GO

還是會報其他錯誤,最後發現不是OpenCV的問題,而是在下載工程的時候,工程中有引用的部分,需要單獨下載!

回到工程下載的git,把引用的檔案一個個單獨下載下來,放到mxnet資料夾裡,再點configure,成功了

最後點選generate生成工程

然後開啟build目錄下的mxnet.sln,按照文中步驟進行編譯, 生成ALL_BUILD,報錯,提示無法開啟ALL_BUILD,百度後知道ALL_BUILD和ZERO_CHECK在生成後都可直接移除專案。移除後生成,報錯,無法開啟程式 dmlccore.lib,在專案屬性-配置屬性-連結器-常規 中加入附加庫目錄,仍然沒用。不知道是什麼原因。

安裝完成後,再生成,成功生成了libmxnet.lib和libmxnet.dll!將目錄加入PATH中

 6.python

按照步驟配置python,一切順利,完成了?

在思考後發現,之前使用編譯好的lib,那個檔案並沒有刪除,也就是這個測試有可能是之前的lib產生的。

我把之前編譯好的版本刪除,在測試,失敗了。。不知道什麼原因,回到cmake步驟重新做一遍,看看哪裡發生了問題

過程中沒有出現其他的問題,生成了libmxnet.lib和libmxnet.dll這兩個檔案,再次在python下配置

在import mxnet as mx時出現錯誤:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Anaconda2\lib\site-packages\mxnet-0.9.4-py2.7.egg\mxnet\__init__.py", line 7, in <module>
    from .base import MXNetError
  File "D:\Anaconda2\lib\site-packages\mxnet-0.9.4-py2.7.egg\mxnet\base.py", line 45, in <module>
    _LIB = _load_lib()
  File "D:\Anaconda2\lib\site-packages\mxnet-0.9.4-py2.7.egg\mxnet\base.py", line 37, in _load_lib
    lib = ctypes.CDLL(lib_path[0], ctypes.RTLD_GLOBAL)
  File "D:\Anaconda2\lib\ctypes\__init__.py", line 362, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126]

和之前的錯誤一樣,在http://www.cnblogs.com/wacc/p/6096785.html這篇文章中作者也提到了這個錯誤,他提到我們缺少的dll檔案有三個:

libopenblas.dllopencv_world300.dll 和 opencv_core2413.dll

其中第一個可以在OpenBLAS中找到,第二個可以再OpenCV中找到(注意是64位V12下的),

將他們複製到D:\Anaconda2\Lib\site-packages\mxnet-0.9.4-py2.7.egg\mxnet目錄下,並將這個目錄加入PATH

第三個dll在這兩個地方都沒有找到,最後載了一個opencv2.14.3版本,在這裡面找到了。

第一次做完後發現還是不成功,多次試驗後發現,要先python setup.py install,再把三個檔案放進去,最後import mxnet。

沒有報錯後,進行文章中提到的測試,完成後就大功告成了!