Linux系統下深度學習框架Keras的搭建
關於計算機的硬體配置說明
推薦配置
如果您是高校學生或者高階研究人員,並且實驗室或者個人資金充沛,建議您採用如下配置:
- 主機板:X99型號或Z170型號
- CPU: i7-5830K或i7-6700K 及其以上高階型號
- 記憶體:品牌記憶體,總容量32G以上,根據主機板組成4通道或8通道
- SSD: 品牌固態硬碟,容量256G以上
- 顯示卡:NVIDIA GTX 1080、NVIDIA GTX TITAN、NVIDIA GTX 1070、NVIDIA GTX 1060 (順序為優先建議,並且建議同一顯示卡,可以根據主機板插槽數量購買多塊,例如X99型號主機板最多可以採用×4的顯示卡)
- 電源:由主機機容量的確定,一般有顯示卡總容量後再加200W即可
最低配置
如果您是僅僅用於自學或程式碼除錯,亦或是條件所限僅採用自己現有的裝置進行開發,那麼您的電腦至少滿足以下幾點:
- CPU:Intel第三代i5和i7以上系列產品或同性能AMD公司產品
- 記憶體:總容量4G以上
CPU說明
- 大多數CPU目前支援多核多執行緒,那麼如果您採用CPU加速,就可以使用多執行緒運算。這方面的優勢對於伺服器CPU志強系列尤為關鍵
顯示卡說明
- 如果您的顯示卡是非NVIDIA公司的產品或是NVIDIA GTX系列中型號的第一個數字低於4或NVIDIA的GT系列,都不建議您採用此類顯示卡進行加速計算,例如
NVIDIA GT 910
、NVIDIA GTX 450
等等。 - 如果您的顯示卡為筆記本上的GTX移動顯示卡(型號後面帶有標識M),那麼請您慎重使用顯示卡加速,因為移動版GPU很容易發生過熱燒燬現象。
- 如果您的顯示卡,顯示的是諸如
HD5000
,ATI 5650
等型別的顯示卡,那麼您只能使用CPU加速 - 如果您的顯示卡為Pascal架構的顯示卡(
NVIDIA GTX 1080
,NVIDIA GTX 1070
等),您只能在之後的配置中選擇CUDA 8.0
基本開發環境搭建
1. Linux 發行版
linux有很多發行版,本文強烈建議讀者採用新版的Ubuntu
16.04 LTS
一方面,對於大多數新手來說Ubuntu具有很好的圖形介面,與樂觀的開源社群;另一方面,Ubuntu是Nvidia官方以及絕大多數深度學習框架預設開發環境。
個人不建議使用Ubuntu Kylin,之前提出有部分資訊表示,中國官方開發的這個版本有部分功能被“閹割”,你懂得。
Ubuntu 16.04 LTS下載地址
通過U盤安裝好後,進行初始化環境設定。
2. Ubuntu初始環境設定
- 安裝開發包
開啟終端
輸入:
# 系統升級
>>> sudo apt update
>>> sudo apt upgrade
# 安裝python基礎開發包
>>> sudo apt install -y python-dev python-pip python-nose gcc g++ git gfortran vim
- 安裝運算加速庫
開啟終端
輸入:
>>> sudo apt install -y libopenblas-dev liblapack-dev libatlas-base-dev
3. CUDA開發環境的搭建(CPU加速跳過)
如果您的僅僅採用cpu加速,可跳過此步驟
- 下載CUDA8.0
之後開啟終端
輸入:
>>> sudo dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb
>>> sudo apt update
>>> sudo apt install cuda
自動配置成功就好。
- 將CUDA路徑新增至環境變數
在終端
輸入:
>>> sudo gedit /etc/bash.bashrc
在bash.bashrc
檔案中新增:
export CUDA_HOME=/usr/local/cuda-8.0
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
之後source gedit
/etc/bash.bashrc
即可
同樣,在終端
輸入:
>>> sudo gedit ~/.bashrc
在.bashrc
中新增如上相同內容
(如果您使用的是zsh
,在~/.zshrc
新增即可)
- 測試
在終端
輸入:
>>> nvcc -V
會得到相應的nvcc編譯器相應的資訊,那麼CUDA配置成功了。
記得重啟系統
4. 加速庫cuDNN(可選)
從官網下載需要註冊賬號申請,兩三天批准。網盤搜尋一般也能找到最新版。
Linux目前就是cudnn-8.0-win-x64-v5.1-prod.zip。
下載解壓出來是名為cuda的資料夾,裡面有bin、include、lib,將三個資料夾複製到安裝CUDA的地方覆蓋對應資料夾,在終端中輸入:
>>> sudo cp include/cudnn.h /usr/local/cuda-8.0/include/
>>> sudo cp lib64/* /usr/local/cuda-8.0/lib64/
Keras框架搭建
相關開發包安裝
在終端
中輸入:
>>> sudo pip install -U --pre pip setuptools wheel
>>> sudo pip install -U --pre numpy scipy matplotlib scikit-learn scikit-image
>>> sudo pip install -U --pre theano
>>> sudo pip install -U --pre keras
安裝完畢後,輸入python
,然後輸入:
>>>import theano
>>>import keras
無錯輸出即可
Keras環境設定
- 修改預設keras後端
在終端
中輸入:
>>> gedit ~/.keras/keras.json
- 配置theano檔案
在終端
中輸入:
>>> gedit ~/.theanorc
並寫入以下:
openmp=False
device = gpu
floatX = float32
allow_input_downcast=True
[lib]
cnmem =0.8
[blas]
ldflags=-lopenblas
[nvcc]
fastmath =True
如果您的所安裝的是CPU加速版本,那麼.theanorc
檔案配置如下:
[global]
openmp=True
device = cpu
floatX = float32
allow_input_downcast=True
[blas]
ldflags=-lopenblas
之後可以驗證keras是否安裝成功,在命令列中輸入Python命令進入Python變成命令列環境:
>>>import keras
沒有報錯,並且會打印出關於顯示卡資訊以及cnmem
等資訊(CPU版本沒有)那麼Keras就已經成功安裝了。
加速測試
速度測試
新建一個檔案test.py
,內容為:
from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import time
vlen =10*30*768# 10 x #cores x # threads per core
iters =1000
rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], T.exp(x))
print(f.maker.fgraph.toposort())
t0 = time.time()
for i in xrange(iters):
r = f()
t1 = time.time()
print("Looping %d times took %f seconds"%(iters, t1 - t0))
print("Result is %s"%(r,))
if numpy.any([isinstance(x.op, T.Elemwise)for x in f.maker.fgraph.toposort()]):
print('Used the cpu')
else:
print('Used the gpu')
在GTX 970顯示卡下,輸出結果大概是0.21秒,在一百倍運算量下19秒,可以進行對比。
理論上,相比較主頻為3.3GHz的CPU,加速比應該是75倍,但不同的ssd和記憶體限制了IO介面傳輸速度。
Keras中mnist資料集測試
下載Keras開發包
git clone https://github.com/fchollet/keras.git
cd keras/examples/
python mnist_mlp.py
程式無錯進行,至此,keras安裝完成。