[深度学习]Ubuntu16.04 + GTX 1050 + cuda8.0 + cuDNN5.1 + caffe安装详解
首先吐个槽,ubuntu + nvidia的显卡驱动简直是反人类,害的我折腾了一天多。
一、问题及解决办法
寒假放假回家没事干,正好给家里电脑升级了显卡gtx1050可以跑跑CNN。我在实验室的显卡是560,比较老了,按着实验室的环境配置流程走下来居然不能用,症状就是在Python中不能成功的import caffe,然后重启后无限循环登录。
问题:
不能进入ubuntu的图形界面,在登录界面循环。
解决办法:
Nvidia显卡驱动的锅,卸载显卡驱动,按Ctrl+Alt+F1进入终端模式登录,输入命令
- sudo apt-get remove --purge nvidia*
- sudo reboot
二、安装流程
2.1 Opencv安装
在caffe中其实是调用了Opencv的一些服务的,因此我们首先需要安装Opencv,安装流程如下:
(1)在Opencv官网下载http://opencv.org/downloads.html需要的Opencv linux版的安装包,这里我选择的Opencv 2.4.12;
(2)依赖包的安装,主要命令如下:
- sudo apt-get install build-essential
- sudo apt-get install libgtk2.0-dev libavcodec-dev libavformat-dev libtiff4-dev libswscale-dev libjasper-dev
- sudo apt-get install cmake
- sudo apt-get install pkg-config
- cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
- make
- sudo make install
2.2 配置其他依赖
这里我有一个shell脚本文件,可以把它复制到一个新的.sh文件中,并使用如下命令给该.sh文件赋予运行的权限(xxx表示文件名)
- sudo chmod a+x xxx.sh
- sh ./xxx.sh
- #!/bin/bash
- # ATLAS
- echo "===========atlas=============="
- apt-get -y install libatlas-base-dev
- # snappy
- echo "===========snappy=============="
- # apt-get -y install snappy
- apt-get -y install libsnappy-dev
- # boost
- echo "===========boost=============="
- apt-get -y install libboost-dev
- apt-get -y install libboost-filesystem-dev
- apt-get -y install libboost-system-dev
- apt-get -y install libboost-thread-dev
- apt-get -y install libboost-python-dev
- # protobuf
- echo "===========protobuf=============="
- apt-get -y install libprotobuf-dev
- apt-get -y install protobuf-compiler
- apt-get -y install python-protobuf
- # leveldb
- echo "===========leveldb=============="
- apt-get -y install libleveldb-dev
- # lmdb
- echo "===========lmdb=============="
- apt-get -y install liblmdb-dev
- # hdf5
- echo "===========hdf5=============="
- apt-get -y install libhdf5-dev
- # glog
- echo "===========glog=============="
- apt-get -y install libgoogle-glog-dev
- # gflag
- echo "===========gflag=============="
- apt-get -y install libgflags-dev
- # cython
- echo "===========cython=============="
- apt-get -y install cython
- # scipy
- echo "===========scipy=============="
- apt-get -y install python-scipy
- # scikit-image
- echo "===========scikit-image=============="
- apt-get -y install python-skimage
- # pyyaml
- echo "===========pyyaml=============="
- apt-get -y install python-yaml
- # easydict
- echo "===========easydict=============="
- apt-get -y install python-pip
- # 指定使用科大镜像源安装easydict
- pip install easydict -i https://pypi.mirrors.ustc.edu.cn/simple
- ## 错误排查
- # 修复一个比较奇怪的一定要检查这个目录是否存在的问题
- mkdir -p /usr/lib64
- # 修复cuda链接库找不到的问题
- echo "/usr/local/cuda/lib64" > cuda.conf
- cp cuda.conf /etc/ld.so.conf.d
- ldconfig
- sudo apt-get install git
- git clone https://github.com/BVLC/caffe.git
把Makefile.config.example文件中内容进行复制,复制到新建的文件Makefile.config中,修改以下几项:
i:把USE_CUDNN := 1这一行的注释取消掉,因为gtx1050的算力是6.1高于3.0,是可以使用cuDNN加速的,这里具体看自己的显卡配置;
ii:在INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include行后加空格,然后添加/usr/include/hdf5/serial
(4)编译caffe
i:在计算机中搜寻libhdf5_serial.so.10.1.0文件,找到其所在目录,在终端中进入该目录,并执行以下命令:
- sudo ln libhdf5_serial.so.10.1.0 libhdf5.so
- sudo ln libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
- sudo ldconfig
- make all -j4
- make test -j4
- make runtest -j4
- make pycaffe -j4
- make distribute
其他的老显卡,比如我实验室的GTX 560不用这么麻烦就可以,我也只配置过这两个显卡,10系显卡最好按照我这里的方法进行操作。
(1)去Nvidia官网下载GTX 1050驱动,网址如下:http://www.geforce.cn/drivers
(2)给下载的驱动程序赋予可执行权限,这里的.run文件是显卡的驱动程序,安装时注意换成自己的文件名
- sudo chmod a+x NVIDIA-Linux-x86_64-375.26.run
- sudo service lightdm stop
使用Ctrl + Alt + F1进入终端界面并登录
(4)安装Nvidia驱动
在终端中进入之前下载的驱动程序所在的目录并执行以下命令:
- sudo ./NVIDIA-Linux-x86_64-375.26.run --no-x-check --no-nouveau-check --no-opengl-files
安装好驱动程序以后开启Ubuntu图形界面
- sudo service lightdm start
至此Nvidia驱动安装完成。
2.5 Cuda安装
同样,这里的Cuda安装时也不要使用命令行直接安装,去Nvidia官网https://developer.nvidia.com/cuda-downloads下载cuda进行安装这里同样要注意,下载时要选择runfile类型文件,具体的选择类型如下图所示:
文件有1.4G大小,最好用迅雷下会快一些。
下载好Cuda,安装过程如下:
- sh cuda_8.0.27_linux.run --override
程序会问你要不要安装Nvidia驱动,这里千万不要选择安装,因为我们已经安装过了,而且GTX1050这里安装的驱动与我们之前安装的驱动版本是不一样的,如果选择安装又会出现无限循环登录的问题(血的教训);
接下来的安装过程一路选择yes,然后按照默认的来就可以了。
接下来的安装过程一路选择yes,然后按照默认的来就可以了。
2.6 cuDNN安装
去Nvidia官网https://developer.nvidia.com/rdp/cudnn-download下载cuDNN安装包,选择这个:Download cuDNN v5.1 (August 10, 2016), for CUDA 8.0 版本解压安装包以后会出现cuda的目录,进入该目录
- cd cuda/include/
- sudo cp cudnn.h /usr/local/cuda/include/
- cd ../lib64
- sudo cp lib* /usr/local/cuda/lib64/
- sudo chmod a+r /usr/local/cuda/include/cudnn.h/usr/local/cuda/lib64/libcudnn*
- cd /usr/local/cuda/lib64/
- sudo rm -rf libcudnn.so libcudnn.so.5
- sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5
- sudo ln -s libcudnn.so.5 libcudnn.so
- sudo gedit /etc/profile
- PATH=/usr/local/cuda/bin:$PATH
- export PATH
- sudo gedit /etc/ld.so.conf.d/cuda.conf
- sudo make all -j4
- cd bin/x86_64/linux/release
- ./deviceQuery
在已经配置好的eclipse + pydev环境中,新建python工程和源程序,并在工程名下右键——Properties——PyDev-PYTHONPATH——External Libraries中Add Source folder中选择/home/hanchao/caffe/python路径
在源程序中输入
- import caffe
- print 'hello world'
-------------------------------------------------------------------------------更新的分割线-------------------------------------------------------------------
如果在编辑pycaffe时出现”python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: 没有这样的文件或目录“问题时,注意修改Makefile.config文件
把
修改为
- PYTHON_INCLUDE := /usr/include/python2.7 \
- /usr/lib/python2.7/dist-packages/numpy/core/include
- PYTHON_INCLUDE := /usr/include/python2.7 \
- /usr/local/lib/python2.7/dist-packages/numpy/core/include
参考链接: