久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    CNTK從入門到深入研究(7)

     imelee 2016-12-29

    前言

    本系列文章前面部分是對CNTK的基本使用做一些介紹,從本篇文章開始,我們將共同的去研究CNTK的內部實現和一些針對于特殊項目的定制化修改(自定義DataReader等)。

    本篇文章所涉及的CNTK開發環境,指的是CNTK代碼的實現,而非具使用CNTK進行體深度學習的生產程序開發環境。

    做一個廣告,筆者認為,機器學習領域中工具的使用比工具的實現更加重要,筆者有計劃去針對其他項目做一些使用上的介紹,例如微軟提供的Machine Learning Studio以及“牛津計劃”等,敬請期待筆者的其他系列文章。

    獲取CNTK的源代碼

    作為微軟的開源項目,微軟已經將CNTK的代碼放到Github上,下面是地址,

    https://github.com/Microsoft/CNTK/

    當然可以直接clone下來微軟的代碼

    Git clone https://github.com/Microsoft/cntk

    但是筆者個人建議大家不要直接拉代碼而是先fork到自己的賬戶下后clone自己的CNTK版本庫。
    這里寫圖片描述

    筆者建議fork到自己賬戶下在clone的原因是,CNTK作為一個開源項目,大家是可以共同貢獻的代碼的。難免在使用中遇到些小bug,順手修了的同時提交給微軟一個pull request。是否突然感覺自己參與了開源社區的建設而感覺略微良好呢?

    準備工作

    CNTK依賴于如下幾項內容, 所以需要用戶先將其部署好后才可以執行CNTK工具包的編譯。CNTK其實包括2個版本,一個是“onlyCPU”的版本,另外一個是使用“GPU”的版本。兩者編譯工作先前的環境準備不是很相同。

    同時作為機器學習領域的微軟開源項目,支持多平臺將大大豐富其發展空間,CNTK目前支持Windows及Linux,但是筆者目前只有Windows環境,只能以Windows環境舉例。下面是所需要的列表:

    • Visual Studio 2013 with Update 5 (筆者目前在Update 4環境下,目前也沒遇到奇怪的問題)>
    • Boost (建議是1.59.0,但是之后的版本也可)
    • ACML或者是MKL (如果是ACML要求5.3.1以上版本,或者使用MKL,筆者環境使用ACML雖然是Intel的CPU)
    • MS-MPI v7或者以上
    • NVidia CUDA 7.0(筆者的開發環境為7.5,如果是7.5則還需要修改一些文件內容)
    • NVidia CUB 1.4.1
    • NVidia cuDNN 4.0(rc或者prod版本都可以目前)
    • (可選)OpenCV(CNTK中ImageReader使用的)
    • (可選)zlib和libzip(也是ImageReader使用的,ImageReader支持直接從一個zip文件自動解壓加載圖片)

    之前有講過,CNTK分兩個版本,onlyCPU版本和GPU版本。如果只需要編譯onlyCPU版本,那些龐大的Nvidia相關的庫則可以不用部署。這些Nvida相關的庫中,CUDA和CUB都可以隨意下載,但是對于cuDNN這個庫,正規的獲取方式需要申請NVidia Accelerated-Computing的開發賬戶(申請是免費的,但是需要等幾天時間審批下來),當然也應該有其他渠道獲取。

    Visual Studio 2013

    Visual Studio 2013 這個就不細說如何獲取了。建議更新Update到5。

    Boost

    Boost庫CNTK官方給出的指導版本是1.59.0,可以自己下載源碼編譯,也可以直接下載編譯好的。(編譯boost庫真的需要時間和空間,真的建議直接下載編譯好的版本)

    http:///projects/boost/files/boost-binaries/1.59.0/boost_1_59_0-msvc-12.0-64.exe/download

    Boost庫安裝后需要設定兩個環境變量,BOOST_INCLUDE_PATH和BOOST_LIB_PATH分別用于指定boost庫的include目錄和lib目錄。

    BOOST_INCLUDE_PATH=c:\local\boost_1_59_0
    BOOST_LIB_PATH=c:\local\boost_1_59_0\lib64-msvc-12.0

    ACML/MKL

    ACML是AMD的數學庫,MKL是Intel的數學庫,兩者CNTK都支持,選擇一個即可,默認CNTK支持的是ACML,如果使用MKL則需要在編譯的時候在Math工程中定義USE_MKL這個宏。

    使用ACML

    ACML需要使用5.3.1以上,切記,一定要下載下載ifort64的windows版本,地址如下:

    http://developer./tools-and-sdks/archive/amd-core-math-library-acml/acml-downloads-resources/

    安裝ACML后,需要手動設定環境變量ACML_PATH用于指定ACML的安裝位置:

    ACML_PATH=C:\AMD\acml5.3.1\ifort64_mp

    同時如果是Intel CPU并支持FMA3,則建議設置環境變量ACML_FMA=0去避免一些問題。

    ACML_FMA=0

    使用MKL

    MKL可以通過如下地址獲取,再提醒一下使用MKL需要為Math工程定義USE_MKL宏:

    https://software.intel.com/en-us/intel-mkl

    MS-MPI

    MS-MPI是一個好東西,他其實是微軟HPC高性能計算的一部分,CNTK中通過它來實現多設備多進程的并行計算,借此來體現出CNTK的速度快等優點。詳細的介紹請移步下面的站點:

    https://msdn.microsoft.com/en-us/library/bb524831(v=vs.85).aspx

    目前CNTK中需要使用的MS-MPI v7下載地址如下:

    https://www.microsoft.com/en-us/download/details.aspx?id=49926

    CUDA

    CUDA Toolkit

    CNTK中需要使用CUDA來調用GPU對計算進行加速,所以需要部署CUDA,微軟給出的指導說明是使用7.0版本的,但是筆者目前使用的是7.5暫時沒有遇到什么問題,預計官方也會在未來一段時間升級上去。CUDA請通過如下地址進行下載。

    https://developer./cuda-toolkit-70

    默認安裝完成CUDA后,安裝包會自動設置環境變量,可以自行檢查下是否有如下兩條環境變量存在,如果沒有請手動添加。

    CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0
    CUDA_PATH_V7_0=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0

    NVidia CUB 1.4.1

    NVidia CUB這個一定要使用1.4.1版本,筆者嘗試使用1.5.x版本但是沒有成功過。有關CUB的相關資料可以通過如下鏈接獲取:

    http://nvlabs./cub/

    NVidia CUB 1.4.1可以通過如下地址下載:

    https://github.com/NVlabs/cub/archive/1.4.1.zip

    下載后解壓至一個地方然后設置環境變量CUB_PATH來指向CUB庫。

    CUB_PATH=c:\cub-1.4.1

    NVidia CUDA Deep Neural Network library

    cuDNN是NVidia特殊為深度神經網絡所實現的一套算法庫,目前主流的深度學習的工具包都或多或少的使用cuDNN來對學習以及訓練過程進行加速。如需獲取cuDNN,需要注冊Nvida Accelerated-Computing的開發賬戶。cuDNN的官方主頁如下:

    https://developer./cuDNN

    CNTK的wiki上也給出了一個rc版本的下載地址,可以直接下載:

    http://developer.download./compute/redist/cudnn/v4/cudnn-7.0-win-x64-v4.0-rc.zip

    解壓后如同CUB一樣,需要設定一個環境變量CUDNN_PATH用于指明cuDNN的路徑。

    CUDNN_PATH=C:\NVIDIA\cudnn-4.0\cuda

    編譯CNTK

    在完成上述準備工作后,即可打開工程文件編譯CNTK。
    CNTK的編譯有兩種onlyCPU以及GPU(GPU就是普通的Debug或者Release的),根據情況,可以在Visual Studio中選擇后,工程商點擊鼠標右鍵后Build Project即可。
    完整的build過程應該不會出現任何錯誤。筆者Rebuild了一下工程結果如下:
    這里寫圖片描述

    編譯完成后可在C:\Users\liuxz\Git\CNTK\x64\Debug或者里找到執行程序。可以將該目錄添加至PATH以便執行。

    如果需要從Visual Studio中調試或者Ctrl+F5 執行的話,可以設置CNTK為啟動工程,并屬性->Debugging->配置運行的命令(Command Arguments)即可,可以參考如下格式。

    configFile=$(SolutionDir)Examples\Other\Simple2d\Config\Simple.cntk RootDir=$(SolutionDir)Examples\Other\Simple2d currentDirectory=$(SolutionDir)Examples\Other\Simple2d

    上面的內容是一行,有點長,針對于CNTK中提供的其他Sample,可自行修改路徑并執行即可,建議第一次運行的時候使用Ctrl+F5 因為如果在Debug模式下訓練網絡,花費的時間真的十分的久。下圖為執行結果。
    這里寫圖片描述

    至此,CNTK開發環境搭建完成。

    已知的問題及解決方案

    使用CUDA 7.5

    CNTK工程中,默認配置使用的都是CUDA 7.0版本,如果有一些需要使用CUDA 7.5,則需要手動修改配置文件。需要修改的地方有3點,都是在各個工程的.vcxproj文件中,可以使用類似NodePad++去做這種批量替換。

    1. cublas64_70.dll;cusparse64_70.dll;curand64_70.dll;cudart64_70.dll; 這幾個dll的名稱替換為cublas64_75.dll;cusparse64_75.dll;curand64_75.dll;cudart64_75.dll;
    2. 替換CUDA 7.0.targetsCUDA 7.5.targets

    最后的修改情況可以參考下圖:
    這里寫圖片描述

    使用的是cuDNN v4.0 prod版本

    有些可能使用的是v4.0 prod版本,如果是之前fork過的CNTK工程可能有編譯報錯的情況,主要因為cuDNN v4.0從rc到prod的改變中,修改了一個函數的原型,增加了幾個參數。可以自行pull一下最新的CNTK工程,目前已經能夠兼容rc以及prod兩者。下面內容是節選的一段有關cuDNN升級的資料和原因。

    UPDATES SINCE RELEASE CANDIDATE 
    The API of cudnnBatchNormalizationBackward has been changed to include an additional set of scaling parameters (alphaParamsDiff and betaParamsDiff) applied to the dBnScaleResult and dBnBiasResult outputs of the function.
    The prior restriction of batch size 512 in all Batch Normalization routines has been removed.
    Numerical stability and performance of cudnnBatchNormalizationBackward in some cases has been improved.
    Performance of cudnnConvolutionBackwardFilter when using Algo 1 has been improved for some cases. This code path now also requires a workspace.
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    運行時報錯api-ms-win-core-path-l1-1-0.dll缺失

    CNTK在2016-3-24前的幾個版本中,由于混入了一些Win8特有的代碼,會導致Win7下提示報錯。這種情況下請pull下最新的CNTK工程,確保Source/Common/File.cpp 已經更新到Re commit because master is too old 這個commit。具體的修正情況可以參考下面的鏈接:

    https://github.com/Microsoft/CNTK/pull/237

    總結

    本文作為CNTK從入門到深入研究的過度,講解了如何部署CNTK開發環境等內容,讀者應該可以正常的編譯CNTK并研究其實現方法。筆者將繼續的去研究CNTK的實現方法,有計劃先從自定義的DataReader入手,希望能夠為國內研究深度學習的學生或專家學者提供一些便利。

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 亚洲国产精品成人无码区| 最爽无遮挡行房视频| 日韩国产精品无码一区二区三区| 国精品无码一区二区三区在线蜜臀| 2019亚洲午夜无码天堂| 欧美老少配性行为| 国产真实乱人偷精品人妻| 久爱www人成免费网站| 国产性色的免费视频网站| 久久狠狠高潮亚洲精品| 亚洲色大成网站WWW永久麻豆| 无码人妻一区二区三区四区AV| 亚洲国产成人久久久网站| 40岁大乳的熟妇在线观看| 人妻AV中文字幕一区二区三区| 国产精品中文av专线| 亚洲AV无码专区亚洲AV桃 | 人人澡人摸人人添| 亚洲AV永久无码一区| 亚洲精品一区二区天堂| 亚洲精品无码AV人在线播放| 国产高清在线男人的天堂| 国内精品久久久久久久影视麻豆| 亚洲人成电影在线天堂色| 欧美老熟妇XB水多毛多| 亚洲欧美人成网站在线观看看| 久久精品国产亚洲AV忘忧草18| 国产福利在线观看免费第一福利| 久久精品中文闷骚内射| 人人超人人超碰超国产| 久久一区二区中文字幕| AAA级久久久精品无码片| 韩国三级在线 中文字幕 无码| 中文文字幕文字幕亚洲色| 强奷乱码中文字幕| 久久这里有精品国产电影网| 中文字幕亚洲无线码在线一区| 久久亚洲道色宗和久久| 亚洲天堂精品一区二区| 亚洲精品成人片在线观看精品字幕| 肉感饱满中年熟妇日本|