本文介绍了在GPU服务器(已安装ubuntu16.04.2系统,方法自行搜索,版本是16.04就可以)上搭建CAFFE深度学习环境的方法,参考了其他几位前辈的博客,并在此基础上结合我在实际操作过程中遇到的问题加以补充完善,最终完成了服务器的配置。
主要步骤:
- 安装依赖包 + 禁用新风
- 配置环境变量
- 下载 + 安装CUDA 8.0 + 验证是否安装成功
- 安装cudnn
- 安装opencv3.1
- 安装朱古力
- 安装pycaffe
- 配置可远程访问的网络环境
- 使用MNIST数据集验证来自Caffe是否安装成功
第1步安装依赖包+禁用新风
安装后续步骤或环境必需的依赖包,依次输入以下命令:
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
sudo apt-get install git cmake build-essential
安装好依赖包后只有禁用nouveau才能顺利安装NVIDIA显卡驱动,禁用方法就是在/etc/modprobe.d/blacklist-nouveau.conf文件中添加一条禁用命令,首先需要打开该文件:
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
打开后发现该文件中没有任何内容,写入:
blacklist nouveau option nouveau modeset = 0
保存时命令窗口可能会出现以下提示(无视此提示就可以):
**(gedit:4243):警告**:设置文档元数据失败:不支持设置属性metadata :: gedit-position
保存后关闭文件,注意此时还需执行以下命令使禁用nouveau生效:
sudo update-initramfs –u
第2步配置环境变量
同样使用gedit命令打开配置文件:
sudo gedit ~/.bashrc
(这一命令用处非常大,在最后CAFFE编译提示找不到某个库文件时,搜索该库文件所在位置,使用该命令进入配置文件后,添加该库文件的路径)
打开后在文件最后加入以下两行内容:
export LD_LIBRARY_PATH = / usr / lib / x86_64-linux-gnu:$ LD_LIBRARY_PATH
export LD_LIBRARY_PATH = / lib / x86_64-linux-gnu:$ LD_LIBRARY_PATH
保存退出。
第3步下载+安装CUDA 8.0+验证是否安装成功
进入https://developer.nvidia.com/cuda-80-ga2-download-archive ,依次选择CUDA类型然后下载即可。
1.5G的CUDA中包含了nvidia显卡驱动安装包,此时注意你是否已经安装过nvidia显卡驱动(一般重新装系统之后的机器都没有nvidia显卡驱动),若无法保证已安装的nvidia显卡驱动一定正确,那就卸载掉之前安装的nvidia显卡驱动,然后开始安装CUDA 8.0;若可以保证已安装正确的nvidia显卡驱动,则直接开始安装CUDA 8.0,在安装过程中选择不再安装nvidia显卡驱动。
为了方便开始安装过程的路径查找,把下载的CUDA安装文件移动到HOME路径下,然后通过Ctrl + Alt + F1进入文本模式,输入帐号密码登录,在文本模式登录后首先关闭桌面服务:
sudo service lightdm stop
然后通过Ctrl + Alt + F7发现已经无法成功返回图形化模式,说明桌面服务已成功关闭,注意此步对接下来的nvidia驱动安装尤为重要,必需确保桌面服务已关闭。
再次通过Ctrl + Alt + F1进入文本模式,然后运行CUDA安装文件进行安装,直接通过sh命令运行安装文件即可:
sudo sh cuda_8.0.61_375.26_linux.run --no-opengl-libs
其中cuda_8.0.61_375.26_linux.run是我的CUDA安装文件名,而你需替换为自己的CUDA安装文件名,若此时忘记可直接通过ls文件查看文件名,这也是把CUDA安装文件移动到HOME下的另一个原因。
执行此命令约1分钟后会出现0%信息(这是安装前需要阅读的条款,不用看),此时长按回车键让此百分比增长,直到100%,然后输入接受。然后选择是否安装nvidia驱动,若之前未安装则输入“y”,若确保已安装正确驱动则输入“n”。
剩下的选择则都输入“y”确认安装或默认路径安装,开始安装,此时若出现安装失败提示可可为未关闭桌面服务或在已安装nvidia驱动的情况下重复再次安装nvidia驱动,安装成功后会显示:
Driver :Installed
Toolkit :Installed in /usr/local/cuda-8.0
Samples :Installed in /home/fnlee
之后输入重启命令重启就OK了:
Reboot
重启后登录进入系统,配置CUDA环境变量,与第2步相同,使用gedit命令打开配置文件:
sudo gedit ~/.bashrc
在该文件最后加入以下两行并保存:
export PATH = / usr / local / cuda-8.0 / bin:$ PATH
export LD_LIBRARY_PATH = / usr / local / cuda / lib64:$ LD_LIBRARY_PATH
使该配置生效:
source ~/.bashrc
验证CUDA 8.0是否安装成功,分别执行以下命令:
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
若看到类似以下信息则说明cuda已安装成功:
第4步安装cudnn
登录官网:https://developer.nvidia.com/rdp/cudnn-download ,下载对应cuda版本和linux系统的cudnn压缩包,注意官网下载cudnn需要注册帐号(建议用邮箱注册,网站响应可能会比较慢,耐心等待,多次尝试就好)并登录。
下载完成后解压,得到一个cuda文件夹,该文件夹下包含和lib64两个文件夹,命令行进入cuda / include路径下,然后进行以下操作:
sudo cp cudnn.h /usr/local/cuda/include/
然后命令行进入cuda / lib64路径下,运行以下命令:
sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5 #删除原有动态文件
sudo ln -s libcudnn.so.5.1.10 libcudnn.so.5 #生成软衔接
sudo ln -s libcudnn.so.5 libcudnn.so #生成软链接
安装完成后可用
nvcc -V
命令验证是否安装成功,若出现以下信息则表示安装成功:
用NVIDIA-SMI查看显卡情况(也可以验证安装成功):
第5步安装opencv3.1.0
进入官网:http: //opencv.org/releases.html,选择3.1.0版本的源码,下载opencv-3.1.0.zip
解压到你要安装的位置,命令行进入已解压的文件夹opencv-3.1.0目录下,执行:
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
解决opecv3.1与cuda8.0不兼容的问题:
修改/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp文件内容,如图:
保存之后编译:
make -j #编译
在编译过程中可能会遇到:
“安装OpenCv 3.1的过程中要下载ippicv_linux_20151201,由于网络的原因,这个文件下载失败。”
下载完后替换opencv-3.1.0 / 3rdparty / ippicv / downloads / linux- *目录下的同名文件,重新make -j。
编译成功后安装:
sudo make install
安装完成后通过查看opencv版本验证是否安装成功:
pkg-config --modversion opencv
验证结果:
第6步安装caffe
首先在你要安装的路径下(首页)下载caffe:
git clone https://github.com/BVLC/caffe.git
进入caffe,将Makefile.config.example文件复制一份并更名为Makefile.config,也可以在caffe目录下直接调用以下命令完成复制操作:
sudo cp Makefile.config.example Makefile.config
复制一份的原因是编译caffe时需要的是Makefile.config文件,而Makefile.config.example只是caffe给出的配置文件例子,不能用来编译caffe。
然后修改Makefile.config文件,在caffe目录下打开该文件:
sudo gedit Makefile.config
修改Makefile.config文件内容:
修改python路径(如果已经安装好Anaconda就直接用这两行下边Anaconda的路径):
将
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
*******楼主之后又从头开始配了一台cuda9.0+opencv3.4.0的服务器,完成上述部分后无需设置以下三步就编译通过了********
修改caffe目录下的Makefile文件:
将:
NVCCFLAGS + = - ccbin = $(CXX)-Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS + = -D_FORCE_INLINES -ccbin = $(CXX)-Xcompiler -fPIC $(COMMON_FLAGS)
将:
LIBRARIES + = glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改为:
LIBRARIES + = glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
修改/usr/local/cuda/include/host_config.h文件:
将
#error--不支持的GNU版本!不支持超过4.9的gcc版本!
改为
// #error--不支持的GNU版本!不支持超过4.9的gcc版本!
******************************************************************三步******************************************************************
可以开始编译了,在caffe目录下执行:
make all –j
若编译过程出现错误,修改后必须运行
make clean
之后再次编译。
编译成功后可进行测试:
make runtest –j
若出现如下结果,则表示朱古力安装成功:
我在测试时出现了错误(找不到libopencv_core.so.3.1这个动态链接库):
解决方法:
搜索到libopencv_core.so.3.1的路径为:/usr/local/cuda-8.0/lib64
将其添加到配置文件中,使用gedit命令打开配置文件:
sudo gedit ~/.bashrc
在该文件最后加入这一行并保存:
export LD_LIBRARY_PATH = / usr / local / cuda-8.0 / lib64:$ LD_LIBRARY_PATH
使该配置生效:
source ~/.bashrc
如果仍有同样的错误可以尝试依次输入以下命令:
sudo ldconfig
cat /etc/ld.so.conf
如果仍有问题,可以搜索“的Linux搜索不到共享库的解决方法”
加载共享库时出错:xxx.so.x“ 错误的原因和解决办法
第7步安装pycaffe
在上一步成功安装caffe之后,就可以通过caffe去训练数据集了,需要在命令行下通过caffe命令进行操作,而这一步pycaffe的安装是为了更方便的去使用caffe,实际上大多数都是通过python来操作caffe的,可以更方便的编写和执行python代码。
cd caffe
sudo make pycaffe -j
我编译pycaffe时出现的错误:
python / caffe / _caffe.cpp:10:31:致命错误:numpy / arrayobject.h:没有这样的文件或目录
解决方法:
sudo apt-get install python-numpy
再次编译就可以安装成功了。
第8步配置可远程访问的网络环境
当我们搭好之前的所有环境后,需要使用XSHELL和信息xFTP远程连接服务器,直接连一般都会失败因此在连接之前需要安装OpenSSH的,命令如下:
sudo apt-get install openssh-server openssh-client
安装完成之后,执行netstat -tnl命令,查看22端口是否开通:
LISTEN状态说明设置成功。