最近开始配置自己的深度学习主机,由于之前只在笔记本上和单显卡主机上安装过,所以可以说是zero经验,以至于很多问题不了解都当成了bug,故为了方便以后的自己以及大众,特在此写下post一篇。(由于可能会有很多的问题我没有遇到但各位可能遇到,故在文末贴出其他的安装链接,请自取)
~~~~~~~~~~~~~~~~~~~~华丽丽分割线~~~~~~~~~~~~~~~~~~~~
一、ubuntu16.04安装
1.首先当然是系统盘的制作,这个不作赘言,一般使用 UltraISO,具体度娘会告诉你;
2.紧接着就是安装,如何安装,如何分区,度娘也会一一告知,此处就说几个不同之处:
1)首先,带有独立显卡的主机,通常有独显输出和集显输出两种端口,而独显是需要安装驱动才可以使用的,所以最初装系统的时候需要使用集显输出的端口,否则你可能完全进不去安装界面;
2)其次,在BOOT界面选择启动项的时候,对U盘启动会出现两个选项,第一个带有前缀UEFI,另一个这没有。这是因为现在的主板驱动一般有 BIOS 和 UEFI 两种,虽说 UEFI 是BIOS 的继任者,但 BIOS 才用起来 更加顺手。更重要的是在用UEFI模式进行ubuntu16.04安装的时候,在安装后期会出现bug中断,具体什么不记得了,与grub有关,会导致系统无法启动,而这与UEFI有莫大的关系,所以安全起见,选后不带UEFI前缀的,也就是BIOS模式进行系统安装;
3)ubuntu16.04 安装好之后,启动可能会出现 grub rescue 故障,找不到 normal.mod,这可以通过我的另一篇 post 解决,附上解救指南:ubuntu系统下grub rescue故障恢复
3.至此,ubuntu16.04 算是安装完毕,第一次撒花o(∩_∩)o
注:需要注意的是,目前我们也一直在使用集成显卡输出!且直到安装好nvidia驱动重启都要一直使用集成显卡输出!!!
二、各种依赖环境安装:
- sudo apt-get update
- sudo apt-get upgrade
- sudo apt-get install -y build-essential cmake git pkg-config
- sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
- sudo apt-get install -y libatlas-base-dev
- sudo apt-get install -y --no-install-recommends libboost-all-dev
- sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev
- # (Python general)
- sudo apt-get install -y python-pip
- # (Python 2.7 development files)
- sudo apt-get install -y python-dev
- sudo apt-get install -y python-numpy python-scipy
- # (or, Python 3.5 development files)
- sudo apt-get install -y python3-dev
- sudo apt-get install -y python3-numpy python3-scipy
- # (OpenCV 2.4)
- sudo apt-get install -y libopencv-dev
- (or, OpenCV 3.X - see other blogs in the end of the post)
以上是caffe官方安装指南的内容,亲测好用无疑,其实文末的caffe官方安装指南还是很不多错的指南,只是在nvidia驱动、cuda、cudnn、open3.x方面很不足(貌似这些都是重点内容,结果都被caffe官方文档屏蔽了,手动滑稽(*^__^*) )
注:在upgrade时,可能会提起缺少fireware,这个不是大问题,直接上网下载相应版本的固件安装即可
三、Nvidia驱动+cuda安装
写在安装前:
1)其实在cuda的安装中会涉及到nvidia驱动的安装,但是屡次尝试,总是会出现kernel souce的error,所以,还是提前安装为好。
2)安装nvidia驱动需要在命令行模式下,但有时可能会出现无法进入命令行或者进入命令行黑屏及显示nouveau相关的error提示,这是可通过以下的改动进行修复,重启后可能会出现屏幕显示非常延迟卡顿的现象,这正常,因为我们把显示驱动修改了。不过建议把需要的nvidia驱动、cuda和cudnn都下载好后再进行处理,否则如此卡顿会很忧伤的o(∩_∩)o
- sudo gedit /etc/default/grub
- GRUB_CMDLINE_LINUX_DEFAULT = "quiet splash nomodeset"
- sudo update-grub
- sudo reboot
2.下载需要的cuda程序,下载runfile版本的,同样附上飞行链接:CUDA下载
2.卸载之前安装的nvidia驱动程序,新安装的系统不需要的这一步,但依旧写在此以告后人,因为nvidia驱动重复安装会出现循环登录无法进入系统的问题,或者反过来说,循环登录无法进入系统一般都是由于显卡驱动出现问题导致的,卸载后重新安装即可:
- sudo apt-get remove –purge nvidia*
- sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
- blacklist nouveau
- options nouveau modeset=0
- sudo update-initramfs -u
再配置环境
- sudo gedit ~/.bashrc
- # add the following two lines
- 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
- source ~/.bashrc
1)进入命令行模式(Ctrl+Alt+F1),并关闭桌面
- sudo service lightdm stop
- sudo chmod a+x NVIDIA-Linux-x86_64-375.26.run # optional
- sudo bash ./NVIDIA-Linux-x86_64-375.26.run --no-opengl-files
5.进入cuda安装文件的文件夹,安装cuda
- sudo sh cuda_8.0.61_375.26_linux.run
2)在选择安装cuda samples,选 ‘n’,因为不需要
3)其余选项选择‘y’,或默认就行了
4)安装成功后,关机(命令为 shutdown -h now),更换显示输出端口为独立显卡的输出端后再启动;此处如果直接重启(sudo reboot)的话,由于未更换显示输出端口,而原驱动被禁用等原因,会出现循环登录的情况,此时强行关机再更换显示输出端口即可。
6.启动后配置cuda环境变量
1)一般配置此步即可,但有时会出现问题,可以选择用root用户进行编辑,也可以尝试后两步
- gedit ~/.bashrc # if can't edit, add sudo before
- # add the two lines following
- export PATH=/usr/local/cuda/bin:$PATH
- export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
- # cuda can change as cuda-8.0 specifically
- source ~/.bashrc # MUST source
2)
- sudo gedit /etc/ld.so.conf.d/cuda.conf
- # add the two lines following
- /usr/local/cuda/lib64
- /lib
- sudo ldconfig -v
- sudo gedit /etc/profile
- # add following two lines
- PATH=/usr/local/cuda/bin:$PATH # 不能有空格!!
- export PATH
- source /etc/profile
7.验证是否安装成功:
- cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
- sudo make
- ./deviceQuery
四、安装cudnn
1.下载对应cuda版本的cudnn,可以去官网下载,需要注册;不想注册的可以从网盘下载;网盘是5.1,建议去下载6.0(tensorflow要求6.0),用下面的命令行下载:
- wget http://developer.download.nvidia.com/compute/redist/cudnn/v6.0/cudnn-8.0-linux-x64-v6.0.tgz
2.下载后解压,得到cuda文件夹,里面有include和lib64两个子文件夹
3.进入include子文件夹
- sudo cp cudnn.h /usr/local/cuda/include/ # 复制头文件到之前安装的cuda目录
4.进入lib64子文件夹,可以图形界面进入看清楚版本号,方便后期修改
- sudo cp lib* /usr/local/cuda/lib64/ # 复制动态链接库到之前安装的cuda目录,注意查看
5.重新生成软链接
- cd /usr/local/cuda/lib64/sudo rm -rf libcudnn.so libcudnn.so.x # 删除原有动态文件,版本号注意变化,可在cudnn的lib64文件夹中查看
- sudo ln -s libcudnn.so.x.x.x libcudnn.so.x # 生成软衔接,具体看cudnn的lib64中为什么版本,注意变化
- sudo ln -s libcudnn.so.x libcudnn.so # 生成软链接
- sudo ldconfig -v
- nvcc --version # or nvcc -V
五、安装caffe
1.下载caffe,此处下载caffe-master源码,并解压至任何地方即可;
2.进入caffe根目录,进行配置,文件中对每项设置都有注释,看看基本能懂
- sudo cp Makefile.config.example Makefile.config
- sudo gedit ./Makefile.config
- USE_CUDNN := 1
- CUDA_DIR := /usr/local/cuda # or cuda-8.0
- CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
- -gencode arch=compute_20,code=sm_21 \
- -gencode arch=compute_30,code=sm_30 \
- -gencode arch=compute_35,code=sm_35 \
- -gencode arch=compute_50,code=sm_50 \
- -gencode arch=compute_52,code=sm_52 \
- -gencode arch=compute_60,code=sm_60 \
- -gencode arch=compute_61,code=sm_61 \
- -gencode arch=compute_61,code=compute_61
- BLAS := atlas
- PYTHON_INCLUDE := /usr/include/python2.7 \
- /usr/lib/python2.7/dist-packages/numpy/core/include \
- /usr/local/lib/python2.7/dist-packages/numpy/core/include
- PYTHON_LIB := /usr/lib
- WITH_PYTHON_LAYER := 1
- 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/
- BUILD_DIR := build
- DISTRIBUTE_DIR := distribute
- TEST_GPUID := 0
- Q ?= @
- sudo gedit ./Makefile
- # replace this line
- NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
- # with the following line
- NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
- # ---[ Includes
- set(${CMAKE_CXX_FLAGS} "-D_FORCE_INLINES ${CMAKE_CXX_FLAGS}")
- cd /usr/lib/x86_64-linux-gnu
- sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so # 源文件的版本可能有所不同,可进入文件夹进行查看后再确定
- sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
- cd python
- for req in $(cat requirements.txt); do pip install $req; done
- for req in $(cat requirements.txt); do sudo -H pip install $req --upgrade; done
- make all -j8
- make runtest -j8
六、编译其他结构
可以编译caffe的matlab和python接口,此处我们只编译python接口
1.直接进入caffe根目录,编译pycaffe
- make pycaffe -j8
- sudo gedit ~/.bashrc
- # add the following line
- export PYTHONPATH=/path/to/caffe-master/python:$PYTHONPATH
- source ~/.bashrc
- python
- >>> import caffe # 不报错即安装成功
- import sys
- sys.path.append('/path/to/caffe-master/python')
- import caffe
- sudo pip install jupyter
- # 命令终端输入以下语句即可使用
- jupyter notebook