Share via


在 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 開發] 工作負載:

im1

此外,在個別元件畫面上,請確定您將 'VC++ 2017 15.4 版 v14.11 工具組' 和 'Visual C++ runtime for UWP' 新增至您的安裝:

im1

最後,新增 'Windows 10 SDK (10.0.16299.0) for Desktop C++ [x86 和 x64]':

im1

預先存在的 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 ,在此案例中) ,並根據下列模式 提供 (CommunityEnterprise等) : 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 程式碼基底。 您可以使用下列工具:

在 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.msiMSMpiSetup.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 影像讀取器 ,則需要 zliblibzip 程式庫。

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.._PATHPYTHONPATH

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_PATHCNTK_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 程式碼

如果您打算修改程式碼,您應該閱讀 開發和測試的相關資訊。