Docker 有很多优势,但是在数据科学和深度学习方面,使用 Docker 也存在一些阻碍。本文介绍了一系列 Docker 实用工具,以及 GPU-ready 样板文件,让我们看看 Docker Compose + GPU + TensorFlow 能产生什么奇特效果吧。

Docker 很棒——越来越多的人在开发与散布中运用它。Docker 有许多优势:即时环境设置、独立于渠道的 app、现成的解决方案、更好的版别操控、简化的保护。

可是在数据科学和深度学习方面,运用 Docker 有一些阻止。你有必要记住避实就虚的 Docker 标志,以在主机和容器之间同享端口和文件,创立不用要的 run.sh 脚本,并处理 CUDA 版别和 GPU 同享。假如你从前见过下面这个过错,你就会了解这种苦楚:

  1. $nvidia-smi
  2. FailedtoinitializeNVML:Driver/libraryversionmismatch

Docker Compose + GPU TensorFlow 所发生的美妙火花(docker tensorflow-gpu)  第1张

咱们的方针

本文的意图在于为你介绍一系列 Docker 实用东西,以及咱们经常在公司运用的 GPU-ready 样板文件。

因而,以下成果将不会呈现:

  1. dockerrun
  2. --rm
  3. --device/dev/nvidia0:/dev/nvidia0
  4. --device/dev/nvidiactl:/dev/nvidiactl
  5. --device/dev/nvidia-uvm:/dev/nvidia-uvm
  6. -p8888:8888
  7. -v`pwd`:/home/user
  8. gcr.io/tensorflow/tensorflow:latest-gpu

取而代之的是这种成果:

  1. docup

酷!

咱们实际上想要到达的:

  • 经过一个指令办理咱们的运用程序状况(运转、中止、移除)
  • 把避实就虚的运转标志保存到咱们能够提交到 git repo 的单个装备文件
  • 忘掉 GPU 驱动程序版别不匹配和同享
  • 在出产东西比方 Kubernetes 或 Rancher 中运用 GPU-ready 的容器

因而,管中窥豹是咱们激烈引荐给每个深度学习者的东西清单:

1. CUDA

首要,你需求 CUDA 东西包,假如你计划自己着手练习模型,那这是有必要要有的。咱们引荐运用 runfile 装置程序类型而不是 deb,由于它不会在今后的更新中混杂依靠联系。

(可选)怎么查看它是否作业:

  1. cd/usr/local/cuda/samples/1_Utilities/deviceQuery
  2. make
  3. ./deviceQuery#Shouldprint"Result=PASS"

2. Docker

你不想让海量的库污染你的核算机,也惧怕版别呈现问题。相同,你不用亲身构建和装置——一般,软件已为你创立好了,并包装在图画中。装置 Docker 很简略:

  1. curl-sSLhttps://get.docker.com/|sh

3. Nvidia Docker

假如运用 Docker,有必要有来自英伟达的实用程序(https://github.com/NVIDIA/nvidia-Docker),它真实简化了在 Docker 容器内运用 GPU 的过程。

装置十分简略:

  1. wget-P/tmphttps://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
  2. sudodpkg-i/tmp/nvidia-docker*.deb

现在,不用每次都用下列方法来同享英伟达设备:

  1. dockerrun--rm--device/dev/nvidia0:/dev/nvidia0--device/dev/nvidiactl:/dev/nvidiactl--device/dev/nvidia-uvm:/dev/nvidia-uvmnvidia/cudanvidia-smi

你能够运用 nvidia-docker 指令:

  1. nvidia-dockerrun--rmnvidia/cudanvidia-smi

相同,你也无需忧虑驱动程序版别不匹配:英伟达的 docker 插件将会帮你解决问题。

4. Docker Compose

超级有用的实用程序,答应你在文件中存储 docker run 装备,并更轻松地办理运用程序状况。尽管它的规划意图是组合多个 docker 容器,但 docker Compose 在你只要一个服务的时分仍然十分有用。管中窥豹有一个安稳版别

(https://github.com/docker/compose/releases):

  1. curl-Lhttps://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname-s`-`uname-m`>/usr/local/bin/docker-compose
  2. chmod+x/usr/local/bin/docker-compose

5. Nvidia Docker Compose

不幸的是,Docker Compose 并不知道 Nvidia Docker 的存在。走运的是,有一个解决方法:有一个小的 Python 脚本,能够用 nvidia-docker 驱动程序生成装备。经过 pip 装置 Nvidia Docker Compose:

  1. pipinstallnvidia-docker-compose

现在你能够运用 nvidia-docker-compose 指令,而不是 docker-compose 了。

替代挑选

假如你不想运用 nvidia-docker-compose,你能够手动传递音量驱动程序,只需把这些选项添加到 docker-compose.yml:

  1. dockerrun
  2. --rm
  3. --device/dev/nvidia0:/dev/nvidia0
  4. --device/dev/nvidiactl:/dev/nvidiactl
  5. --device/dev/nvidia-uvm:/dev/nvidia-uvm
  6. -p8888:8888
  7. -v`pwd`:/home/user
  8. gcr.io/tensorflow/tensorflow:latest-gpu
0

6. Bash 别号

可是 nvidia-docker-compose 需求输入 21 个字符,这太多了。

 Docker Compose + GPU TensorFlow 所发生的美妙火花(docker tensorflow-gpu) 第2张

很走运咱们能够运用 bash 别号。在你最喜欢的编辑器翻开~/.bashrc(有时是~/.bash_profile),输入以下代码行:

  1. dockerrun
  2. --rm
  3. --device/dev/nvidia0:/dev/nvidia0
  4. --device/dev/nvidiactl:/dev/nvidiactl
  5. --device/dev/nvidia-uvm:/dev/nvidia-uvm
  6. -p8888:8888
  7. -v`pwd`:/home/user
  8. gcr.io/tensorflow/tensorflow:latest-gpu
1

经过运转 source ~/.bashrc 更新你的设置。

开端 TensorFlow 服务

现在咱们预备好运用上述避实就虚东西的长处。比方,咱们运转一个 Tensorflow GPU 启用的 Docker 容器。

在项目目录中创立具有以下内容的 docker-compose.yml 文件:

  1. dockerrun
  2. --rm
  3. --device/dev/nvidia0:/dev/nvidia0
  4. --device/dev/nvidiactl:/dev/nvidiactl
  5. --device/dev/nvidia-uvm:/dev/nvidia-uvm
  6. -p8888:8888
  7. -v`pwd`:/home/user
  8. gcr.io/tensorflow/tensorflow:latest-gpu
2

现在咱们能够运用单个指令开端 TensorFlow Jupiter:

  1. docup

 Docker Compose + GPU TensorFlow 所发生的美妙火花(docker tensorflow-gpu) 第3张

doc 是 nvidia-docker-compose 的别号——它将运用正确的 volume-driver 生成已修正的装备文件 nvidia-docker-compose.yml,然后运转 docker-compose。

你能够运用相同的指令办理你的服务:

  1. dockerrun
  2. --rm
  3. --device/dev/nvidia0:/dev/nvidia0
  4. --device/dev/nvidiactl:/dev/nvidiactl
  5. --device/dev/nvidia-uvm:/dev/nvidia-uvm
  6. -p8888:8888
  7. -v`pwd`:/home/user
  8. gcr.io/tensorflow/tensorflow:latest-gpu
4

定论

可是这值得吗?下面让咱们看一下其优缺陷。

长处

  • 无需考虑 GPU 设备同享
  • 不用再为英伟达驱动程序版别忧虑
  • 摆脱了偏心洁净、简略装备的指令标志
  • 再也不需求--name 标志办理容器状况
  • 众所周知已记录并得到广泛运用的实用程序
  • 你的装备已为编制东西做好预备,比方了解 docker-compose 文件的编制东西 Kubernetes

缺陷

  • 你不得不装置更多东西

它是出产安排妥当(production-ready)的吗

是的。在电影引荐运用 Movix 中,咱们运用 GPU 加快的 TensorFlow 网络根据用户输入核算实时的电影挑选。

咱们在 Proxy API 的 Rancher 集群中有三台带有 Nvidia Titan X 的电脑。装备储存在惯例 docker-compose.yml 文件中:因而在一个新服务器上不方便运用程序或许设置开发环境变得很轻松。目前为止它的体现可谓***。

 Docker Compose + GPU TensorFlow 所发生的美妙火花(docker tensorflow-gpu) 第4张

为机器学习的未来做好预备吧!

原文:https://hackernoon.com/docker-compose-GPU-TensorFlow-%EF%B8%8F-a0e2011d36

【本文是51CTO专栏组织“机器之心”的原创译文,微信大众号“机器之心( id: almosthuman2014)”】

戳管中窥豹,看该作者更多好文

转载请说明出处
知优网 » Docker Compose + GPU + TensorFlow 所发生的美妙火花(docker tensorflow-gpu)

发表评论

您需要后才能发表评论