Docker 有不少优点,可是在数据科学和深度学习方面,使用 Docker 也存在一些阻碍。本文介绍了一系列 Docker 实用工具,以及 GPU-ready 样板文件,让咱们看看 Docker Compose + GPU + TensorFlow 能产生什么奇特效果吧。
Docker 很棒——愈来愈多的人在开发与分布中使用它。Docker 有不少优点:即时环境设置、独立于平台的 app、现成的解决方案、更好的版本控制、简化的维护。
可是在数据科学和深度学习方面,使用 Docker 有一些阻碍。你必须记住全部的 Docker 标志,以在主机和容器之间共享端口和文件,建立没必要要的 run.sh 脚本,并处理 CUDA 版本和 GPU 共享。若是你曾经见过下面这个错误,你就会明白这种痛苦:
本文的目的在于为你介绍一系列 Docker 实用工具,以及咱们常常在公司使用的 GPU-ready 样板文件。
-
经过一个指令管理咱们的应用程序状态(运行、中止、移除)
-
把全部的运行标志保存到咱们可以提交到 git repo 的单个配置文件
-
忘记 GPU 驱动程序版本不匹配和共享
-
在生产工具好比 Kubernetes 或 Rancher 中使用 GPU-ready 的容器
所以,这里是咱们强烈推荐给每一个深度学习者的工具清单:
首先,你须要 CUDA 工具包,若是你打算本身动手训练模型,那这是必需要有的。咱们推荐使用 runfile 安装程序类型而不是 deb,由于它不会在之后的更新中混淆依赖关系。
你不想让海量的库污染你的计算机,也惧怕版本出现问题。一样,你没必要亲自构建和安装——一般,软件已为你建立好了,并包装在图像中。安装 Docker 很简单:
若是使用 Docker,必须有来自英伟达的实用程序(https://github.com/NVIDIA/nvidia-docker),它真正简化了在 Docker 容器内使用 GPU 的步骤。
一样,你也无需担忧驱动程序版本不匹配:英伟达的 docker 插件将会帮你解决问题。
超级有用的实用程序,容许你在文件中存储 docker run 配置,并更轻松地管理应用程序状态。尽管它的设计目的是组合多个 docker 容器,但 docker compose 在你只有一个服务的时候依然很是有用。这里有一个稳定版本(https://github.com/docker/compose/releases):
不幸的是,Docker Compose 并不知道 Nvidia Docker 的存在。幸运的是,有一个解决方法:有一个小的 Python 脚本,能够用 nvidia-docker 驱动程序生成配置。经过 pip 安装 Nvidia Docker Compose:
如今你可使用 nvidia-docker-compose 命令,而不是 docker-compose 了。
若是你不想使用 nvidia-docker-compose,你能够手动传递音量驱动程序,只需把这些选项添加到 docker-compose.yml:
可是 nvidia-docker-compose 须要输入 21 个字符,这太多了。
很幸运咱们可使用 bash 别名。在你最喜好的编辑器打开~/.bashrc(有时是~/.bash_profile),输入如下代码行:
经过运行 source ~/.bashrc 更新你的设置。
如今咱们准备好利用上述全部工具的优势。好比,咱们运行一个 Tensorflow GPU 启用的 Docker 容器。
在项目目录中建立具备如下内容的 docker-compose.yml 文件:
如今咱们可使用单个命令开始 TensorFlow Jupiter:
doc 是 nvidia-docker-compose 的别名——它将使用正确的 volume-driver 生成已修改的配置文件 nvidia-docker-compose.yml,而后运行 docker-compose。
它是生产就绪(production-ready)的吗
是的。在电影推荐应用 Movix 中,咱们使用 GPU 加速的 TensorFlow 网络基于用户输入计算实时的电影选择。
咱们在 Proxy API 的 Rancher 集群中有三台带有 Nvidia Titan X 的电脑。配置储存在常规 docker-compose.yml 文件中:所以在一个新服务器上部署应用程序或者设置开发环境变得很轻松。目前为止它的表现堪称完美。
原文连接:https://hackernoon.com/docker-compose-gpu-tensorflow-%EF%B8%8F-a0e2011d36