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

Sep 19, 2017

熟悉深度学习开发框架的朋友都知道,”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

长按关注公众号

评论正在加载...
Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.
分享