選自Github
機器之心編譯
參與:蔣思源、劉曉坤
本文從最基本的依賴項開始,依次配置了 VS 2015、Anaconda 4.4.0、CUDA 8.0.61 和 cuDNN v5.1 等基本環境,然後再從 Keras 出發安裝 Theano、TensorFlow 和 CNTK 以作為其後端。在完成配置深度學習框架後,本文分別利用這三個框架作為 Keras 後端在 CPU 和 GPU 上訓練了一個標準的卷積神經網路,完成該簡單的卷積網路也就意味著我們完成了深度學習環境的配置。
- 從零開始:深度學習軟體環境安裝指南(Ubuntu)
- 本文GitHub地址:https://github.com/philferriere/dlwin
該配置版本最後更新的日期是今年七月,該更新版本允許本地使用 3 個不同的 GPU 加速後端,並新增對 MKL BLAS 庫的支援。
目前有很多幫助我們在 Linux 或 Mac OS 上構建深度學習(DL)環境的指導文章,但很少有文章完整地敘述如何高效地在 Windows 10 上配置深度學習開發環境。此外,很多開發者安裝 Windows 和 Ubuntu 雙系統或在 Windows 上安裝虛擬機器以配置深度學習環境,但對於入門者來說,我們更希望還是直接使用 Windows 直接配置深度學習環境。因此,本文作者 Phil Ferriere 在 GitHub 上釋出了該教程,他希望能從最基本的環境變數配置開始一步步搭建 Keras 深度學習開發環境。
如果讀者希望在 Windows 10 上配置深度學習環境,那麼本文將為大家提供很多有利的資訊。
依賴項
下面是我們將在 Windows 10(Version 1607 OS Build 14393.222)上配置深度學習環境所需要的工具和軟體包:
- Visual Studio 2015 Community Edition Update 3 w. Windows Kit 10.0.10240.0:用於其 C/C++編譯器(而不是 IDE)和 SDK,選擇該確定的版本是因為 CUDA 8.0.61 所支援的 Windows 編譯器。
- Anaconda (64-bit) w. Python 3.6 (Anaconda3-4.4.0) [for Tensorflow support] or Python 2.7 (Anaconda2-4.4.0) [no Tensorflow support] with MKL:Anaconda 是一個開源的 Python 發行版本,其包含了 conda、Python、NumPy、SciPy 等 180 多個科學包及其依賴項,是一個整合開發環境。MKL 可以利用 CPU 加速許多線性代數運算。
- CUDA 8.0.61 (64-bit):CUDA 是一種由 NVIDIA 推出的通用平行計算架構,該架構使 GPU 能夠解決複雜的計算問題,該軟體包能提供 GPU 數學庫、顯示卡驅動和 CUDA 編譯器等。
- cuDNN v5.1 (Jan 20, 2017) for CUDA 8.0:用於加速卷積神經網路的運算。
- Keras 2.0.5 with three different backends: Theano 0.9.0, Tensorflow-gpu 1.2.0, and CNTK 2.0:Keras 以 Theano、Tensorflow 或 CNTK 等框架為後端,並提供深度學習高階 API。使用不同的後端在張量數學計算等方面會有不同的效果。
硬體
- Dell Precision T7900, 64GB RAM:Intel Xeon E5-2630 v4 @ 2.20 GHz (1 processor, 10 cores total, 20 logical processors)
- NVIDIA GeForce Titan X, 12GB RAM:Driver version: 372.90 / Win 10 64
安裝步驟
我們可能喜歡讓所有的工具包和軟體包在一個根目錄下(如 e:\toolkits.win),所以在下文只要看到以 e:\toolkits.win 開頭的路徑,那麼我們可能就需要小心不要覆蓋或隨意更改必要的軟體包目錄。
- Visual Studio 2015 Community Edition Update 3 w. Windows Kit 10.0.10240.0
- 下載地址:https://www.visualstudio.com/vs/older-downloads
執行下載的軟體包以安裝 Visual Studio,可能我們還需要做一些額外的配置:




- 基於我們安裝 VS 2015 的地址,需要將 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin 新增到 PATH 中。
- 定義系統環境變數(sysenv variable)INCLUDE 的值為 C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt
- 定義系統環境變數(sysenv variable)LIB 的值為 C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64
Anaconda 4.4.0 (64-bit) (Python 3.6 TF support / Python 2.7 no TF support))
本教程最初使用的是 Python 2.7,而隨著 TensorFlow 可作為 Keras 的後端,我們決定使用 Python 3.6 作為預設配置。因此,根據我們配置的偏好,可以設定 e:\toolkits.win\anaconda3-4.4.0 或 e:\toolkits.win\anaconda2-4.4.0 為安裝 Anaconda 的資料夾名。
- Python 3.6 版本的 Anaconda 下載地址:https://repo.continuum.io/archive/Anaconda3-4.4.0-Windows-x86_64.exe
- Python 2.7 版本的 Anaconda 下載地址:https://repo.continuum.io/archive/Anaconda2-4.4.0-Windows-x86_64.exe

執行安裝程式完成安裝:


如上,本教程選擇了第二個選項,但不一定是最好的。
定義一下變數並更新 PATH:
- 定義系統環境(sysenv variable)變數 PYTHON_HOME 的值為 e:\toolkits.win\anaconda3-4.4.0
- 新增 %PYTHON_HOME%, %PYTHON_HOME%\Scripts 和 %PYTHON_HOME%\Library\bin 到 PATH 中
建立 dlwin36 conda 環境
在安裝 Anaconda 後,開啟 Windows 命令視窗並執行:
#使用以下命令列建立環境

如上所示,使用 active dlwin36 命令啟用這個新的環境。如果已經有了舊的 dlwin36 環境,可以先用 conda env remove -n dlwin36 命令刪除。既然打算使用 GPU,為什麼還要安裝 CPU 優化的線性代數庫如 MKL 呢?在我們的設定中,大多數深度學習都是由 GPU 承擔的,這並沒錯,但 CPU 也不是無所事事。基於影象的 Kaggle 競賽一個重要部分是資料增強。如此看來,資料增強是通過轉換原始訓練樣本(利用影象處理運算元)獲得額外輸入樣本(即更多的訓練影象)的過程。基本的轉換比如下采樣和均值歸 0 的歸一化也是必需的。如果你覺得這樣太冒險,可以試試額外的預處理增強(噪聲消除、直方圖均化等等)。當然也可以用 GPU 處理並把結果儲存到檔案中。然而在實踐過程中,這些計算通常都是在 CPU 上平行執行的,而 GPU 正忙於學習深度神經網路的權重,況且增強資料是用完即棄的。因此,我們強烈推薦安裝 MKL,而 Theanos 用 BLAS 庫更好。
CUDA 8.0.61 (64-bit)
從英偉達網站下載 CUDA 8.0 (64-bit):https://developer.nvidia.com/cuda-downloads
選擇合適的作業系統:

下載安裝包:

執行安裝包,安裝檔案到 e:\toolkits.win\cuda-8.0.61 中:



完成安裝後,安裝包應該建立了一個名為 CUDA_PATH 的系統環境變數(sysenv variable),並且已經新增了%CUDA_PATH%\bin 和 %CUDA_PATH%\libnvvp 到 PATH 中。檢查是否真正新增了,若 CUDA 環境變數因為一些原因出錯了,那麼完成下面兩個步驟:
- 定義名為 CUDA_PATH 的系統環境變數的值為 e:\toolkits.win\cuda-8.0.61
- 新增%CUDA_PATH%\bin 和 %CUDA_PATH%\libnvvp 到 PATH 中
cuDNN v5.1 (Jan 20, 2017) for CUDA 8.0
根據英偉達官網「cuDNN 為標準的運算如前向和反向卷積、池化、歸一化和啟用層等提供高度調優的實現」,它是為卷積神經網路和深度學習設計的一款加速方案。
cuDNN 的下載地址:https://developer.nvidia.com/rdp/cudnn-download
我們需要選擇符合 CUDA 版本和 Window 10 編譯器的 cuDNN 軟體包,一般來說,cuDNN 5.1 可以支援 CUDA 8.0 和 Windows 10。

下載的 ZIP 檔案包含三個目錄(bin、include、lib),抽取這三個的資料夾到%CUDA_PATH% 中。
安裝 Keras 2.0.5 和 Theano0.9.0 與 libgpuarray
執行以下命令安裝 libgpuarray 0.6.2,即 Theano 0.9.0 唯一的穩定版:

輸入以下命令安裝 Keras 和 Theano:

安裝 CNTK 2.0 後端
根據 CNTK 安裝文件,我們可以使用以下 pip 命令列安裝 CNTK:

該安裝將導致在 conda 環境目錄下額外安裝 CUDA 和 cuDNN DLLs:

這個問題並不是因為浪費硬碟空間,而是安裝的 cuDNN 版本和我們安裝在 c:\toolkits\cuda-8.0.61 下的 cuDNN 版本不同,因為在 conda 環境目錄下的 DLL 將首先載入,所以我們需要這些 DLL 移除出%PATH% 目錄:

安裝 TensorFlow-GPU 1.2.0 後端
執行以下命令列使用 pip 安裝 TensorFlow:

使用 conda 檢查安裝的軟體包
完成以上安裝和配置後,我們應該在 dlwin36 conda 環境中看到以下軟體包列表:



為了快速檢查上述三個後端安裝的效果,依次執行一下命令列分別檢查 Theano、TensorFlow 和 CNTK 匯入情況:

驗證 Theano 的安裝
因為 Theano 是安裝 Keras 時自動安裝的,為了快速地在 CPU 模式、GPU 模式和帶 cuDNN 的 GPU 模式之間轉換,我們需要建立以下三個系統環境變數(sysenv variable):
- 系統環境變數 THEANO_FLAGS_CPU 的值定義為:floatX=float32,device=cpu
- 系統環境變數 THEANO_FLAGS_GPU 的值定義為:floatX=float32,device=cuda0,dnn.enabled=False,gpuarray.preallocate=0.8
- 系統環境變數 THEANO_FLAGS_GPU_DNN 的值定義為:floatX=float32,device=cuda0,optimizer_including=cudnn,gpuarray.preallocate=0.8,dnn.conv.algo_bwd_filter=deterministic,dnn.conv.algo_bwd_data=deterministic,dnn.include_path=e:/toolkits.win/cuda-8.0.61/include,dnn.library_path=e:/toolkits.win/cuda-8.0.61/lib/x64
現在,我們能直接使用 THEANO_FLAGS_CPU、THEANO_FLAGS_GPU 或 THEANO_FLAGS_GPU_DNN 直接設定 Theano 使用 CPU、GPU 還是 GPU+cuDNN。我們可以使用以下命令列驗證這些變數是否成功加入環境中:

更多具體的 Theano 驗證程式碼與命令請檢視原文。
檢查系統環境變數
現在,不論 dlwin36 conda 環境什麼時候啟用,PATH 環境變數應該需要看起來如下面列表一樣:

使用 Keras 驗證 GPU+cuDNN 的安裝
我們可以使用 Keras 在 MNIST 資料集上訓練簡單的卷積神經網路(convnet)而驗證 GPU 的 cuDNN 是否正確安裝,該檔名為 mnist_cnn.py,其可以在 Keras 案例中找到。該卷積神經網路的程式碼如下:
Keras案例地址:https://github.com/fchollet/keras/blob/2.0.5/examples/mnist_cnn.py


1. 使用帶 Theano 後端的 Keras
為了有一個能進行對比的基線模型,首先我們使用 Theano 後端和 CPU 訓練簡單的卷積神經網路:

我們現在使用以下命令列利用帶 Theano 的後端的 Keras 在 GPU 和 cuDNN 環境下訓練卷積神經網路:


我們看到每一個 Epoch 的訓練時間只需要 16 秒,相對於使用 CPU 要 250 秒左右取得了很大的提高(在同一個批量大小的情況下)。
2. 使用 TensorFlow 後端的 Keras
為了啟用和測試 TensorFlow 後端,我們需要使用以下命令列:



我們看到使用 TensorFlow 後端要比 Theano 後端在該任務上快 3 倍左右,它們都是用了 GPU 和 cuDNN 加速。這可能是因為在該測試中它們有相同的通道等級(channel ordering),但實際上兩個平臺在這一點是不一樣的。因此,程式可能強制 Theano 後端重新排序資料而造成效能上的差異。但在該案例下,TensorFlow 在 GPU 上的負載一直沒有超過 70%。

3. 使用 CNTK 後端的 Keras
為了啟用和測試 CNTK 後算,我們需要使用以下命令列:


在具體的試驗中,CNTK 同樣也十分快速,並且 GPU 負載達到了 80%。

原文連結:https://github.com/philferriere/dlwin
本文為機器之心編譯,轉載請聯絡本公眾號獲得授權。