caffe cuda docker 环境搭建

注意:

在安装过程中,要时刻提醒自己注意版本的一致性(若不一致,会走很多弯路),包括nvidia driver cuda cudnn 和caffe ,我们需要的版本是: dirver:384以上 cuda:9.0 cudnn:7.0 caffe:1.0

几个概念

Cuda是nvidia的驱动模块,用来做gpu并发计算,它提供内核驱动和应用层的工具nvidia-smi;
Cudnn,是nvidia为深度学习封装的SDK,提供给那些使用nvidia GPU的应用统一的接口,比如caffe;
那么,nvidia为了提供简易的安装,对cuda和cudnn都提供了docker的支持,并且不断的更新维护,

开始

好了,到了我们说说caffe的时候了,Caffe是深度学习的框架,跟tensfllow属于一个地位的,caffe可以基于cpu/gpu来进行学习计算,那么,当caffe 使用gpu进行运算的时候,就用到了nvidia的gpu,也就意味着需要用到 cuda和cudnn。当然,cudnn并不是必须的,所以在编译caffe时,可以enable cudnn,也可以disable cudnn,

OK,我们再来说说caffe的版本维护,它是有BVLC进行维护的,并且BVLC提供docker的版本 BVLC/caffe,到现在,我们搞清楚了前后联系,那么在安装和参考官方文档的时候就不会出现逻辑混乱了。

现在,我们来确定我们目标,目标是使用caffe框架进行高效的深度学习开发,这个目标提到高效,那就要用到caffe 的GPU版本,那就要跟nvidia 扯上关系了,Nvidia这个东西挺麻烦,因为nvidia的驱动与其对应的应用工具都有版本关联,也就是说,驱动和工具安装的版本不一致,可能就会有冲突而无法运行,
所以,大前提是,先了解一下本地Host宿主机的GPU型号,驱动版本,以及我们要使用的cuda和cudnn的版本,这些都了解清楚了之后,
先要在Host宿主机上安装nvidia的驱动,
查看GPU型号 nvidia-smi -L

驱动装完之后,剩下的就是找对docker的版本了,首先得确定docker的版本,这个很重要,由于要使用nvidia-docker 作为runtime,nvidia-docker 与通用版本的docker是有对应关系的,nvidia只支持稳定版本的docker,详细参考 https://github.com/NVIDIA/nvidia-docker 中的Quickstart 中的链接,可以查看nvidia-docker支持的版本,注意,在安装cuda这一步是有选择性的操作,
#Test nvidia-smi with the latest official CUDA image
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
运行这个的结果,会安装最新的nvdia/cuda
那我们需要的是cuda9.0,可以使用下面的命令来代替上面最后这个命令,
sudo docker run --rm --runtime=nvidia nvidia/cuda:9.0-cudnn7-devel nvcc --version

这样,获取cuda9.0和cudnn7.0 到此OK了,在获取cuda相关版本的时候,我不得不提一下 nvidia 对cuda docker的官方支持,
https://hub.docker.com/r/nvidia/cuda/
在这个上面,有我们需要的最新的所有cuda和cudnn的版本。

接下来,我们需要的就是caffe了,同样,我们需要安装的是caffe docker镜像,我们的caffe需要运行在我们刚刚安装好的cuda9.0和cudnn7.0之上,而caffe的官方入口是
http://caffe.berkeleyvision.org/installation.html,
通过这个入口,我们可以最终确定caffe docker的入口
https://github.com/BVLC/caffe/tree/master/docker
对,就是这个由BVLC/caffe维护的版本,
这个上面的README 给了我们主要的参考流程,但是我们还不能直接使用,看看GPU版本的Dockerfile,我们会发现它对应的是cuda8.0的版本,
我们要使用cuda9.0来重新build一个镜像,在新build镜像时,首先需要确定基础镜像,在Dockerfile中把FROM对应的版本信息改成我们需要的,
FROM nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04

接下来是另一个重头戏,编译caffe,官网上编译指导文档
http://caffe.berkeleyvision.org/installation.html#compilation
我们选择使用Make进行编译,所以,需要重新修改
Makefile.config
比如
USE_CUDNN := 1
USE_NCCL := 1
以及一些依赖库,报错什么依赖没找到就往上添加什么库,
在做make caffe 的时候,
只需要make all 和 make test 即可,
不用使用 make runtest(提示找不到)
make pycaffe 这个是需要单独编译的,也需要加上,

至此,Dockerfile修改完成,

最后,就是创建新镜像环节,这里还是需要注意一下的,
因为在新build的过程中,需要gpu库,所以必须使用nvidia-docker进行build,
sudo nvidia-docker build --rm -t rainbow/caffe:cuda9-cudnn7 .
然后就是
等待,等待。。。
祈祷吧。。。Amen

不需要安装caffe,因为在应用时一般都是在用pycaffe,所以只需要编 译好后制定PYTHONPATH即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章