Docker:把深度学习装进“口袋”

熟悉深度学习开发框架的朋友都知道,”caffe“的安装麻烦、耗时长,而且很容易因为电脑环境没有配置好导致错误。每次有新同事来,我们都要在他电脑上安装一遍”caffe“,经常会因为电脑环境而不断报错。

目前TensorFlow受到很多深度学习开发者的追捧,很可惜,当下TensorFlow没有mac版本,所以每次要使用TensorFlow开发时,需要去连接远端服务器,而且还不能调试,操作不灵活。

这个时候,我们想到了Docker

很多人喜欢说Docker是一种虚拟机,我不喜欢这个说法。虚拟机给人的第一印象是笨重、占内存大。相比于一般意义上的虚拟机,Docker更像是一个轻量级的应用管理工具。Docker像是微信平台,Docker上的应用便是小程序。当然,这个比喻只是想说明Docker的轻量化,也有一些不准确,微信小程序是对原始程序进行了”瘦身“,Docker是对应用依赖的操作系统进行了“瘦身”。

如果你要在虚拟机上安装Windows系统下的功能,你需要安装整个Windows系统文件,可能要好几个G,而在Docker下,安装Windows系统的内核,也就几十兆。

我们将TensorFlow、caffe、pytorch、Keras等常用的工具集成到Docker镜像中,每次需要在新机器上安装这些工具时,只需要安装Docker,再把Docker镜像拷贝安装即可,无需重新配置工具所需的运行环境。

Docker镜像是依赖于Docker环境的应用安装包,Docker容器是应用。Docker的官方文档称:docker镜像是类,docker容器是对象。这也就意味着在docker上可以有很多个一模一样的容器,这些容器之间是相互独立的。就好比现在很多手机上的“应用分身”功能,一个手机上有两个微信,登录着不同的账号,且同时运转,相互没有干扰。

Docker镜像有很多种构建方法,你可以在已有的容器中安装新的功能,将它保存成镜像,也可以通过Dockerfile去构建镜像。Dockerfile是用来生成镜像的文件。我们将写好的Dockerfile发送到Docker cloud 让第三方去生成镜像,最后一个命令 “docker pull image_name”即可。

在使用了Docker之后,我可以在Mac上使用TensorFlow的CPU版本进行开发调试,最后将没有bug的程序放在远端服务器借助GPU处理以提高效率。在之前没有Docker的情况下,只能在远端开发,效率很低。

最近在进行烟囱识别(在遥感影像上标识出有烟囱的地方)的工作中,便是用到了Docker,我将带有TensorFlow(CPU版本)的镜像‘pull’到本地之后,生成容器,将pycharm连接到容器,在容器中编辑、运行和调试深度学习的程序。

但是有一个新问题,docker和GPU的问题,直接使用docker运行的容器是不能调用GPU的,因为docker的镜像是脱离硬件的,而cuda的安装必须依赖于硬件,所以在镜像中无法安装cuda。利用GPU处理图像的深度学习问题是高效的,而且每个深度学习的框架工具也是支持GPU模式的。为了解决这个问题,英伟达公司发布了nvidia-docker。下图为nvidia-docker的技术框架。

英伟达通过nvidia-docker解决了容器中深度学习框架工具使用GPU的问题。这样我们便可使用GPU来处理深度学习的程序。

欢迎从GeoHey获取地理和位置相关的数据、知识、服务

访问网站 http://geohey.com

联系我们 contact@geohey.com

长按关注公众号

jingcb

继续阅读此作者的更多文章