(译)综合指南:通过Ubuntu 16.04上从Source构建来安装支持GPU的Caffe2
译者注:
原文来自:https://tech.amikelive.com/node-706/comprehensive-guide-installing-caffe2-with-gpu-support-by-building-from-source-on-ubuntu-16-04/?tdsourcetag=s_pctim_aiomsg, 不得不说该文作者知识比较丰富,研究比较深入,环境的配置讲解比较详细。个人认为这篇博客价值比较大,可能这篇博客会对深度学习的工作者们提供一定的帮助,所以打算翻译下来,并尽量还原原文的意思。如果有侵权,请联系我。
通过基础设施设置(译者注:即深度环境),我们可以方便地开始钻研深度学习,构建,训练和验证深度神经网络模型,并将模型应用到特定问题域。将深度学习原语转换为低级字节码执行可能是一项艰巨的任务,特别是对于没有深度学习计算兴趣的从业者。幸运的是,有几个深度学习框架提供高级编程接口,以帮助执行深度学习任务。(即深度学习平台)
在这篇文章中,我们将介绍Caffe2的安装,这是一个主要的深度学习框架。Caffe2采用Caffe,这是由加州大学伯克利分校Barkeley Vision and Learning Center(BVLC)开发的深度学习框架。Caffe2的开始旨在改善Caffe,特别是为了更好地支持大规模分布式模型培训,移动部署,降低精度计算,新硬件以及移植到多个平台的灵活性。
为什么从源安装?
需要注意的是,除了从源进行安装,还有一些更简单的选项,例如通过拉动和运行Caffe2 Docker镜像。可以在此处访问Caffe2映像的Docker存储库。尽管如此,如果您观察列表,image(docker中镜像)不是最新的,它们是针对旧版本的CUDA工具包和cuDNN构建的。因此,打算使用最新的Caffe2,CUDA或cuDNN功能的人应该考虑从源代码进行安装。
Caffe2 现在是Pytorch的一部分
之前caffe2是一个独立的库来维护的。自从2018年3月底依赖,Caffe2就已经被合并到Pytorch仓库中了,(译者注:现在已经不能通过单独编译caffe2的源代码得到Caffe2了,已经无法将所有模块clone下来了)。所以Caffe2的共同构建过程已经被集成到了pytorch中去。
关于源代码合并的动机可能存在疑问。正如公告文章中所解释的那样,合并之前是Caffe2和Pytorch之间的开发基础设施共享,导致共享代码和公共库的数量不断增加。然后得出结论,将两个项目合并为一个代码库将提高工程效率并提高框架的稳健性,尤其是在模型部署领域。
如果先前安装了Caffe2怎么办?在源代码合并之前安装Caffe2时,构建过程将输出随后复制到指定目录的头文件,动态库和python库。从理论上讲,用最新版本的文件替换旧的头文件和库文件就足够了。如果它不起作用,则在继续安装之前首先从已安装的目录中删除旧文件,然后进行清理
先决条件
我们将安装支持GPU的Caffe2。本文仅介绍具有NVIDIA GPU的计算机的安装过程。在完成安装之前,请验证是否满足这些项目。
-
确认已正确安装NVIDIA图形驱动程序。
您可以参考本文了解NVIDIA图形驱动程序的安装和功能检查。
-
验证是否已安装CUDA工具包。
如果您尚未安装CUDA工具包,不确定它是否已安装,或者是否要安装较新版本的CUDA工具包,请参阅本文,其中提供了有关CUDA工具包安装的更多详细信息。 -
验证是否已安装cuDNN。有关cuDNN安装的更多详细信息,
请参阅此文章 -
从先前的Caffe2安装中删除文件
如果您之前安装了Caffe2并且想要进行升级,则可能需要清除在先前的Caffe 2安装中创建和复制的文件。
注意:这通常可以跳过,因为构建工具将首先检查系统中安装的Caffe2的现有版本,然后再用新的版本替换它
sudo rm -vRf /usr/local/include/caffe2
sudo rm -vf /usr/local/lib/libcaffe2*
此外,我们可能需要从Python包目录中删除python API(路径可能因安装的Python版本而异)。
sudo rm -vRf /usr/local/lib/python2.7/dist-packages/caffe2
检查完所有先决条件后,我们现在可以继续安装。
安装步骤
可以通过按顺序执行这些步骤来完成安装。
- 更新apt包索引
sudo apt-get update
- 安装apt包依赖
sudo apt-get install -y --no-install-recommends build-essential cmake git libgoogle-glog-dev libgtest-dev libiomp-dev libleveldb-dev liblmdb-dev libopencv-dev libopenmpi-dev libsnappy-dev libprotobuf-dev openmpi-bin openmpi-doc protobuf-compiler python-dev python-pip
- 安装pip依赖
sudo pip install --upgrade pip
sudo pip install setuptools future numpy protobuf
sudo apt-get install -y --no-install-recommends libgflags-dev
- 将Caffe 2克隆到本地目录中
注意:我们创建一个名为caffe2-pytorch的目录,并将Pytorch git repository克隆到此目录中。
mkdir caffe2-pytorch && cd caffe2-pytorch
git clone --recursive https://github.com/pytorch/pytorch.git ./
git submodule update --init
- 建立Caffe 2
mkdir build && cd build
cmake ..
sudo make -j"$(nproc)" install
注意:构建源代码时,我们提供-j标志。该标志指的是在构建源代码时编译器(即GCC)可以生成的线程数。该NPROC命令本身会打印可用的CPU数量。简而言之,我们希望通过创建多个线程来加快编译时间,这些线程相当于并行执行编译的CPU数量。
- 为Caffe 2共享库创建符号链接
sudo ldconfig
- 验证Caffe2的库文件和头文件是否已经安装好
- 更新本地database
sudo updatedb
- 确保libcaffe2.so在
/usr/local/lib
locate libcaffe2.so
- 确认头文件是不是在
/usr/local/include
中
locate caffe2 | grep /usr/local/include/caffe2
- 将Caffe2添加到Python 库路径中,以便于其他应用能够通过路径找到该文件
vim ~/.profile
# set python path
if [ -z “$PYTHONPATH” ]; then
PYTHONPATH=/usr/local
else
PYTHONPATH=/usr/local:$PYTHONPATH
fi
#set library path
if [ -z “$LD_LIBRARY_PATH” ]; then
LD_LIBRARY_PATH=/usr/local/lib
else
LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
fi
我们还可以使用参数扩展设置库路径,如下所示:
PYTHONPATH=/usr/local${PYTHONPATH:+:${PYTHONPATH}}
LD_LIBRARY_PATH=/usr/local/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
让新路径生效
source ~/.profile
- 验证Caffe2 python模块是否可以被正确调用
$ python -c 'from caffe2.python import core' 2>/dev/null && echo "Success" || echo "Failure"
- 验证Caffe2是否可以在GPU支持下运行
python2 -c 'from caffe2.python import workspace; print(workspace.NumCudaDevices())'