深度学习服务器环境配置过程详细版:
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版

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,方便小巧,适合做图像训练任务的实验。
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_VERSIONCUDA_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里添加的用户名密码就可以进入共享文件夹了,把该位置添加到快速访问即可。