1. 程式人生 > >Win7(64位)+VS2013+cuda7.5環境下搭建深度學習Caffe計算框架

Win7(64位)+VS2013+cuda7.5環境下搭建深度學習Caffe計算框架

     0、前言

            經過一個星期,在查閱了很多網路資源(例如歐新宇薛開宇大神等)後,終於在不斷摸索中,找到適合了自己電腦配置【Win7(64)+VS2013+cuda7.5】的Caffe教程。感謝happynear大神[]、小鹹魚_前輩[],這兩位前輩的部落格給了我非常大的幫助,尤其是,happynear的部落格會關注官網最新動態,不斷更新上傳的原創Github原始碼,且非常有愛的貼出親手製作的第三方庫以及已經轉換好的MNIST的leveldb資料檔案,解決了困惑我好幾天的關於如何配置boost、snappy等依賴庫的問題,讓我這枚門外小菜鳥以最簡潔明瞭的方式成功編譯Caffe,對他們的無私付出表示衷心的感謝,我會繼續關注並學習他們以及更多前輩的優秀博文。

             我在自己小本本上跑通了深度學習Caffe框架經典的MNIST測試集,灰常雞凍。【如圖1所示】在經過4000次的迭代後,正確率為0.9911。證實,我的Caffe框架搭建完成,且各種配置無誤。


圖1 Win7(64位)下MNIST測試結果

            終於跑通MNIST,我想做些這幾天來的搭建Caffe記錄,以便今後的學習。內容是以本機配置:Win7(64位)+Visual Studio 2013+OpenCV3.1.0(點選詳見)+CUDA 7.5(配置CUDA,點選詳見)+Python 2.7.0+筆記本自帶顯示卡:NVDIA FeForce 610M(【計算機>>屬性>>裝置管理器>>顯示介面卡】即可檢視,注意安裝NVDIA驅動)為基礎,轉載了happynear及小鹹魚_的部分博文,儘量忠於原文,並在他們的基礎上,關於我的安裝時候出現的問題做些整理。(我本人整合了二位的內容,並儘可能認真地給出了自己出現的常見問題、相應解決方法,圖1-10都是本人的工程截圖。因此恬不知恥的標了原創

二字,若本文引文中的任一原作者認為此舉不妥,請務必與我聯絡立刻修改。捂臉==)

         不多說了,本文內容如下

一、準備

  happynear的Windows下的caffe原始碼:https://www.github.com/happynear/caffe-windows。有happynear親手製作的第三方庫http://pan.baidu.com/s/1bSzvKa,在原始碼的根目錄下建立個3rdparty資料夾,把檔案解壓進去就可以了。解壓好之後,要將3rdparty/bin資料夾新增到環境變數的PATH(計算機>>屬性>>高階系統設定>>系統屬性>>環境變數【如圖2所示】),這樣才能讓程式找到這些第三方庫的dll。

在第三方庫包中還提供了openblas的庫檔案。

  

圖2 新增環境變數3rdparty/bin

二、編譯

  編譯非常簡單,分為以下幾步:
  1、雙擊./src/caffe/proto/extract_proto.bat批處理檔案來生成caffe.pb.hcaffe.pb.cc兩個c++檔案,和caffe_pb2.py這個Python使用的檔案。
  2、開啟./buildVS2013/MainBuilder.sln,開啟之後切換編譯模式至Release X64模式。如果開啟之後顯示載入失敗,可能你的CUDA版本和我不一致,我的是CUDA 7.5版,這時就要用記事本開啟./buildVS2013目錄下各個資料夾內的.vcxproj檔案,搜尋CUDA 7.5,把這個7.5換成你自己的CUDA版本,就可以正常打開了。

        3、右鍵caffe專案,

        a.修改附加包含目錄

                C/C++ >> 常規>>附加包含目錄>>修改如下(CUDA路徑按自己的修改)【如圖3、4所示】

圖3 附加包含目錄

圖4 修改附加包含目錄

        b.修改附加庫目錄
                連結器 >> 常規>>附加庫目錄修改如下(CUDA路徑按自己的修改)【如圖5、6所示】:

圖5 附加庫目錄

圖6 修改附加庫目錄


           設定好之後,右鍵解決方案,重新生成。倘若,編譯結束後會出現失敗**個,因為你可能沒有配置matlab介面和python介面,所以這些編譯失敗。我使用的是python介面【如圖4、6所示】。如果需要matlab介面,可參考小鹹魚_的博文設定(路徑按自己的設定),

     4、另外,如果你的顯示卡比較老或者沒有顯示卡,請使用./build_cpu_only/MainBuilder.sln

  5、點上邊工具欄中的綠色三角編譯吧。編譯大概需要半小時左右,請耐心等待。
  
  如果要用matlab wrapper來提取特徵、觀察訓練好的權重的話呢,只需要把matcaffe專案裡面的matlab目錄修改成你自己的,然後編譯,你就能從matlab/+caffe/private資料夾裡面找到一個叫caffe_.mexw64的檔案啦。
  python的wrapper類似,把pycaffe專案裡的python目錄改成你自己的(happynear用的是Anaconda),就能在python/caffe資料夾中生成_caffe.pyd的python dll檔案。

三、測試

  到 http://pan.baidu.com/s/1mgl9ndu 下載已經轉換好的MNIST的leveldb資料檔案,解壓至./examples/mnist資料夾中,然後執行根目錄下的run_mnist.bat即可開始訓練,訓練日誌會儲存在./log資料夾中,以INFO開頭,txt格式的日誌檔案中。

ps:如果你編譯成功的話,不要忘了給happynear大神的github工程點個star!
star

四、常見問題

        我在做MNIST資料集測試時,遇到了以下問題:

問題1:cudnn_conv_layer.cpp: Check failed:status==CUDNN_STATUS_SUCCESS<6 vs. 0>
      CUDNN_STATUS_ARCH_MISMATCH

*********check failure stack trace:***************

            解決:執行caffe訓練時,提示以上錯誤:簡單講就是GPU的加速效能不夠,CUDNN只支援CUDA Capability 3.0以上的GPU加速。因為我筆記本上的GeForce 610M的CUDA Capability是2.1,而官方的cudnn加速是不支援3.0以下的版本的。於是, 我是在度娘上找到了這個連結,方法可行且操作性強。在每個專案點選右鍵【屬性>>C/C++>>所有選項>>前處理器定義>>編輯,每個專案都去掉:USE_CUDNN,重新執行以下即可(再次強調,每個專案必須都檢查務必確認刪除USE_CUDNN)。【如圖7、8所示】

圖7 前處理器

圖8 前處理器刪除USE_CUDNN

            問題2:im2col.cu         Check failed :error == cudaSuccess<8 vs. 0> invalid device function
                              ****Check failure stack trace:**********

            解決:報錯提示的是: invalid device function,則需要修改CUDA C/C++選項下的Device。在每個專案點選右鍵【屬性>>CUDA C/C++>>Device>>Code Generation>>編輯,添上compute_20,sm_20,重新執行以下即可(再次強調,每個專案必須都檢查務必確認添上compute_20,sm_20)。詳見這個連結。另外要注意檢查NVIDIA顯示卡的驅動是否與CUDA的版本匹配,不匹配就儘量更新NVIDIA的顯示卡驅動。【如圖9、10所示】

圖9 CUDA Device

圖 10 修改CUDA Device

         至此,本文完。再次感謝Caffe前輩們的熱心分享,使我順利搭建Caffe。

         我很慶幸能夠得到幫助,收穫了順利解決問題的成就感。感嘆“網路資源是無限”之餘,大神們的嚴謹博學、不斷探究、樂於無私地分享傳遞他們的所知所得更讓我敬佩。學海無涯,他們是我努力前行的榜樣。

參考網址