深度學習服務器環境搭建詳細版(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

安裝cudnn

https://developer.nvidia.com/cudnn下載安裝包(需先註冊)
解壓到cuda安裝目錄

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命令是不存在則創建。使用“解壓到”方式複製後的文件不會丟失軟連接信息。)

4 安裝caffe

現在安裝我們的第一個深度學習訓練框架–caffe,方便小巧,適合做圖像訓練任務的實驗。其他主流框架的對比可搜索此類文章:http://blog.csdn.net/app_12062011/article/details/54691945
caffe官網安裝指南:http://caffe.berkeleyvision.org/installation.html

1 根據官網指導安裝編譯所需的依賴項:

http://caffe.berkeleyvision.org/install_apt.html
protobuf leveldb opencv boost等:

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 [username@]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裏添加的用戶名密碼就可以進入共享文件夾了,把該位置添加到快速訪問即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章