在 Windows 上設定 CNTK
如果您想要使用 Visual Studio 2017 從 Windows 上的原始程式碼手動建置 CNTK,此頁面就適合您。
如果您要尋找任何其他支援來設定 CNTK 建置環境,或在您的系統上安裝 CNTK,您應該改為 前往這裡 。
注意
此頁面假設您嘗試建置 CNTK 的主要分支。
64 位 OS
CNTK 需要 64 位 Windows 安裝。 我們已在 Windows 8.1、Windows 10 和 Windows Server 2012 R2 和更新版本上測試建置程式。 未正式支援其他環境。 如需相容性問題,請檢查 CNTK 生產組建和測試組態。
環境變數和元件
在您的系統上建置 CNTK 需要各種環境變數的定義和設定。 您可以在 此頁面找到 Windows 組建 CNTK 所使用的環境變數概觀。 此外,此頁面提供建置 CNTK 的必要元件和選擇性元件 概觀,以及其預設安裝位置。
Visual Studio 2017
安裝 Microsoft Visual Studio 2017 for Windows。 您可以 在這裡找到下載的連結。
Visual Studio 2017 社群版本足以建置 CNTK。
在安裝程式期間,請選取 [通用 Windows 平臺開發]、[.NET 桌面開發]、[使用 C++進行桌面開發] 和 [Python 開發] 工作負載:
此外,在個別元件畫面上,請確定您將 'VC++ 2017 15.4 版 v14.11 工具組' 和 'Visual C++ runtime for UWP' 新增至您的安裝:
最後,新增 'Windows 10 SDK (10.0.16299.0) for Desktop C++ [x86 和 x64]':
預先存在的 Visual Studio 2017 安裝
您必須在系統上安裝 'VC++ 2017 15.4 v14.11 toolset'、'Visual C++ runtime for UWP' 和 'Windows 10 SDK (10.0.16299.0) for Desktop C++ [x86 和 x64]' 。 若要檢查開啟 Windows 「主控台 - 程式 - >> 程式和功能」,然後從已安裝的程式清單中選取 [Visual Studio Community 2017]。 這會再次啟動 Visual Studio 安裝程式,並可讓您確定系統上已安裝上述元件, (請參閱上方的圖片) 。
注意
如果 VS2017INSTALLDIR
Visual Studio 安裝程式未設定環境變數,請手動設定。 確切的安裝目錄取決於 2017 (2017 版 ,在此案例中) ,並根據下列模式 提供 (Community、 Enterprise等) : C:\Program Files (x86)\Microsoft Visual Studio\<version>\<offering>
。
針對 Visual Studio 2017 Enterprise 版本,請執行:
setx VS2017INSTALLDIR "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise"
針對 Visual Studio 2017 Community 版本,請執行:
setx VS2017INSTALLDIR "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community"
Git
需要 Git 才能使用 CNTK 程式碼基底。 您可以使用下列工具:
Git for Windows。 這是 Git 的標準命令列用戶端,我們將在此頁面上用來描述 CNTK 存放庫中的登記。
Git 用戶端是 Visual Studio 2017 安裝的一部分。 閱讀有關使用內建 Git 用戶端的 Microsoft 應用程式生命週期管理 部落格文章。
在 CNTK GitHub 存放庫中登記
我們假設您已安裝 適用于 Windows 的 Git。 我們假設您在 Git 安裝程式中使用預設選項來安裝 Git (特別是 [從 Windows 命令提示字元使用 Git],並在 [設定行尾點] 提示字元中選取 [簽出 Windows 樣式,認可 UNIX 樣式行尾結束符]。
在 c:\repos\cntk
目錄中建立 CNTK 原始程式碼的複本。 如果您偏好不同的位置,則必須據以調整命令。
開啟標準 Windows 命令殼層,然後執行這些命令
c: && md \repos && cd \repos
git clone --recursive https://github.com/Microsoft/cntk
cd cntk
這會將標準組建所需的所有原始程式碼放入您的系統上。 如果您打算修改 CNTK 程式碼,您應該閱讀 開發和測試的相關資訊。
子模組 Multiverso 可用來啟用 DataParallelASGD 以進行定型。 如果您不需要 DataParallelASGD 支援,請將環境變數新增CNTK_ENABLE_ASGD,並將其值設定為 false。 例如,在 CMD 提示字元中執行此動作,然後重新開啟 CMD 殼層, () 和 Visual Studio 以挑選變更:
setx CNTK_ENABLE_ASGD false
MKL
預設 CNTK 數學程式庫是 Intel 數學核心程式庫, (Intel MKL) 。 遵循 此頁面 進行安裝
MKL-DNN
下載 MKL-DNN 來源,並使用 MKL_PATH 作為目標路徑來建置。 檢查在 Windows 上安裝 MKL-DNN 中的組建指示
將環境變數
MKL_PATH
設定為目錄,例如:
setx MKL_PATH c:\local\mklml-mkldnn-0.14
MS-MPI
從 此下載頁面安裝版本 7 (7.0.12437.6) microsoft MPI (MS-MPI) ,只標示為頁面標題中的「第 7 版」。 按一下 [下載] 按鈕,然後同時選取 msmpisdk.msi
和 MSMpiSetup.exe
。
提升
請遵循下列步驟,在您的系統上安裝 Boost 程式庫 :
- 下載並安裝 Boost 1.60 版 (您需要
msvc-14.0
從 Sourceforge 上的這個 下載位置) 二進位檔。 - 將環境變數
BOOST_INCLUDE_PATH
設定為 Boost 安裝,例如:
setx BOOST_INCLUDE_PATH c:\local\boost_1_60_0-msvc-14.0
- 將環境變數
BOOST_LIB_PATH
設定為 Boost 程式庫,例如:
setx BOOST_LIB_PATH c:\local\boost_1_60_0-msvc-14.0\lib64-msvc-14.0
- 若要將 Boost 測試架構整合到 Visual Studio 中,您可以從 Visual Studio 資源 庫安裝 Boost 測試的執行器。
Protobuf
您需要針對 CNTK 編譯的 Protobuf 3.1.0 版本。 您可以自行編譯此版本,或使用已 (預先編譯) 準備的 Protobuf 3.1.0 版 (,) 。 如果您想要在系統上建置適用于 CNTK 的 Protobuf 程式庫,您可以在這裡找到詳細資料
從這個位置下載包含 CNTK 之 Protobuf 預先編譯版本的 ZIP 檔案
將封存解壓縮到本機磁片上的資料夾,例如 , C:\local\protobuf-3.1.0-vs15
以及設定指向該位置的環境變數 PROTOBUF_PATH
,例如:
setx PROTOBUF_PATH c:\local\protobuf-3.1.0-vs15
GPU 特定套件
本節概述您需要設定的套件,讓 CNTK 利用 NVIDIA GPU。
如果您不打算搭配 CNTK 使用任何 GPU,而且只依賴 CPU,您可以直接跳到 下一個一般區段。 否則,請繼續進行 此頁面。
設定指向該位置的環境變數 CUDNN_PATH
,例如:
setx CUDNN_PATH C:\local\cudnn-9.0-v7.0\cuda
設定指向該位置的環境變數 CUB_PATH
,例如:
setx CUB_PATH c:\local\cub-1.7.4\
選擇性。 SWIG。
如果您想要利用 Python 中的 CNTK,您必須安裝 SWIG。 SWIG 也需要建置 C#/.NET 或 JAVA) (CNTK 評估程式庫。
請從此網站下載版本 SWIG 3.0.10
。
將封存解壓縮到本機磁片上的資料夾,例如 , C:\local\swigwin-3.0.10
以及設定指向該位置的環境變數 SWIG_PATH
,例如:
setx SWIG_PATH C:\local\swigwin-3.0.10
快速安裝檢查:如果您遵循上述指示並使用相同的路徑,命令 dir C:\local\swigwin-3.0.10\swig.exe
將會成功並顯示一個檔案。
選擇性。 OpenCV
CNTK 2.2 需要安裝OpenCV 電腦視覺 (OpenCV) ,但 CNTK 2.3 是選擇性的。 請遵循 此頁面 以取得進一步的步驟。
設定指向 OpenCV 組建資料夾的環境變數 OPENCV_PATH_V31
,例如
setx OPENCV_PATH_V31 c:\local\Opencv3.1.0\build
快速安裝檢查:如果您遵循上述指示並使用相同的路徑,命令 dir C:\local\Opencv3.1.0\build
將會成功。
選擇性。 zlib 和 libzip
如果您打算建置 CNTK 影像讀取器 ,則需要 zlib 和 libzip 程式庫。
zlib 和 libzip
ZLib 和 LibZip 會以原始程式碼散發,您必須重新編譯這些套件,您也可以使用我們建立的先行編譯版本,方便您 (本節所述) 所述。 若要自行建置程式庫,您可以在這裡找到詳細的指示
從這個位置下載包含 libzip/zlib 壓縮程式庫預先編譯版本的 ZIP 檔案
將封存解壓縮到本機磁片上的資料夾,例如 , C:\local\zlib-vs15
以及設定指向該位置的環境變數 ZLIB_PATH
,例如:
setx ZLIB_PATH c:\local\zlib-vs15
快速安裝檢查:如果您遵循上述指示並使用相同的路徑,命令 dir C:\local\zlib-vs15\bin
將會成功並顯示幾個 DLL。
選擇性。 Anaconda Python 安裝
如果您打算使用 Python 支援建置 CNTK,如果您尚未這麼做,請安裝 SWIG 。 此外,您將需要 Python 環境。 我們使用 Anaconda Python 進行預設 Python 安裝。
如果您沒有 Anaconda 安裝:安裝適用于 Windows 的 Anaconda Python。
您可以遵循安裝程式中指定的標準組態, (InstallationType=JustMe;AddToPath=No;RegisterPython=No) 。 在下列程式中,我們假設您已將 Python Anaconda3 4.1.1
安裝到 C:\local\Anaconda3-4.1.1-Windows-x86_64
。
選擇性。 CNTK UWP 組建
注意
CNTK 2.1 版的新功能。
如果您想要建置適用于 UWP 的 CNTK 評估程式庫,您必須遵循 這裡所述的其他安裝步驟。
CNTK Python 環境
CNTK 支援 Python 2.7、Python 3.5 和 Python 3.6。 建議您在 Python 安裝中建立專用的環境,以使用 CNTK。 如此一來,CNTK 和已安裝的支援套件不會影響任何其他 Python 專案。 我們提供數個檔案 (yml
-files) 包含必要 Python 套件的描述。 套件位於 scripts\install\windows
CNTK 複製品內的目錄中。 請選取符合您目標 Python 版本的檔案。
Python 版本 | 檔案名稱 |
---|---|
Python 2.7 | conda-windows-cntk-py27-environment.yml |
Python 3.5 | conda-windows-cntk-py35-environment.yml |
Python 3.6 | conda-windows-cntk-py36-environment.yml |
例如,我們在名為 cntk-py35
的環境中建立 Python 3.5 環境。 如果您想要不同的環境名稱,請據以調整下列步驟。 如果您想要建立 Python 2.7 或 Python 3.6 環境,請調整 YML 的名稱,以符合您要使用的 Python 版本。
下列假設您已將 CNTK 原始程式碼從 GitHub 複製到 目錄 c:\repos\cntk
。
- 若要建立新的 conda 環境 (例如
cntk-py35
) 並加以啟用,請從 Windows 命令殼層執行下列命令:
cd C:\local\Anaconda3-4.1.1-Windows-x86_64\scripts
conda env create --file c:\repos\cntk\scripts\install\windows\conda-windows-cntk-py35-environment.yml --name cntk-py35
activate C:\local\Anaconda3-4.1.1-Windows-x86_64\envs\cntk-py35
如果您有環境 (例如 cntk-py35
,) 您可以使用下列命令,以最新的必要套件進行更新:
cd C:\local\Anaconda3-4.1.1-Windows-x86_64\scripts
conda env update --file c:\repos\cntk\scripts\install\windows\conda-windows-cntk-py35-environment.yml --name cntk-py35
activate C:\local\Anaconda3-4.1.1-Windows-x86_64\envs\cntk-py35
適用于 Python 的 CNTK 環境變數
開始建置 CNTK 並建置適用于 CNTK 的 Python 程式庫之前,您需要設定/定義環境變數 CNTK_PY.._PATH
和 PYTHONPATH
CNTK_PY.._PATH
設定 Python 環境的建置環境變數 (至少選擇一個套用) :
setx CNTK_PY36_PATH [paths for your Python 3.6 environment]
setx CNTK_PY35_PATH [paths for your Python 3.5 environment]
setx CNTK_PY27_PATH [paths for your Python 2.7 environment]
如果您到目前為止遵循安裝,這表示
setx CNTK_PY35_PATH C:\local\Anaconda3-4.1.1-Windows-x86_64\envs\cntk-py35
、 CNTK_PY35_PATH
或 CNTK_PY27_PATH
環境變數的值 CNTK_PY36_PATH
可以藉由在 中執行來決定conda ..activate cmd.exe [name-or-path-of-your-environment]
PYTHONPATH
PYTHONPATH
會設定 Python 將尋找要匯入之模組的位置路徑。 如果您建置 CNTK,您必須將建置程式的輸出路徑新增至此環境變數。 如果您將 CNTK c:\repos\cntk
複製到此,將會是
setx PYTHONPATH c:\repos\cntk\bindings\python;%PYTHONPATH%
選擇性。 Java
若要建置 CNTK 評估程式庫的 JAVA 系結,如果您尚未這麼做,請安裝 SWIG 工具 。 此外,需要 JAVA 開發工具組 (JDK) 。 目前我們使用 64 位 JDK 8 (JDK 1.8.0_131) 。
設定環境變數JAVA_HOME指向 JAVA 安裝的目錄。 下列設定假設您已將 JDK 1.8.0_131 安裝至 C:\local\jdk1.8.0_131:
setx JAVA_HOME "c:\local\jdk1.8.0_131"
卸載舊版 CNTK
如果您先前已在電腦上安裝任何版本的 CNTK Python 套件,請先移除 PYTHONPATH 環境變數中的任何 CNTK 相關路徑來卸載它。 Do: echo %PYTHONPATH%
若要查看其目前的值,然後使用 setx
命令來設定 PYTHONPATH,讓 CNTK 相關路徑消失。 如果這會使 PYTHONPATH 空白,則為 。
執行卸載: pip uninstall cntk
這會結束安裝部分。 讓我們繼續建置 CNTK
建置 CNTK
目前在 Visual Studio 2017 中,CUDA 9 與預設 VCTools 之間有相容性問題。 CNTK 需要 VCTools 14.11 才能使用 CUDA 9 進行建置。 若要這樣做:
- 開啟命令提示字元
- 呼叫 「%VS2017INSTALLDIR%\VC\Auxiliary\Build\vcvarsall.bat」 amd64 -vcvars_ver=14.11
這會將 VCTools 設定為 CUDA 9 相容版本。 從命令提示字元中,從 GitHub 啟動複製 CNTK 專案的根目錄中的 CNTK.sln。 如果 CNTK.sln 以預設的 CUDA9 不相容版本 VCTools 執行,將會有類似 「1 > c:\program files\nvidia gpu computing toolkit\cuda\v9.0\include\crt/host_config.h (133) :嚴重錯誤 C1189:#error:-- 不支援的 Microsoft Visual Studio 版本! 僅支援 2012、2013、2015 和 2017 版本!
如果您剛變更和環境變數,您應該關閉任何已開啟的 Visual Studio 實例,否則變更環境變數的內容將不會反映在 Visual Studio 內。
- 以滑鼠右鍵按一下 方案總管 中的 CNTK 解決方案,然後選取
Properties
- 在開啟的視窗中,選取
Configuration Properties
並按下Configuration Manager...
按鈕 - 在 Configuration Manager選取所需的設定:
- 偵錯或發行
- GPU 或僅限 CPU。 僅限 CPU 組態會明確命名。 所有其他設定都表示 GPU 使用量 (亦即
Release
「 發行」。已啟用 GPU 的模式) - 如果您尚未安裝GPU 組態所需的元件,您應該一律選取僅限 CPU 設定
建置 CNTK 解決方案。 建置程式所建立的元件取決於您安裝的必要條件,如需詳細資料,請參閱詳述 Windows 環境變數 的頁面。
如果您建置 Python 模組,請注意:
- Python 模組只會在組
Release
態中建立 - 這會在 內
bindings\python\cntk
建置 CNTK Python 模組,並在組建輸出檔案夾的子資料夾中Python
產生套件 (.whl
) (,例如x64\Release\Python
) - 請確定您的路徑包含組建輸出檔案夾 (例如
x64\Release
) ,以及PYTHONPATH
包含bindings\python
目錄。 這與 Pip 套件安裝所示的設定相反,我們在這裡會從 CNTK 存放庫複製載入 CNTK 模組,而不是作為 Python 環境中的已安裝套件,因此設定 也會有差異PYTHONPATH
。
測試 CNTK 組建功能
為了確保 CNTK 在您的系統中正常運作,您可以從Hello World - 羅吉斯回歸教學課程快速執行範例。 此範例會訓練簡單的網路,並可導向使用 CPU 或 GPU,這有助於快速確保 CNTK 正常運作。
在下方,我們假設 CNTK 存放庫已 c:\repos\cntk
複製到 ,並 build\x64\release
做為 (Release) 組建的子目錄。
- 開啟命令提示字元
- 使用下列第一個命令) 並變更
Tutorials\HelloWorld-LogisticRegression
目錄,提供透過環境變數或命令提示字元會話 (CNTK 二進位檔的路徑:
set PATH=C:\repos\cntk\x64\release;%PATH%
cd C:\repos\cntk\Tutorials\HelloWorld-LogisticRegression
首先,請嘗試下列範例:
cntk configFile=lr_bs.cntk makeMode=false
如果範例執行,亦即,如果沒有錯誤訊息,您會先取得與讀取組態相關的輸出,後面接著實際網路定型的輸出。
嘗試搭配 GPU 使用 CNTK
如果您為 GPU 使用量建置 CNTK,請嘗試執行下列命令來使用 GPU:
cntk configFile=lr_bs.cntk makeMode=false deviceId=auto
在輸出的開頭附近,您應該會看到一行確認已使用 GPU:
Model has 9 nodes. Using GPU 0.
請注意,GPU 識別碼可能不同。 參數 deviceId
會定義要用於計算的處理器。
-
deviceId=-1
表示使用 CPU。 預設值 -
deviceId=X
其中 X 是整數 > =0 表示使用 GPU X,也就是deviceId=0
GPU 0 等等。 -
deviceId=auto
表示使用 GPU,自動選取 GPU
嘗試 CNTK Python API
我們假設您已透過 安裝腳本 或 手動建立 CNTK Python 環境 (。 開啟命令提示字元並啟用 CNTK Python 環境,例如執行
activate cntk-py35
快速測試變更資料夾 Tutorials\NumpyInterop
並執行 python FeedForwardNet.py
。 定型之後,您應該會看到類似以下的輸出:
Finished Epoch [1]: loss = 0.297748 * 25600 2.383s (10742.8 samples per second)
error rate on an unseen minibatch 0.040000
在 Visual Studio 中偵錯 CNTK 原始程式碼
- 如果您想要使用 Python 工具、CNTK 和 Visual Studio,請參閱 這裡
- 若要使用 Visual Studio 在 CNTK 中對 BrainScript 進行偵錯,請遵循 這裡的步驟。
參與 CNTK 程式碼
如果您打算修改程式碼,您應該閱讀 開發和測試的相關資訊。