现在,开始阅读此《GPU Ready Apps Guide》(GPU Ready 应用程序指南)。
Caffe2 是一个深度学习框架,可以实现简单、灵活的深度学习。Caffe2 基于原始 Caffe 构建,设计时着重考虑了表达式、速度和模块化,允许以更灵活的方式组织计算。
Caffe2 旨在利用社区对新模型和算法的贡献,来为您提供一种简单、直观的深度学习实验方法。Caffe2 随附了可交互的原生 Python 和 C++ API,因此您现在可快速生成原型,并随后轻松进行优化。
Caffe2 使用最新的 NVIDIA Pascal™ GPU 进行加速,并可以在单个节点内的多 GPU 间扩展。如今,您训练模型的时间可以从几天缩短到几小时。
Caffe2 是一个深度学习框架,同时支持卷积和递归网络。
Caffe2 需要 protobuf、atlas、glog、gtest、limdb、leveldb、snappy、OpenMP、OpenCV、pthread-stubs、cmake、python-protobuf 以及 numpy。
对于 GPU 加速,CUDA 和 cuDNN 是必须的。支持最新版本的 cuDNN (5.1.10)。
下面列出了在 Ubuntu 16.04 系统上安装依赖项的示例过程。
sudo apt-get install libprotobuf-dev protobuf-compiler libatlas-base-dev libgoogle-glog-dev libgtest-dev liblmdb-dev libleveldb-dev libsnappy-dev python-dev python-pip libiomp-dev libopencv-dev libpthread-stubs0-dev cmake python-protobuf git
sudo pip install numpy [matplotlib ipython (如果还想使用 ipython notebook)]
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
wget http://developer.download.nvidia.com/compute/redist/cudnn/v5.1/libcudnn5_5.1.10-1+cuda8.0_amd64.deb
wget http://developer.download.nvidia.com/compute/redist/cudnn/v5.1/libcudnn5-dev_5.1.10-1+cuda8.0_amd64.deb
sudo dpkg -i libcudnn5*
git clone --recursive https://github.com/caffe2/caffe2.git
cd caffe2
mkdir build && cd build
cmake ..
make
有多种验证 Caffe2 构建是否正常工作的方法,其中一种是使用位于 $CAFFE2_ROOT/build/caffe2/binaries 中的示例二进制文件,而另一种是使用位于 $CAFFE2_ROOT/build/caffe2/python 中的 python 脚本。以“_test”结尾的二进制文件全部可用于验证 Caffe2 构建是否正常工作。以下是来自 elementwise_op_gpu_test 的示例输出。
user@gpu-platform:~/framework/caffe2/build/caffe2/binaries$ ./elementwise_op_gpu_test
Running main() from gtest_main.cc
[==========] Running 4 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 4 tests from ElementwiseGPUTest
[ RUN ] ElementwiseGPUTest.And
[ OK ] ElementwiseGPUTest.And (118 ms)
[ RUN ] ElementwiseGPUTest.Or
[ OK ] ElementwiseGPUTest.Or (2 ms)
[ RUN ] ElementwiseGPUTest.Xor
[ OK ] ElementwiseGPUTest.Xor (1 ms)
[ RUN ] ElementwiseGPUTest.Not
[ OK ] ElementwiseGPUTest.Not (1 ms)
[----------] 4 tests from ElementwiseGPUTest (122 ms total)
[----------] Global test environment tear-down
[==========] 4 tests from 1 test case ran. (122 ms total)
[ PASSED ] 4 tests.
user@gpu-platform:~/framework/caffe2/build/caffe2/binaries$
提供了多个 python 脚本,可以让用户轻松地使用不同的神经网络架构测试 Caffe2。以下显示了来自 convnet_benchmarks.py 的示例结果。
user@gpu-platform:~/frameworks/caffe2/build/caffe2/python$ python convnet_benchmarks.py --batch_size 1 --model AlexNet --cudnn_ws 500 --iterations 50
AlexNet: running forward-backward.
I0313 09:52:50.316722 9201 net_dag.cc:112] Operator graph pruning prior to chain compute took: 3.1274e-05 secs
I0313 09:52:50.316797 9201 net_dag.cc:363] Number of parallel execution chains 34 Number of operators = 61
I0313 09:52:50.316933 9201 net_dag.cc:525] Starting benchmark.
I0313 09:52:50.316938 9201 net_dag.cc:526] Running warmup runs.
I0313 09:52:51.110822 9201 net_dag.cc:536] Main runs.
I0313 09:52:52.975484 9201 net_dag.cc:547] Main run finished. Milliseconds per iter: 37.2928. Iters per second: 26.8149
如果尝试运行任何 python 脚本时收到了重大错误提示,请将 caffe2 添加到 PYTHONPATH 中或在脚本中手动添加。终端的示例行如下
export PYTHONPATH=$PYTHONPATH:$CAFFE2_ROOT/build
或者,在 Python 脚本内使用 Python sys 模块添加该路径。
CAFFE_ROOT=path/to/caffe2
import sys
sys.path.insert(0, CAFFE_ROOT+'/build')
除对 AlexNet 进行测试外,此脚本还可用于测试不同的批尺寸和网络。此命令将为两个使用 Inception 网络配置且批量大小不同(16 和 32)的网络提供结果。下文中提供了使用 K80 上单个 GPU 的典型输出。
for BS in 16 32; do python convnet_benchmarks.py --batch_size $BS --model Inception --cudnn_ws 1000 ; done
user@sas03:~/frameworks/caffe2/build/caffe2/python$ for BS in 16 32; do python convnet_benchmarks.py --batch_size $BS --model Inception --cudnn_ws 500 ; done
Inception: running forward-backward.
I0317 00:54:50.650635 13008 net_dag.cc:123] Operator graph pruning prior to chain compute took: 0.000371156 secs
I0317 00:54:50.651175 13008 net_dag.cc:374] Number of parallel execution chains 381 Number of operators = 410
I0317 00:54:50.652022 13008 net_dag.cc:536] Starting benchmark.
I0317 00:54:50.652041 13008 net_dag.cc:537] Running warmup runs.
I0317 00:54:53.824313 13008 net_dag.cc:547] Main runs.
I0317 00:54:55.567314 13008 net_dag.cc:558] Main run finished. Milliseconds per iter: 174.29. Iters per second: 5.73757
Inception: running forward-backward.
I0317 00:54:59.600677 13051 net_dag.cc:123] Operator graph pruning prior to chain compute took: 0.000389294 secs
I0317 00:54:59.601260 13051 net_dag.cc:374] Number of parallel execution chains 381 Number of operators = 410
I0317 00:54:59.602026 13051 net_dag.cc:536] Starting benchmark.
I0317 00:54:59.602046 13051 net_dag.cc:537] Running warmup runs.
I0317 00:55:05.079577 13051 net_dag.cc:547] Main runs.
I0317 00:55:08.394855 13051 net_dag.cc:558] Main run finished. Milliseconds per iter: 331.52. Iters per second: 3.01641
表 1.使用 P100e 获得的示例结果。
Batch Size | Network (milliseconds/iteration) | |||
AlexNet | Overfeat | Inception | VGGA | |
16 | 24.6273 | 71.0308 | 65.605 | 166.251 |
32 | 40.0542 | 118.455 | 115.41 | 301.975 |
64 | 70.194 | 214.297 | 212.805 | 584.622 |
128 | 128.4 | 411.872 | 410.167 | 1149.21 |
Batch Size | Network (image/s == iteration/millisecond*Batch Size/iteration*1,000ms/1s) | |||
AlexNet | Overfeat | Inception | VGGA | |
16 | 650 | 225 | 244 | 96 |
32 | 799 | 270 | 277 | 106 |
64 | 912 | 299 | 301 | 109 |
128 | 997 | 311 | 312 | 111 |
Note, the benchmarks results shown above are for synthetic data only, and does not use images from the ImageNet dataset.
GoogLeNet 是较新的深度学习模型,可以利用更深度、更广泛的网络提供更高准确度的图像分类。