深度学习服务器环境配置过程详细版:
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_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里添加的用户名密码就可以进入共享文件夹了,把该位置添加到快速访问即可。