build-essential 安装
sudo apt-get update
sudo apt-get install build-essential
安装cuda
准备工作:
(1)nvdia官网下载cuda_7.5.18_linux.run安装文件
(2) cd到安装目录
(3修改.run安装文件可执行权限
sudo chmod +755 cuda_7.5.18_linux.run
(4)关闭 X server
logout,在命令行界面(系统登陆界面按ctrl+alt+F1)输入以下命令:
sudo /etc/init.d/lightdm stop
安装:
sudo ./cuda_7.5.18_linux.run -no-opengl-libs
设置环境变量:
echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
完成重启机器就好。
Note:
(1)如果后续编译出现找不到libcudart.so,可进行下面操作:
sudo gedit /etc/ld.so.conf.d/cuda.conf
在cuda.conf文件中添加下面目录:
/usr/local/cuda/lib64
/lib
保存退出,使用下面命令使之立即生效:
sudo ldconfig -v
(2)如果cuda 安装完出现,系统图形操作界面无法进入的问题,可尝试用以下命令解决:
sudo apt-get remove --purge nvidia-*
sudo apt-get install ubuntu-desktop
完成重启机器。
验证安装:
cd /usr/local/cuda/samples/1_Utilities/deviceQuery
make
./deviceQuery
显示Pass即可
安装 OpenBLAS
sudo apt-get install gfortran
mkdir ~/code (路径可以自己修改)
cd ~/code
git clone https://github.com/xianyi/OpenBLAS.git (没有git先按提示安装git)
cd OpenBLAS
make -j $(($(nproc) + 1))
sudo make PREFIX=/usr/local install
安装boost
sudo apt-get install libboost-all-dev
安装 Opencv
见 版本3.0,安装方法
安装 protobuf, glog, gflags
sudo apt-get install libprotobuf-dev libgoogle-glog-dev libgflags-dev protobuf-compiler
安装 hdf5, leveldb, snappy, lmdb
sudo apt-get install libhdf5-serial-dev libleveldb-dev libsnappy-dev liblmdb-dev
下载地址: http://continuum.io/downloads
切换到下载目录:
cd ~/Downloads
运行安装程序:
bash Anaconda*.sh
按提示进行操作,若询问是否添加环境变量,选择“是”。
关闭并重新打开终端,使新环境变量生效。
conda install hdf5
Note: conda下的库只对python有效
cd /usr/lib/x86_64-linux-gnu
sudo ln -s libhdf5.so.7 libhdf5.so.9
sudo ln -s libhdf5_hl.so.7 libhdf5_hl.so.9
sudo ldconfig
进入下载目录:
cd ~/Downloads/
解压文件,并拷贝它们到CUDA目录:
tar xvf cudnn*.tgz
cd cuda
sudo cp */*.h /usr/local/cuda/include/
sudo cp */*.so* /usr/local/cuda/lib64/
这里要特别说明下,对于tensorflow,同样也需要CUDA和CUDNN,但是tensorflow对cudnn库文件,不能直接识别libcudnn.so的原文件,它会报错:Couldn't open CUDA library libcudnn.so。据寡人揣测,tensorflow加载libcudnn.so文件时必须通过libcudnn.so的link文件去找libcudnn.so.*.*(subversion)。
解决方案:在拷贝完CUDNN的so文件后,重新做link:
cd /usr/local/cuda/lib64
sudo rm libcudnn.so libcudnn.so.4
sudo ln -s libcudnn.so.4.0.7 libcudnn.so.4
sudo ln -s libcudnn.so.4 libcudnn.so
sudo ldconfig -v
其实,仔细观察原始文件,会发现libcudnn.so, libcudnn.so.4 和 libcudnn.so.4.0.7 3个文件大小完全一样(估计是同样的内容)。照一般库文件的做法,是只给 libcudnn.so.4.0.7一个文件,然后libcudnn.so.4.0.7生成链接文件libcudnn.so.4,libcudnn.so.4.生成链接文件libcudnn.so,便于版本管理。不知道CUDNN出于什么目的,要多建两个一模一样的文件侵占我的磁盘空间,简直就是在搞事情啊!配置并编译 Caffe
建个安装文件夹: (/home/$(user)/code)mkdir ~/code
cd ~/code
下载 Caffe
git clone https://github.com/BVLC/caffe.git
修改Caffe配置文件:
cd caffe
cp Makefile.config.example Makefile.config
sed -i 's/# USE_CUDNN := 1/USE_CUDNN := 1/' Makefile.config
sed -i 's/BLAS := atlas/BLAS := open/' Makefile.config
sed -i 's|# ANACONDA_HOME := $(HOME)/anaconda|ANACONDA_HOME := $(HOME)/anaconda2|' Makefile.config
sed -i 's|# PYTHON_INCLUDE := $(ANACONDA_HOME)|PYTHON_INCLUDE := $(ANACONDA_HOME)|' Makefile.config
sed -i 's|# $(ANACONDA_HOME)|$(ANACONDA_HOME)|' Makefile.config
sed -i 's|# PYTHON_LIB := $(ANACONDA_HOME)|PYTHON_LIB := $(ANACONDA_HOME)|' Makefile.config
sed -i 's|# WITH_PYTHON_LAYER := 1|WITH_PYTHON_LAYER := 1|' Makefile.config
用conda下载 Python依赖项:
for req in $(cat python/requirements.txt); do conda install $req; done
用pip下载conda不能安装的依赖项:
pip install -r python/requirements.txt
编译Caffe:
make all -j $(($(nproc) + 1))
make test -j $(($(nproc) + 1))
make runtest -j $(($(nproc) + 1))
Note:$($(nproc)+1)表示用nproc+1的核数量并行编译。
runtest
显示全PASS就表示成功啦。
编译 PyCaffe (Python 接口):
make pycaffe -j $(($(nproc) + 1))
设置环境变量:
echo "export CAFFE_ROOT=$(pwd)" >> ~/.bashrc
echo 'export PYTHONPATH=$CAFFE_ROOT/python:$PYTHONPATH' >> ~/.bashrc
重启终端,使环境变量生效。
测试:
ipython
import caffe
如果没问题,恭喜!~