前言本系列文章前面部分是對CNTK的基本使用做一些介紹,從本篇文章開始,我們將共同的去研究CNTK的內部實現和一些針對于特殊項目的定制化修改(自定義DataReader等)。 本篇文章所涉及的CNTK開發環境,指的是CNTK代碼的實現,而非具使用CNTK進行體深度學習的生產程序開發環境。 做一個廣告,筆者認為,機器學習領域中工具的使用比工具的實現更加重要,筆者有計劃去針對其他項目做一些使用上的介紹,例如微軟提供的Machine Learning Studio以及“牛津計劃”等,敬請期待筆者的其他系列文章。 獲取CNTK的源代碼作為微軟的開源項目,微軟已經將CNTK的代碼放到Github上,下面是地址, 當然可以直接clone下來微軟的代碼 但是筆者個人建議大家不要直接拉代碼而是先fork到自己的賬戶下后clone自己的CNTK版本庫。 筆者建議fork到自己賬戶下在clone的原因是,CNTK作為一個開源項目,大家是可以共同貢獻的代碼的。難免在使用中遇到些小bug,順手修了的同時提交給微軟一個pull request。是否突然感覺自己參與了開源社區的建設而感覺略微良好呢? 準備工作CNTK依賴于如下幾項內容, 所以需要用戶先將其部署好后才可以執行CNTK工具包的編譯。CNTK其實包括2個版本,一個是“onlyCPU”的版本,另外一個是使用“GPU”的版本。兩者編譯工作先前的環境準備不是很相同。 同時作為機器學習領域的微軟開源項目,支持多平臺將大大豐富其發展空間,CNTK目前支持Windows及Linux,但是筆者目前只有Windows環境,只能以Windows環境舉例。下面是所需要的列表:
之前有講過,CNTK分兩個版本,onlyCPU版本和GPU版本。如果只需要編譯onlyCPU版本,那些龐大的Nvidia相關的庫則可以不用部署。這些Nvida相關的庫中,CUDA和CUB都可以隨意下載,但是對于cuDNN這個庫,正規的獲取方式需要申請NVidia Accelerated-Computing的開發賬戶(申請是免費的,但是需要等幾天時間審批下來),當然也應該有其他渠道獲取。 Visual Studio 2013Visual Studio 2013 這個就不細說如何獲取了。建議更新Update到5。 BoostBoost庫CNTK官方給出的指導版本是1.59.0,可以自己下載源碼編譯,也可以直接下載編譯好的。(編譯boost庫真的需要時間和空間,真的建議直接下載編譯好的版本)
Boost庫安裝后需要設定兩個環境變量,BOOST_INCLUDE_PATH和BOOST_LIB_PATH分別用于指定boost庫的include目錄和lib目錄。
ACML/MKLACML是AMD的數學庫,MKL是Intel的數學庫,兩者CNTK都支持,選擇一個即可,默認CNTK支持的是ACML,如果使用MKL則需要在編譯的時候在Math工程中定義USE_MKL這個宏。 使用ACMLACML需要使用5.3.1以上,切記,一定要下載下載ifort64的windows版本,地址如下:
安裝ACML后,需要手動設定環境變量ACML_PATH用于指定ACML的安裝位置:
同時如果是Intel CPU并支持FMA3,則建議設置環境變量ACML_FMA=0去避免一些問題。
使用MKLMKL可以通過如下地址獲取,再提醒一下使用MKL需要為Math工程定義USE_MKL宏: MS-MPIMS-MPI是一個好東西,他其實是微軟HPC高性能計算的一部分,CNTK中通過它來實現多設備多進程的并行計算,借此來體現出CNTK的速度快等優點。詳細的介紹請移步下面的站點:
目前CNTK中需要使用的MS-MPI v7下載地址如下:
CUDACUDA ToolkitCNTK中需要使用CUDA來調用GPU對計算進行加速,所以需要部署CUDA,微軟給出的指導說明是使用7.0版本的,但是筆者目前使用的是7.5暫時沒有遇到什么問題,預計官方也會在未來一段時間升級上去。CUDA請通過如下地址進行下載。 默認安裝完成CUDA后,安裝包會自動設置環境變量,可以自行檢查下是否有如下兩條環境變量存在,如果沒有請手動添加。
NVidia CUB 1.4.1NVidia CUB這個一定要使用1.4.1版本,筆者嘗試使用1.5.x版本但是沒有成功過。有關CUB的相關資料可以通過如下鏈接獲取: NVidia CUB 1.4.1可以通過如下地址下載: 下載后解壓至一個地方然后設置環境變量CUB_PATH來指向CUB庫。
NVidia CUDA Deep Neural Network librarycuDNN是NVidia特殊為深度神經網絡所實現的一套算法庫,目前主流的深度學習的工具包都或多或少的使用cuDNN來對學習以及訓練過程進行加速。如需獲取cuDNN,需要注冊Nvida Accelerated-Computing的開發賬戶。cuDNN的官方主頁如下: CNTK的wiki上也給出了一個rc版本的下載地址,可以直接下載:
解壓后如同CUB一樣,需要設定一個環境變量CUDNN_PATH用于指明cuDNN的路徑。
編譯CNTK在完成上述準備工作后,即可打開工程文件編譯CNTK。 編譯完成后可在 如果需要從Visual Studio中調試或者
上面的內容是一行,有點長,針對于CNTK中提供的其他Sample,可自行修改路徑并執行即可,建議第一次運行的時候使用 至此,CNTK開發環境搭建完成。 已知的問題及解決方案使用CUDA 7.5CNTK工程中,默認配置使用的都是CUDA 7.0版本,如果有一些需要使用CUDA 7.5,則需要手動修改配置文件。需要修改的地方有3點,都是在各個工程的
最后的修改情況可以參考下圖: 使用的是cuDNN v4.0 prod版本有些可能使用的是v4.0 prod版本,如果是之前fork過的CNTK工程可能有編譯報錯的情況,主要因為cuDNN v4.0從rc到prod的改變中,修改了一個函數的原型,增加了幾個參數。可以自行pull一下最新的CNTK工程,目前已經能夠兼容rc以及prod兩者。下面內容是節選的一段有關cuDNN升級的資料和原因。
運行時報錯api-ms-win-core-path-l1-1-0.dll缺失CNTK在2016-3-24前的幾個版本中,由于混入了一些Win8特有的代碼,會導致Win7下提示報錯。這種情況下請pull下最新的CNTK工程,確保 總結本文作為CNTK從入門到深入研究的過度,講解了如何部署CNTK開發環境等內容,讀者應該可以正常的編譯CNTK并研究其實現方法。筆者將繼續的去研究CNTK的實現方法,有計劃先從自定義的DataReader入手,希望能夠為國內研究深度學習的學生或專家學者提供一些便利。 |
|