Caffe + Fedora 21 + CUDA 7.5 开发环境配置总结

阅读须知:本文主要针对使用Caffe进行深度学习研究的用户,提供Fedora 21的系统开发环境配置说明,未使用Fedora 22/23的主要原因是CUDA 7.5的更新支持与对稳定性的需求,未使用CentOS 7的主要原因是虽相对稳定但缺乏较新的软件包(若为服务器端则仍建议使用CentOS 7)。除少数系统依赖的特性外,本文大多数内容亦可用于Ubuntu的配置参考

1. 系统配置


系统更新


安装yum-axelget

yum-axelget是一款应用于yum的并行下载工具,可显著加快更新速度。

sudo yum install yum-axelget yum-plugin-fastestmirror

全面更新

sudo yum update

更新后建议重启。

基础软件安装


安装fedy

fedy类似于ubuntu tweaks,可用于方便的安装与调整部分基础软件和系统设置,包括但不限于:

  • Google Chrome
  • Dropbox
  • Sublime Text 3
  • Archive formats
  • Better font rendering
  • SSD optimization

经过字体安装与设置后系统字体渲染将大为改善,其余UI设置可通过yum安装gnome-tweak-tool完成。

此处建议安装sublime text,若未安装,请将后文的subl命令替换为gedit

fedy

sudo bash -c 'su -c "curl http://folkswithhats.org/fedy-installer -o fedy-installer && chmod +x fedy-installer && ./fedy-installer"'


基础开发工具与开发库

Development ToolsDevelopment Libraries包含了众多fedora未预装的开发工具与开发库,包括gcc, gcc-c++, make等。

sudo yum groupinstall "Development Tools" "Development Libraries"


安装terminator

terminator基于python写就,可用于替代系统自带的终端gnome terminal,相较而言提供了更多配置项,界面更美观,功能更丰富实用。

sudo yum install terminator

安装后可在Preferences的keybindings中通过直接按键调整如下:

  • split_horiz -> Shift+Ctrl+D
  • split_vert -> Shift+D

如此可与OS X下的iterm2保持一致,方便的切分子屏。


安装zsh与prezto 1

zsh作为一款广泛流行的shell,可用于替代系统所自带的bash,即使是为了目录跳转的自动补全功能也值得一试。

prezto为zsh提供了众多预置配置,与oh-my-zsh相比更加简洁而不繁复

sudo yum install zsh

git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"

ln -s ~/.zprezto/runcoms/zlogin ~/.zlogin
ln -s ~/.zprezto/runcoms/zlogout ~/.zlogout
ln -s ~/.zprezto/runcoms/zpreztorc ~/.zpreztorc
ln -s ~/.zprezto/runcoms/zprofile ~/.zprofile
ln -s ~/.zprezto/runcoms/zshenv ~/.zshenv
ln -s ~/.zprezto/runcoms/zshrc ~/.zshrc

安装后开启zsh,并切换当前user与root user的默认shell为zsh

zsh
chsh -s /usr/bin/zsh
sudo chsh -s /usr/bin/zsh

编辑文件subl ~/.zpreztorc, 添加git等相关功能

# Set the Prezto modules to load (browse modules).
# The order matters.
zstyle ':prezto:load' pmodule \
  'environment' \
  'terminal' \
  'editor' \
  'history' \
  'directory' \
  'spectrum' \
  'utility' \
  'completion' \
  'git' \
  'archive' \
  'prompt'

完成后可以使用短命令显著简化git操作,相关说明可以参考prezto文档

Btw, install zsh-background-notify:

  1. Clone the repository:
git clone https://github.com/t413/zsh-background-notify.git ~/.zsh-background-notify
  1. And add one line your .zshrc:
source $HOME/.zsh-background-notify/bgnotify.plugin.zsh

Done!


安装pyenv

pyenv是一款python环境管理工具,可用于方便的安装与管理众多python版本,包括流行的科学计算平台Anaconda

curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | zsh

安装后需要将如下语句加入shell配置文件

此处应为~/.zshrc而非~/.bashrc,可通过ctrl+h显示或在终端中使用subl ~/.zshrc打开

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

完成添加后重启终端,使用如下命令安装并设置默认python版本为Anaconda

之后可通过pyenv versions命令查看已安装与默认python版本,并通过pyenv global [python-version]命令切换

pyenv install anaconda-2.3.0
pyenv global anaconda-2.3.0

Anaconda提供了一个类似于pip的包管理工具conda

conda update conda    # 更新module
conda list    # 查看已安装module
conda install [module] # 安装新module

如conda所预置的module无法满足需求,可尝试使用pip install安装,另外anaconda.org(原binstar.org)中提供了众多用户自建的module,如opencv等,可自行搜索安装。


可选软件安装


安装JDK 2

因为jetbrains系的多款IDE以及Android Studio均需要JDK运行,此处推荐JDK 1.7。

下载

cd ~/Downloads
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm"

安装

sudo yum localinstall jdk-7u79-linux-x64.rpm

当前JDK安装路径为/usr/java/jdk1.7.0_79,将以下语句加入/etc/profile.d/java.sh以设置环境变量:

export JDK_HOME=/usr/java/jdk1.7.0_79
export PATH=$JDK_HOME/bin:$PATH
export JAVA_HOME=/usr/java/jdk1.7.0_79
export PATH=$JAVA_HOME/bin:$PATH

保存后, 执行下列命令, 使环境变量立即生效

source /etc/profile.d/java.sh


安装Redshift

redshift是一款与f.lux类似的屏幕色温调节软件,对于视力保护有一定帮助。

sudo yum install redshift
sudo redshift


安装Clang

Clang可以认为是GCC的替代品,可以用于编译C、C++、Objective-C和Objective-C++。其提供了更友好的报错信息,同时提供了一个代码静态分析器,可以用于分析代码中可能出现的bug和内存溢出问题。 3

sudo yum install clang clang-analyzer


配置git

git config --global user.name "your name"
git config --global user.email "your@email"

git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'


安装Source Code Pro及文泉驿字体

sudo yum install adobe-source-code-pro-fonts

sudo yum install wqy-microhei-fonts


安装Remarkable

remarkable作为一款markdown编辑器,功能齐备,基本满足编辑需求,相比sublime text+markdown preview插件的方法更加直观。

http://remarkableapp.github.io/index.html


安装Foxit Reader

foxit reader的linux版本,为时隔六年后的最新更新,字体渲染明显好于Gnome Evince和Google Chrome,常用的标注与高亮功能一应俱全。

https://www.foxitsoftware.com/downloads


安装Mendeley 3

Mendeley是一个跨平台的文献管理软件,其内部自带了一个可以添加注释的PDF阅读器。

下载Generic Linux (64 bits)

http://www.mendeley.com/download-mendeley-desktop

安装

tar -xvf mendeleydesktop-1.15.1-linux-x86_64.tar.bz2
sudo mv mendeleydesktop /opt
cd /opt/mendeleydesktop/bin
./install-mendeley-link-handler.sh /opt/mendeleydesktop/bin/mendeleydesktop
sudo yum install qtwebkit

注销重新登陆,添加图标

cp /opt/mendeleydesktop/share/icons/hicolor/128x128/apps/mendeleydesktop.png ~/.local/share/icons/

2. CUDA与显卡驱动安装


下载CUDA 7.5安装文件

https://developer.nvidia.com/cuda-downloads

建议存于~/Downloads文件夹,并赋予可执行属性

chmod +x ./cuda_7.5.18_linux.run


开启root user权限

sudo su


安装相应版本kernel

此处应确保在sudo yum update后进行,否则版本可能发生错误。

yum install gcc kernel-devel-$(uname -r)


禁用默认nouveau驱动 4

subl /etc/modprobe.d/blacklist.conf
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf

之后在/etc/sysconfig/grub文件的GRUB_CMDLINE_LINUX=这一行添加rd.driver.blacklist=nouveau

激活,之后卸载nouveau驱动。

grub2-mkconfig -o /boot/grub2/grub.cfg
yum remove xorg-x11-drv-nouveau.x86_64


禁用图形界面启动

systemctl set-default multi-user.target
reboot


重启后进入终端环境,安装CUDA

sudo su
cd ~/Downloads
./cuda_7.5.18_linux.run

若安装发生kernel问题,执行以下命令后继续安装:

yum install kernel-devel-$(uname -r)

grub2-mkconfig -o /boot/grub2/grub.cfg


恢复图形界面启动并重启

systemctl set-default graphical.target
reboot


验证CUDA及驱动安装 5

重启后进入/usr/local/cuda/samples,, 执行下列命令来build samples:

sudo make all -j8

全部编译完成后, 进入 samples/bin/x86_64/linux/release, 运行deviceQuery

./deviceQuery

如果出现显卡信息, 则驱动及显卡安装成功,可在系统中启动NVIDIA X Server Settings查看显卡状态。


设置CUDA环境变量

创建文件sudo subl /etc/profile.d/cuda.sh,加入以下语句:

export PATH=$/usr/local/cuda-7.5/bin:$PATH

保存后, 执行下列命令, 使环境变量立即生效

source /etc/profile.d/cuda.sh

创建文件sudo subl /etc/ld.so.conf.d/cuda.conf,加入以下语句:

/usr/local/cuda/lib64

保存后,执行下列命令使之立刻生效

sudo ldconfig

3. Caffe安装


下载Caffe最新版本

git clone https://github.com/BVLC/caffe.git


安装基础依赖库 6

sudo yum install protobuf-devel leveldb-devel snappy-devel opencv-devel boost-devel hdf5-devel

sudo yum install gflags-devel glog-devel lmdb-devel atlas-devel cmake numpy


安装pycaffe依赖 5

打开新的终端, 用which pythonwhich pip确定使用的是anaconda-2.3.0提供的python环境,然后进入caffe_root/python, 执行下列命令

for req in $(cat requirements.txt); do pip install $req; done


安装OpenBLAS 7

Caffe的BLAS接口可选Atlas, Intel MKL与OpenBLAS,此处推荐OpenBLAS

git clone https://github.com/xianyi/OpenBLAS.git
cd OpenBLAS
make -j8
sudo make install

安装后路径位于/opt/OpenBLAS,之后设置OpenBLAS环境变量

创建文件sudo subl /etc/ld.so.conf.d/openblas.conf,加入以下语句:

/opt/OpenBLAS/lib

保存后,执行下列命令使之立刻生效

sudo ldconfig


安装cuDNN 5

下载

https://developer.nvidia.com/cudnn

安装

tar -zxvf cudnn-7.0-linux-x64-v3.0-prod.tgz
cd cuda
sudo cp include/cudnn.h /usr/local/cuda/include/
sudo cp lib64/lib* /usr/local/cuda/lib64/

更新软链接

cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.7.0
sudo ln -s libcudnn.so.7.0.64 libcudnn.so.7.0
sudo ln -s libcudnn.so.7.0 libcudnn.so


安装OpenCV与Matlab

此处非必须,可参考 5.

  • 对于OpenCV,如果之后只用到pycaffe接口的话,在编译caffe与pycaffe完成后直接使用conda安装即可,若提前安装会出现openblas冲突等错误。
conda install -c http://conda.anaconda.org/menpo opencv3
  • 对于Matlab,当前版本R2015b需要gcc 4.7,而fedora 21自带版本为gcc 4.9,需要安装所需版本matcaffe才能编译通过。 安装gcc 4.7可参考 8


make.config文件

完成如上配置之后,在caffe目录编辑make.config如下,请根据具体配置酌情修改。

USE_CUDNN := 1

# CPU_ONLY := 1

# CUSTOM_CXX := g++

CUDA_DIR := /usr/local/cuda

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_50,code=compute_50

BLAS := open
BLAS_INCLUDE := /opt/OpenBLAS/include
BLAS_LIB := /opt/OpenBLAS/lib

# MATLAB_DIR := /usr/local/MATLAB/R2015b/

ANACONDA_HOME := $(HOME)/.pyenv/versions/anaconda-2.3.0
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
		$(ANACONDA_HOME)/include/python2.7 \
		$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
PYTHON_LIB := $(ANACONDA_HOME)/lib

WITH_PYTHON_LAYER := 1

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

BUILD_DIR := build
DISTRIBUTE_DIR := distribute

# DEBUG := 1

TEST_GPUID := 0

Q ?= @


修复libhdf5错误

cd /usr/lib64/
sudo ln -s libhdf5_hl.so.8.0.2 libhdf5_hl.so.10
sudo ln -s libhdf5.so.8.0.2 libhdf5.so.10


编译Caffe

cd ~/Documents/Library/caffe
make all -j8
make pycaffe
make test
make runtest

Xuejian Rong /
Published under (CC) BY-NC-SA in categories tagged with