电脑配置:Ubuntu16.04+NVIDIA TITAN XP+CUDA8.0+cudnn_v6+OpenCV3.2
在给服务器配置cuda时,使用ppa安装驱动,出现了循环登录(输入密码之后返回登录界面)问题。之后使用run文件安装并且加入不安装OpenGL的flag之后,可以避免该问题。
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 libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
推荐安装7+或者最新的驱动版本,Ubuntu16.04只能安装CUDA 8。
ppa安装有时会出现循环登陆的问题,而run文件安装,nvidia-settings中不会显示显卡信息,大家权衡安装。
首先卸载安装过的驱动版本:
sudo apt-get remove --purge nvidia*
若电脑是集成显卡,则需要禁用lightdm(ubuntu默认的显示管理工具):
sudo service lightdm stop
使用命令行安装驱动:
sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
sudo apt-get install nvidia-375 #此处对应自己安装的的驱动版本
安装完成后,注销,重新登录,执行以下指令:
sudo nvidia-smi
若显示GPU的信息列表,说明驱动安装成功。
或执行
nvidia-settings
可以看到本机GPU的详细信息,同样说明安装成功。
通过ppa安装的驱动有时会出现循环登陆的情况,这时就需要使用run文件进行安装。
到官网查询并下载本机GPU所对应的驱动,对于GeForce系列显卡,其地址为GeForce Driver。输入显卡信息,便会显示相应的驱动版本。
为下载的文件添加执行权限:
$sudo chmod a+x NVIDIA*.run #其中NVIDIA*为对应驱动文件的名称
由于需要禁用X-server,所以按下Ctrl+Alt+F1(F1~F6均可)进入到tty1,执行:
sudo /etc/init.d/lightdm stop #禁用lightdm服务
sudo ./NVIDIA-Linux-x86_64-384.69.run -no-x-check -no-nouveau-check -no-opengl-files#非常重要!!!
其中,
–no-x-check 安装驱动时关闭X服务,
–no-nouveau-check 安装驱动时禁用nouveau,
–no-opengl-files 只安装驱动文件,不安装OpenGL文件
重启,没有出现循环登陆,命令行中输入nvidia-smi,就可以看到对应的显卡信息。
但是这种方法安装的驱动,使用nvidia-settings不会显示相应的显卡,而且系统不会检测到安装了显卡驱动,所以在其他相关的程序(如nvidia-opencl)需要安装nvidia驱动时,系统会再次安装nvidia驱动,从而造成重新登录的问题,需要谨慎。
如果发生上述情况,使用sudo apt-get purge nvidia*删除所有nvidia文件,之后再次用run文件安装即可。
在英伟达官网下载安装文件,如下图所示:
选择runfile(local)文件进行安装,这是因为deb包安装不能选择安装选项。
首先为runfile增加执行权限:
sudo chmod a+x cuda_***.run
使用run文件进行安装:
sudo ./cuda_***.run
首先会出现安装协议,按q直接跳到末尾(而非一直按空格),输入accept。
在选择显卡驱动的一项一定选择n。
其他默认即可。
【不推荐】使用local deb包进行安装,下载完成后,在下载文件所在目录执行以下指令进行安装:
sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
若提示某些依赖项不存在,使用apt-get install -f
进行修复。
此处不需要对gcc进行降级。
打开bashrc文件:
sudo gedit ~/.bashrc
在文件末尾加入以下代码,保存
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
设置环境变量和动态链接库,输入
sudo gedit /etc/profile
在文件末尾添加如下语句,注意等号两侧不可出现空格,否则会有语法错误。
export PATH=/usr/local/cuda/bin:$PATH
保存,创建链接文件
sudo gedit /etc/ld.so.conf.d/cuda.conf
在文件末尾添加
/usr/local/cuda/lib64
保存、退出,执行命令
sudo ldconfig
选择samples文件夹下的示例进行测试
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery #根据自己CUDA安装目录进行修改
make
sudo ./deviceQuery
若显示出本GPU的相关信息,则说明安装成功。sample中的大量示例可供学习参考。
cuDNN是一个CUDA的深度神经网络的加速库,到官网cuDNN Download页面注册账号后,可以免费下载。
此处选择cuDNN v6.0 Library for Linux版本。
下载完成后,解压,进入include目录,执行:
sudo cp cudnn.h /usr/local/cuda/include/
之后进入lib64目录下:
sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.6 #删除原有动态文件
sudo ln -s libcudnn.so.6.0.21 libcudnn.so.6 #生成软衔接(注意这里要和自己下载的cudnn版本对应,其他版本可以在/usr/local/cuda/lib64下查看自己libcudnn的版本,进行相应调整)
sudo ln -s libcudnn.so.6 libcudnn.so #生成软链接
opencv版本需高于2.4,可以使用3.0,此处使用OpenCV3.2 。
1、安装依赖项:
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libtiff4-dev libswscale-dev libjasper-dev cmake pkg-config
2、在OpenCV官网下载安装包,解压,进入其目录:
mkdir build
cd build/
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
编译:
make -j8 #其中8指的是编译时的并行线程数,最好的选择是机器的内核数。
安装:
sudo make install
3、使用OpenCV中sample进行测试:
cd path_to_opencv/opencv-3.2.0/samples/cpp/example_cmake
cmake .
make
./opencv_example
可以看到一张写有”Hello OpenCV”的黑色背景图片,说明OpenCV配置成功(具体结果视opencv_example的功能而定)。
1、下载Caffe源文件:
git clone https://github.com/BVLC/caffe.git
2、复制、打开Makefile.config文件
sudo cp Makefile.config.example Makefile.config
sudo gedit Makefile.config
对Makefile.config进行修改:
(1)若使用cudnn,则去掉USE_CUDNN := 1
之前的#(#即注释)
(2)若OpenCV版本为3.0,则去掉OPENCV_VERSION := 3
之前的#
(3)若许使用Python编写layer,则去掉WITH_PYTHON_LAYER := 1
之前的#
(4)找到# Whatever else you find you need goes here.下面的:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
3、对Caffe目录下的Makefile文件进行修改:
将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
4、编辑/usr/local/cuda/include/host_config.h
将
#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
改为
//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
5、编译
make all -j8 #8的含义同上
make pycaffe #编译python layer
make runtest
若显示通过所有测试样例,则说明安装成功。
6、使用MNIST样例进行测试
MNIST是一个手写数字的数据集,共包含数字0~9十个类,训练集、测试集分别含有60000、10000张图片。使用含有两个卷积层的LeNet模型,就可以取得很好的分类结果。
获取数据集、装换为lmdb格式,网络训练过程如下:
cd path_to_caffe/caffe #进入caffe目录中
./data/mnist/get_mnist.sh #下载mnist数据集
./examples/mnist/create_mnist.sh#将mnist数据集转为lmdb格式
./examples/mnist/train_lenet.sh #训练lenet网络
训练结果如下,经过10000次迭代,可以达到99.06%的训练准确率。