前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker Compose + GPU + TensorFlow = Heart

Docker Compose + GPU + TensorFlow = Heart

作者头像
AiTechYun
发布2018-03-02 17:47:01
1.6K0
发布2018-03-02 17:47:01
举报
文章被收录于专栏:ATYUN订阅号ATYUN订阅号

Docker是一个开源的应用容器引擎——越来越多的人将它用于开发和分发上。即时环境设置、平台独立应用、即时解决方案、更好的版本控制、简化维护。可以说Docker是有很多好处的。

但是,当涉及到数据科学和深度学习时,你必须记住所有Docker标志,以便在主机和容器之间共享端口和文件,从而创建不必要的run.sh脚本,并且处理CUDA版本和GPU共享。如果你见过下面这个错误,你就会知道这个错误带来的麻烦:

代码语言:javascript
复制
$ nvidia-smi 

Failed to initialize NVML: Driver/library version mismatch

目标

这篇文章将为你介绍一种充分的的Docker实用工具集和GPU-ready的样板文件。

因此,代替这个:

代码语言:javascript
复制
docker run \

--rm \

--device /dev/nvidia0:/dev/nvidia0 \

--device /dev/nvidiactl:/dev/nvidiactl \

--device /dev/nvidia-uvm:/dev/nvidia-uvm \

-p 8888:8888 \

-v `pwd`:/home/user \

gcr.io/tensorflow/tensorflow:latest-gpu

你会得到这样的结果:

代码语言:javascript
复制
doc up

我们真正想要达到的目标是什么?

  • 使用一个命令管理我们的应用程序状态(运行、停止、删除)
  • 将所有这些运行标志保存至我们可以交付到git repo的一个单独的配置文件中。
  • 忘记GPU驱动程序版本的不匹配和共享
  • 在Kubernetes或Rancher等生产工具中使用GPU-ready容器

下面是我强烈推荐给每个深度学习者的工具列表:

1.CUDA

首先,你需要一个CUDA工具包。工具包地址:https://developer.nvidia.com/cuda-downloads。如果你计划自己训练模型,那它绝对是必不可少的。我建议使用runfile安装程序类型而不是deb,因为它不会在将来的更新中破坏你的依赖。

(可选)如何检查它是否有效:

代码语言:javascript
复制
cd /usr/local/cuda/samples/1_Utilities/deviceQuery

make

./deviceQuery # Should print "Result = PASS"

2.Docker

你不想用大量的库来占据你的电脑,并且害怕版本会被破坏。另外,你也不需要自己构建和安装东西——通常,Docker软件已经为你准备好了,并且装在图片里!Docker地址:https://www.docker.com/get-docker

代码语言:javascript
复制
curl -sSL https://get.docker.com/ | sh

3.Nvidia Docker

如果你使用Docker的话,必须要有来自NVIDIA的实用工具——它确实简化了Docker容器内的GPU的使用。实用工具地址:https://github.com/NVIDIA/nvidia-docker

安装很简单:

代码语言:javascript
复制
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb

sudo dpkg -i /tmp/nvidia-docker*.deb

现在,代替每次都像这样分享nvidia的设备:

代码语言:javascript
复制
docker run --rm --device /dev/nvidia0:/dev/nvidia0 
--device /dev/nvidiactl:/dev/nvidiactl --device /dev/nvidia-
uvm:/dev/nvidia-uvm nvidia/cuda nvidia-smi

你可以使用nvidia-docker命令:

代码语言:javascript
复制
nvidia-docker run --rm nvidia/cuda nvidia-smi

另外,你可以不用担心驱动版本的不匹配:Nvidia的docker插件会解决你的问题。

4.Docker Compose

它是非常有用的实用工具,允许你在文件中存储docker运行配置,并更容易地管理应用程序状态。尽管它的设计初衷是将多个docker容器组合在一起,但当你只有一个时,docker组合仍然非常有用。

选择一个稳定版本:https://github.com/docker/compose/releases

代码语言:javascript
复制
curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

5.Nvidia Docker Compose

不幸的是,Docker Compose并不知道Nvidia Docker存在。幸运的是,有一个解决方案:有一个小的Python脚本可以nvidia-docker驱动程序生成配置。Python脚本地址:https://github.com/eywalker/nvidia-docker-compose 使用pip安装:

代码语言:javascript
复制
pip install nvidia-docker-compose

现在你可以使用nvidia-docker-compose命令而不是docker-compose。

替代

如果你不想使用nvidia-docker-compose,你可以手动传递卷驱动(Volume Driver)程序。Volume Driver地址:https://github.com/NVIDIA/nvidia-docker/wiki/NVIDIA-driver#alternatives。只需将这些选项添加到你的docker-compose.yml中:

代码语言:javascript
复制
# Your nvidia driver version here
volumes:
  nvidia_driver_375.26:
    external: true
...
  volumes:
    - nvidia_driver_375.26:/usr/local/nvidia:ro

6. Bash aliases

但是nvidia-docker-compose需要键入21个字符!感觉有点多…

幸运的是,我们可以使用bash aliases. Open ~/.bashrc(有时叫做 ~/.bash_profile)在你喜欢的编辑器中,并输入这些行:

代码语言:javascript
复制
alias doc='nvidia-docker-compose'

alias docl='doc logs -f --tail=100'

通过运行source ~/.bashrc更新你的设置。

开始一个TensorFlow服务

现在,让我们运行一个Tensorflow GPU-enable Docker容器。在项目目录中创建包含以下内容的docker-compose.yml文件:

代码语言:javascript
复制
version: '3'
services:
  tf:
    image: gcr.io/tensorflow/tensorflow:latest-gpu
    ports:
      - 8888:8888
    volumes:
      - .:/notebooks

现在我们可以用一个单独的命令来启动TensorFlow Jupiter:

代码语言:javascript
复制
doc up

doc是nvidia-docker-compose 的别名,它将生成修改后的配置文件nvidia-docker-compose.yml与正确的volume-driver,然后运行docker-compose。

你可以使用相同的命令来管理你的服务:

代码语言:javascript
复制
doc logs
doc stop
doc rm
# ...etc

结论

让我们来权衡一下它的利弊。

优点

  • 忘记了GPU设备共享
  • 你不用再担心Nvidia的驱动版本了
  • 我们去掉了命令标志,支持干净和简单的配置
  • 不再是管理容器状态的名称标志
  • 广为人知的文档和广泛使用的实用程序
  • 你的配置已经准备好了像Kubernetes这样的编制工具,这些工具可以理解docker-compose files文件

缺点

  • 你必须安装更多的工具
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ATYUN订阅号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.CUDA
  • 2.Docker
  • 4.Docker Compose
  • 替代
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档