深度學習伺服器環境搭建詳細版(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
安裝語言: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裡新增的使用者名稱密碼就可以進入共享檔案夾了,把該位置新增到快速訪問即可。