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”
百度一番以後,找到這篇文章:
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.dll,opencv_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。
沒有報錯後,進行文章中提到的測試,完成後就大功告成了!