简介
Caffe 是一个广泛使用的清晰、高效、模块化的深度学习框架,是贾扬清(Yangqing Jia)在UC Berkeley 读博期间建立的项目,由伯克利AI实验室(Berkeley AI Research,BAIR)及社区贡献者开发。 Caffe 具有如下特点:架构清晰,模型和优化通过配置定义,CPU和GPU切换通过设置flag;代码扩展性好,开发者贡献了大量的改进,框架的代码和模型保持业界最新;运行速度快,适合科研和商业应用;丰富的社区,有从学术研究项目到大型商业项目的广泛应用,包括图像、语音、多媒体方面。
本教程主要介绍Caffe 在Centos 7上的安装和使用,包括安装过程,基本使用和简单示例运行。
GPU驱动安装
根据GPU型号从相应网站下载驱动,例如使用NVIDIA Tesla M60,从NVIDIA网站选择对应的型号和操作系统,CUDA Toolkit版本,下载驱动文件,如NVIDIA-Linux-x86_64-375.66.run,运行驱动文件,根据提示安装:
sh NVIDIA-Linux-x86_64-375.66.run
安装完成后可以通过NVIDIA命令工具nvidia-smi查看GPU情况:
nvidia-smi
Wed Jun 28 11:39:28 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.39 Driver Version: 375.39 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla M60 Off | 0000:00:02.0 Off | Off |
| N/A 36C P0 38W / 150W | 0MiB / 8123MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+:
Caffe 安装过程
1.安装基础依赖库
安装Caffe所需的系统依赖库:
sudo yum install protobuf-devel leveldb-devel snappy-devel opencv-devel boost-devel hdf5-devel
sudo yum install gflags-devel glog-devel lmdb-devel
2.安装CUDA
从NVIDIA网站选择最新的驱动版本,选择Linux,x86_64,CentOS 7,下载rpm(local)驱动文件,并安装
sudo rpm -i cuda-repo-rhel7-8-0-local-ga2-8.0.61-1.x86_64.rpm
sudo yum clean all
sudo yum install cuda
设置环境变量
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:/usr/local/cuda-8.0/extras/CUPTI/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-8.0/
3.安装cuDNN
从NVIDIA网站下载cuDNN 安装包,根据GPU及CUDA版本选择对应cuDNN版本,下载cuDNN v5.1 for CUDA8.0,解压拷贝到CUDA安装目录
cp include/* /usr/local/cuda/include
cp lib64/* /usr/local/cuda/lib64
4.安装BLAS
选择安装ATLAS,安装命令如下:
sudo yum install atlas-devel
cd /usr/lib64/atlas
sudo ln -sv libsatlas.so.3.10 libcblas.so
sudo ln -sv libsatlas.so.3.10 libatlas.so
5.下载Caffe源码
从github下载Caffe源码
git clone https://github.com/BVLC/caffe.git
6.安装python 依赖
进入caffe/python目录,安装requirements中依赖库
for req in $(cat requirements.txt); do pip install $req; done
7.编译
编辑Caffe 目录Makefile.config 文件,根据依赖库情况修改配置: 主要修改如下:
USE_CUDNN := 1
BLAS := atlas
BLAS_INCLUDE := /usr/include/atlas
BLAS_LIB := /usr/lib64/atlas
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib64/python2.7/site-packages/numpy/core/include
PYTHON_LIB := /usr/lib64
编译和测试Caffe,-j选项为编译并行线程数,一般为CPU核数。
make all -j8
make test -j8
make runtest -j8
Caffe 使用示例
1.运行Caffe
进入Caffe 安装目录,执行./build/tools/caffe,可以根据caffe命令选项使用
./build/tools/caffe
caffe: command line brew
usage: caffe <command> <args>
commands:
train train or finetune a model
test score a model
device_query show GPU diagnostic information
time benchmark model execution time
2.MNIST 例子
进入Caffe目录,执行如下命令
下载数据集:
./data/mnist/get_mnist.sh
转换数据集:
./examples/mnist/create_mnist.sh
训练例子:
./examples/mnist/train_lenet.sh
训练输出示例如下:
./examples/mnist/train_lenet.sh
I0628 15:12:45.510594 54419 caffe.cpp:218] Using GPUs 0
I0628 15:12:46.025655 54419 caffe.cpp:223] GPU 0: Tesla M60
I0628 15:12:46.311704 54419 solver.cpp:44] Initializing solver from parameters:
test_iter: 100
test_interval: 500
base_lr: 0.01
display: 100
max_iter: 10000
lr_policy: "inv"
gamma: 0.0001
power: 0.75
momentum: 0.9
weight_decay: 0.0005
snapshot: 5000
snapshot_prefix: "examples/mnist/lenet"
...
I0628 15:13:12.870817 54419 sgd_solver.cpp:273] Snapshotting solver state to binary proto file examples/mnist/lenet_iter_10000.solverstate
I0628 15:13:12.874179 54419 solver.cpp:310] Iteration 10000, loss = 0.00265072
I0628 15:13:12.874205 54419 solver.cpp:330] Iteration 10000, Testing net (#0)
I0628 15:13:12.962249 54426 data_layer.cpp:73] Restarting data prefetching from start.
I0628 15:13:12.964479 54419 solver.cpp:397] Test net output #0: accuracy = 0.9906
I0628 15:13:12.964511 54419 solver.cpp:397] Test net output #1: loss = 0.0283195 (* 1 = 0.0283195 loss)
I0628 15:13:12.964524 54419 solver.cpp:315] Optimization Done.
I0628 15:13:12.964529 54419 caffe.cpp:259] Optimization Done.