1. 程式人生 > >深度學習伺服器環境搭建詳細版(Ubuntu16.04+CUDA8+Caffe+Anaconda+TensorFlow+共享)

深度學習伺服器環境搭建詳細版(Ubuntu16.04+CUDA8+Caffe+Anaconda+TensorFlow+共享)

深度學習伺服器環境配置過程詳細版:
Ubuntu16.04+CUDA8+Caffe+Anaconda+TensorFlow+OpenSSH+共享硬碟

##0 硬體配置

部件 型號
主機板 華碩x99 e-ws
cpu I7 6800k
顯示卡 gtx 1080ti
記憶體 16G Kinston 駭客神條DDR4 3000
SSD硬碟 512G 浦科特M7VC SATA3固態
機械硬碟 3TB 希捷酷魚 7200轉64M SATA3臺式
電源 1600W evga
機箱
總價 約¥22K

##1 ubuntu系統安裝
進入windows,win+r,diskmgmt.msc, (或者win+x) 開啟磁碟管理,刪除一個分割槽留出200G以上自由空間(如果沒有預裝win就不用考慮這一步)
插上用ultraiso製作好的ubuntu安裝u盤(這裡選擇ubuntu desktop 16.04)重啟,按F2進入bios,進入高階模式-boot,關閉fast boot,secure boot中刪除金鑰,顯示關閉狀態,退出高階模式,bootmenu裡選擇u盤啟動,
游標移動到install ubuntu,按e鍵,移動游標到splash後新增nomodeset

,按F10啟動,
安裝語言:English,
update及第三方軟體:都不勾選,
Install type:something else,
選擇之前留出的freespace,按+號建立ext4分割槽,掛載點“/”,boot loader也選擇該分割槽,然後下一步,會提示沒設定swap,忽略,選擇continue,continue,
設定時區,鍵盤(英語),使用者名稱密碼,
安裝完成提示重啟,按F2進入bios會看到boot menu裡多了一項ubuntu啟動項(位置在分割槽所在的硬碟上),點選它,進入GRUB啟動頁面,游標選擇Ubuntu,按e鍵,移動游標到splash後新增nomodeset,按F10啟動,
進入ubuntu,先開啟system setting–software&update指定更新源,找到china-清華源,選擇,輸入使用者密碼確定。
修改grub,這樣不用每次登陸都手動加nomodeset

終端輸入

sudo gedit /etc/default/grub

找到這一行:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
修改為:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"
存檔,更新GRUB,重啟生效:

sudo update-grub

*安裝中文拼音輸入法ibus-pinyin

sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4
sudo apt-get install ibus-pinyin

然後在Text Entry Setting裡新增pinyin,登出生效。

*安裝refind圖形化啟動引導

sudo apt-add-repository ppa:rodsmith/refind
sudo apt-get update
sudo apt-get install refind

重啟生效

*設定隨系統啟動自動掛載硬碟分割槽

檢視要掛載的分割槽ID:

sudo fdisk -l
sudo blkid 

/dev/sdb3為例,設定隨系統啟動自動掛載:

sudo gedit /etc/fstab

文末追加:

# mount Data1
/dev/sdb3  /media/Data1    ext4  defaults  0  0

檢查並掛載新添項:sudo mount -a,重啟驗證。

##2 安裝顯示卡驅動
不能自動安裝最新版(caffe不支援高版本的cuda及驅動) ,下載375版 驅動.run檔案,並在安裝前禁用第三方驅動:

sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

向檔案新增:

blacklist nouveau
options nouveau modeset=0

儲存退出,執行

lspci | grep nouveau

什麼都沒有說明禁用成功,然後CTRL+ALT+F1(進入ttf1控制檯),
先關閉當前圖形環境,再執行安裝檔案(Accept,一路預設,注意配置x-config那個選項選預設的no),最後重啟圖形環境

sudo service lightdm stop
sudo sh ~/Downloads/NVIDIA-Linux-x86_64-375.66.run

sudo service lightdm start

終端中輸入nvidia-smi,驗證顯示卡資訊說明驅動安裝成功。

##3 安裝cuda
首先在官網上下載cuda8 安裝檔案https://developer.nvidia.com/cuda-downloads
(經測試最新的9版本及387驅動在caffe編譯runtest時會出現gpu錯誤,官網說支援caffe2,因為要使用caffe所以這裡安裝了低版本的驅動375.66和cuda8)

sudo sh cuda_8.0.61_375.26_linux.run

accept,注意第一個問題是否安裝驅動要選no,yes,
安裝位置按預設,yes,yes,sample安裝位置輸入自定義的~/Develop

配置系統環境變數:

sudo gedit /etc/profile

文末位置加入兩行:

# CUDA
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH

重啟使生效(或在終端source /etc/profile),
終端輸入 :nvcc -V,提示 CUDA Toolkit版本資訊表示安裝成功,
###編譯cuda-samples

cd ~/Develop/NVIDIA_CUDA-8.0_Samples
make -j4

這個過程比較久,結束後可以執行一兩個例子程式測試:

./deviceQuery 

輸出結果Pass表示通過測試

另外官網還有一個CUDA8的最新補丁cuda_8.0.61.2_linux.run可以安裝下:sudo sh cuda_8.0.61.2_linux.run

sudo tar xvf cudnn-8.0-linux-x64-v7.tgz -C /usr/local
sudo ldconfig

(cuda預設安裝在/usr/local/cuda,這個cudnn解壓後一級目錄是cuda,所以解壓到/usr/local與cuda目錄合併,-C是存在該目錄才複製,cp命令是不存在則建立。使用“解壓到”方式複製後的檔案不會丟失軟連線資訊。)

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler

sudo apt-get install --no-install-recommends libboost-all-dev

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

可以終端查詢系統安裝的opencv版本:

pkg-config --modversion opencv

CUDA:前面已裝,
BLAS
caffe預設使用atlas:

sudo apt-get install libatlas-base-dev

或選擇openblas

sudo apt-get install libopenblas-dev

或手動下載安裝Intel MKL。
Python(可選):如果需要編譯pycaffe介面則需要先準備python,caffe的makefile.config中預設指向linux系統自帶的python,所以這裡就優先選擇系統自帶python(經開發者驗證不易有連結錯誤)
安裝pip:

sudo apt-get install python-pip python-dev build-essential 
sudo pip install --upgrade pip

根據caffe/python目錄下的requirements.txt安裝python附加依賴庫:

for req in $(cat requirements.txt); do sudo pip install $req; done

Matlab(可選):如果需要編譯matcaffe介面則需要先安裝matlab:
*掛載iso虛擬映象:

sudo mkdir /mnt/tmp
sudo mount -o loop '~/Downloads/R2015b_glnxa64.iso' /mnt/tmp
cd /mnt/tmp
sudo ./install

*解壓rar壓縮包前需要安裝unrar:

sudo apt-get install unrar

安裝完並激活後終端輸入

sudo apt-get install matlab-support

會被要求輸入安裝路徑(到bin目錄之前的),是否給所使用者使用,然後相應的環境變數和使用者許可權就自動配置好了。

*如果出現直接執行matlab報錯,但是sudo執行正常的情況,只需更改當前home目錄下的.matlab資料夾許可權即可:

sudo chmod -R 777 ~/.matlab

###2 編譯caffe
根據需求調整Makefile.config檔案(儘量少改動,修改前記得備份)
USE_CUDNN:=1 使用cudnn加速,取消這行註釋
如果使用2.4(沒有裝opencv3)的話就不用管OPENCV_VERSION
CUDA_DIR := /usr/local/cuda 如果裝的是預設位置就不用改
CUDA_ARCH := 這裡刪掉5以下的(官網查詢1080Ti顯示卡的計算效能是6.1:https://developer.nvidia.com/cuda-gpus)
BLAS :=atlas 選擇blas版本,這裡按預設選擇atlas(如果以後需要使用intel mkl可以在這裡修改後再次編譯caffe)
PYTHON_INCLUDE := 這裡預設是/user/lib/...但是pip把numpy實際安裝在了/usr/local/lib/...需要檢查後改一下,同時PYTHON_LIB後也要追加/usr/local/lib/目錄
MATLAB_DIR:= /usr/local/MATLAB/R2015b 這裡改為matlab安裝路徑
INCLUDE_DIRS 這裡追加 /usr/include/hdf5/serial 同時開啟Makefile在LIBRARIES +=後把hdf5_hl hdf5替換成hdf5_serial_hl hdf5_serial
開始編譯(可以加-jn來指定n執行緒並行編譯):

make all
make test
make runtest

編譯python介面

make pycaffe

編譯matlab介面
*需要先重指定一下gcc-4庫檔案,否則可能有gcc版本的錯誤(參考參考2):

sudo mv /usr/local/MATLAB/R2015b/sys/os/glnxa64/libstdc++.so.6 /usr/local/MATLAB/R2015b/sys/os/glnxa64/libstdc++.so.6.old
sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6  /usr/local/MATLAB/R2015b/sys/os/glnxa64/libstdc++.so.6
make matcaffe

*打包
將呼叫caffe所需的所有檔案打包到distribute,方便移植部署:

make distribute

配置caffe路徑

sudo gedit ~/.bashrc

文末追加:

# caffe
export PATH="/home/.../caffe/build/tools:$PATH"
# use python:caffe
export PYTHONPATH="/home/.../caffe/python:$PYTHONPATH"  

另外需要在matlab程式中新增PATHaddpath ~/caffe/matlab,配好後輸入help caffe測試是否配置成功。
###3 測試caffe
下載資料集,二進位制檔案:

cd caffe
sh data/mnist/get_mnist.sh

轉換成lmdb格式,caffe只識別lmdb和leveldb格式,得到mnist_train_lmdb和mnist_test_lmdb兩個資料集:

sh examples/mnist/create_mnist.sh

訓練:

sh examples/mnist/train_lenet.sh

測試python介面
自己畫一張28*28的數字圖片img,寫一個簡單的test.py指令碼呼叫訓好的模型進行識別測試:

import caffe
import os
cafferoot='/home/.../caffe'
model_file = cafferoot+'/examples/mnist/lenet.prototxt'
pretrained_file = cafferoot+'/examples/mnist/lenet_iter_10000.caffemodel'
net = caffe.Classifier(model_file, pretrained_file, image_dims=(28, 28), raw_scale=255)
img = cafferoot+'/examples/mnist/mytest/1.png'
score = net.predict([caffe.io.load_image(img, color=False)], oversample=False)
print (score)

在終端執行,結果輸出這張圖片分別屬於0-9的判定結果。

測試matlab介面
為避免連結庫錯誤,需先在終端輸入如下命令:
(包括以後每次需要使用matcaffe介面時,都要在終端輸入如下命令,然後在該終端啟動matlab)

export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4:/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4:/usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:/usr/lib/x86_64-linux-gnu/libfreetype.so.6:$LD_PRELOAD
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH 

再執行測試:

make mattest

可能會在測試開始時出現如下提示,但不影響最後測試結果

malloc: unknown:0: assertion botched
free: called with unallocated block argument
last command: (null)
Aborting…find: `bash’ terminated by signal 6

開啟Matlab手動測試介面:參考
1下載bvlc_reference_caffenet.caffemodel
連結:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel
下載後放入資料夾/caffe-master/models/bvlc_reference_caffenet 這是因為一會執行的demo要使用這個模型。
2 從終端啟動matlab,切換到目錄 ~/caffe/matlab/demo/(很重要)
3輸入命令 run('classification_demo.m')或者雙擊開啟classification_demo.m點選上面的“Run”即可。
4輸出是一個1000×1的矩陣,因為ImageNet資料集有1000個類別。

##5 安裝anaconda
anaconda是一個非常好用的python及依賴包的管理整合框架,有一個圖形介面可以方便地進行版本維護,全部package都安裝在anaconda資料夾中所以也不怕把系統目錄搞亂。
下載網站:https://www.continuum.io/downloads/

wget https://repo.continuum.io/archive/Anaconda2-4.3.1-Linux-x86_64.sh
bash Anaconda2-4.3.1-Linux-x86_64.sh

安裝過程中,會問安裝路徑,按回車即可。詢問是否新增到~/.bashrc中,回覆yes即可。
安裝器會自動在~/.bashrc中新增使用者環境變數:

# added by Anaconda2 4.3.1 installer
export PATH="/home/dl/Develop/anaconda2/bin:$PATH"

(如果不想使用Anaconda2中的python,可手動開啟~/.bashrc檔案註釋掉相應部分)
安裝完成後使路徑生效並檢視已經安裝完成的庫:

source ~/.bashrc 
conda list

新增Anaconda的TUNA映象,並設定搜尋時顯示通道地址:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

開啟anaconda的GUI管理介面:(開啟前建議斷網,否則啟動比較慢)

anaconda-navigator
  • Anaconda2預設根目錄環境是python2.7,如果新增python3.5,可以使用如下命令建立:conda create -n py35 python=3.5,這一步也可在anaconda-navigator的介面裡操作。
    使用時, 啟用3.5為當前環境:source activate py35
    退出該環境回到anaconda根目錄環境:source deactivate py35
  • 如果想和系統的pip區分,可以把anaconda下的pip重新命名為condapip來使用,或者註釋掉source ~/.bashrc裡的anaconda

呼叫caffe介面
由於之前的pycaffe是用系統python環境編譯的,現在使用anaconda的python來import caffe時會有依賴庫找不到的問題,需要再讓anaconda安裝一下caffe的依賴庫,主要需要這幾部操作:

1 更新gcc版本:

conda install libgcc

2 進入caffe/python目錄把pycaffe需要的庫按列表裝齊:
(先用pip --version確認下系統當前呼叫的pip是anaconda的pip)

cd ~/caffe/python 
for req in $(cat requirements.txt); do pip install $req; done

然後在anaconda的python下測試能否import caffe

##6 安裝TensorFlow
安裝了anaconda之後裝tensorflow就非常簡單了,
開啟anaconda-navigator新建python3.5環境命名為tensorPy35,然後在該環境下搜尋tensorflow,勾選tensorflow-gpu,apply一下就安裝好了。
也可以用終端命令安裝:

conda install tensorflow-gpu

然後在anaconda的python下測試能否import tensorflow

##7 安裝遠端登入OpenSSH服務
###伺服器端
Ubuntu預設安裝了ssh client端但沒有安裝Server端,所以首先安裝ssh-server服務

sudo apt-get install openssh-server

再確認sshserver是否啟動了,命令如下:

ps -e |grep ssh 或 netstat -antp|grep 22

*如果看到sshd那說明ssh-server已經啟動了。ssh-server配置檔案位於/etc/ssh/sshd_config,在這裡可以定義SSH的服務埠,預設埠是22,可以定義成其他埠號如222。然後重啟SSH服務:

service ssh start

或者 sudo /etc/init.d/ssh restart
然後就可以在聯網的其他電腦上登入伺服器了。

為伺服器新增使用者
*可以修改/etc/adduser.conf檔案,將預設home目錄指定在其他硬碟分割槽
新增使用者並自動建立home資料夾:

sudo adduser name

刪除使用者及其home資料夾:

sudo userdel -r name

*三個常用的使用者許可權修改命令
修改檔案(夾)owner:
chown (遞迴修改子目錄加 -R)使用者名稱 file
修改檔案(夾)group:
chgrp (遞迴修改子目錄加 -R) 組名 file
修改檔案(夾)許可權:
chmod(遞迴修改子目錄加 -R)許可權引數 file
例項:

chmod u+x file    #給file的屬主增加執行許可權
chmod 751 file    #給file的屬主分配讀、寫、執行(7)的許可權,給file的所在組分配讀、執行(5)的許可權,給其他使用者分配執行(1)的許可權
chmod u=rwx,g=rx,o=x file   #上例的另一種形式
chmod =r file               #為所有使用者分配讀許可權

###客戶端
然後在ssh客戶端上用新增的使用者名稱密碼登入伺服器:
windows使用者推薦使用mobaXterm客戶端軟體,有目錄檢視拖傳檔案很方便,連線方式是:
點選session新增伺服器ip地址的ssh連線,預設埠22,填入自己的使用者名稱,輸入密碼並儲存。
Ubuntu使用者直接使用終端即可,連線方式是:ssh [[email protected]]host[-p PORT] [COMMAND]
參考http://www.linuxidc.com/Linux/2015-08/122118.htm,其他工具可上網自查

修改使用者環境變數
登入系統後可能需要修改自己home目錄下的bashrc檔案,相當於windows的使用者環境變數,mobaXterm中可在左側目錄檢視直接找到開啟編輯,linux使用者可以使用終端命令修改:vim ~/.bashrc
往path裡追加一些伺服器上已經有的,但未被加入系統環境變數(/etc/profile)的軟體和庫(如其他使用者安裝的)
這裡以剛才安裝的caffe和anaconda為例:

# added by Anaconda2 4.3.1 installer
export PATH="/home/dl/Develop/anaconda2/bin:$PATH"
# add caffe
export PATH="/home/dl/Develop/caffe/build/tools:$PATH"
export PYTHONPATH="/home/dl/Develop/caffe/python:$PYTHONPATH"

主要參考安裝者的 ~/.bashrc檔案拷貝過來就可以了,如果對方在引用中使用的是“~/”這種相對路徑,記得改成絕對路徑。
*修改完~/.bashrc後需要在命令列source一下使其生效

source ~/.bashrc

##8 共享印表機和資料夾
安裝samba

sudo apt-get install samba smbclient samba-common system-config-samba python-glade2 gksu

開啟samba設定程式:

sudo system-config-samba

如果啟動失敗並提示/etc/libuser.conf檔案不存在,則手動建立

sudo touch /etc/libuser.conf

然後可成功開啟samba圖形介面,設定共享資料夾及共享許可權-新增使用者。設好後重啟samba

sudo /etc/init.d/samba restart

windows新增共享資料夾
在“網路”下找到伺服器名,
或者“win鍵+r”–>執行–>輸入\\伺服器ip
然後提示需要登入,輸入samba裡新增的使用者名稱密碼就可以進入共享檔案夾了,把該位置新增到快速訪問即可。