兩天的輾轉反側,終於靈光一現找到了錯誤。
首先,我在win10下配置好了gpu和cudnn版本的caffe。但是因為win平台的限制,caffe用的不夠舒服。因為之前用過一陣子theano,雖然很慢,但是靈活啊,於是又將矛頭指向了theano。。
theano cpu版本安裝很容易,主流方法都是利用Anaconda,方便快捷。
本文主要介紹自己搞gpu和其他人配置時的坑,希望大家可以避免。
1. 文件.theanorc.txt
這里犯了一個很傻*的錯誤。win10后綴名是隱藏的,因為之前用的是win7后綴名不隱藏,所以自從在win10上安裝了theano,此文件相當於被我命名 .theanorc.txt.txt 所以其實一個月來我就一直用的是cpu。。關鍵我還不知道文件格式都是錯的,細思恐極。。下圖正解:
2. cuda版本
之前安裝caffe的時候,我裝的是cuda8,因為我的無知,以為問題出現在cuda上,把cuda卸了,裝上了cuda7.5.以下是我遇到過的錯誤(從參考的博客中截取,因為我不想在改成錯誤的配置來演示,心痛。。):
好,這張圖的錯誤就是我一直以來的錯誤,划紅線的是主要的錯誤
我的錯因出現在了:'--compiler-bindir ''C:Program Files<x86>\Microsoft Visual Studio 12.0\VC\bin'。 這個compiler bindir 把它理解為編譯目錄
因為我的這個路徑只有:Microsoft Visual Studio 11.0
而在.theanorc.txt文件中需要寫nvcc的編譯目錄,所以網上99%的教程都是compoler_bindir=C:Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
所以我在自己的.theanorc.txt文件里這么寫:compoler_bindir=C:Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin
所以永遠都不可能正確! 一直有報錯找不到 vcvars64.bat 文件。於是我就按照博主的心路歷程找到了另一為博主和另另一位博主,按照他們所言,下載了VCForPython27.msi文件,也配置了路徑,也 找到了 vcvars64.bat文件,將它復制到了C:Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin里,但是還報錯找不到vcvars64文件。直到我幸運的遇到了另另另一位博主,他 的文章里的路徑是這樣的與眾不同:compiler_bindir = D:\software\VS2013\VC\bin。我想怎么在VS安裝的路徑下呢???我打開自己的VS安裝路徑,發現里面竟然有vcvars64.bat文 件!!!我仿佛明白了什么,這個路徑才是適合自己的!當然為什么我這么確信呢》因為我看到這么一張圖:
圖1這么寫:cuda7.5支持win10,圖2這么寫:cuda7.5在VS2013下的編譯器是Visual C++ 12.0,上面提到過了,我壓根兒在C盤沒找到啊,於是我確信這個compiler_bindir一定是這樣的:
好了,PyCharm里測試下gpu.test:
此時我的.theanorc.txt是這樣滴:
跑官網測試gpu的例子:
總算有了gpu信息了!但是還有一些不和諧的東西:CNMeM is disabled, cuDNN not availabel. 就是說cudnn還不能用,當然我還沒配置呢。
但是有以下辦法消除其他不和諧的信息: 加入[lib] cnmen=0.8 和allow_input_downcast=True
看下結果:
正確!沒有錯誤和bug了。就是cdnn還沒用。
注意不能直接在.theanorc.txt中寫:optimizer_including=cudnn,會出現如下錯誤:里面有一行:Reason=CNMEM_STATUS_OUT_OF_MEMORY
意思應該是cnmem初始化設置太大超出了內存狀態!所以在.theanorc中注意設置cnmem=0.8,如果還提示內存不夠就再往小設置,越小占內存比越少。
另外在錯誤后面還有個小hint:還可以在.theanorc中設置optimizer=fast_compile,或optimizer=None,這樣也可以讓程序正確運行。
3.配置cudnn
將cudnn下載后解壓會發現有個名為cuda的文件夾里面有三個文件:lib,include,bin。將這三個文件復制到cuda安裝目錄下進行覆蓋替換:
替換cuda原來就有的三個文件夾,這時再運行gpu測試程序,就會發現連cudnn not avaliable 也不見了。完美。
另:感謝知乎er賈峰原話:“有很多人推薦:在用戶變量中新建變量pythonpath = C:\Anaconda2\Lib\site-packages\theano; 然后被坑了一把。完全沒有必要,而且會導致spyder啟動時彈窗,kernel died等問題,這個是我親測,搞了一天。。。 ” “安裝Anaconda時,千萬別安裝Python 3.5版本的,總顯示GPU不能使用。而且千萬別安裝spyder3系列,即Anaconda4.2.0以上。而應該Python 選擇2.7,spyder選擇2系列,即Anaconda4.1.1版本及以下。原因是什么呢?因為spyder3總是不調用ipythonw.exe解釋器,而調用ipython.exe,導致theano編譯的時候,總是彈窗nvcc.exe,”
感謝另一位知乎erRednaxelaFX 的回答 : 為什么運行theano程序時總是會輸出一堆DEBUG: nvcc STDOUT mod.cu ?
首先nvcc是NVIDIA CUDA Compiler,跟Visual Studio沒啥關系。其次是那個DEBUG:提示信息是完全無害的,只是在調用nvcc編譯東西的時候輸出的信息。升級Theano的話可能就不會看到它總是打出來了。
注:以上彈窗和DEBUG這倆問題我都有,不過只是Aanconda和Theano的問題,不是錯誤,無關痛癢,我暫時也懶得折騰。最后,謝謝所有默默為大家提供疑難解答的大神!
主要參考:
手把手教你搭建深度學習平台——避坑安裝theano+CUDA
Win7 64位配置GPU版Theano與Keras詳細指南(趟坑無數,手把手教你避坑)
Converting to the new gpu back end(gpuarray)