Docker很棒——越来越多的人在开发和分发中使用它。Docker有很多优点:即时环境设置、独立于平台的应用程序、现成的解决方案、更好的版本控制、简化的维护。但是当谈到数据科学和深度学习时,使用Docker会遇到一些障碍。您必须记住所有Docker标志才能在主机和容器之间共享端口和文件,创建不必要的run.sh脚本,并处理CUDA版本和GPU共享。如果你见过这个错误,你就知道痛苦:$nvidia-smiFailedtoinitializeNVML:Driver/libraryversionmismatch我们的目标本文的目的是向您介绍一系列Docker实用程序,以及我们经常使用的GPU公司准备好的样板。因此不会出现如下结果:dockerrun--rm--device/dev/nvidia0:/dev/nvidia0--device/dev/nvidiactl:/dev/nvidiactl--device/dev/nvidia-uvm:/dev/nvidia-uvm-p8888:8888-v`pwd`:/home/usergcr.io/tensorflow/tensorflow:latest-gpu而不是这个结果:文档很酷!我们真正想要实现的是:管理我们的应用程序状态(运行、停止、删除)将所有运行标志保存到一个配置文件中我们可以提交到gitrepo忘记GPU驱动程序版本不匹配并共享在Kubernetes等生产工具中使用GPU-readyRancherContainers因此,这里列出了我们强烈推荐给每个深度学习者的工具列表:1.CUDA首先,您需要CUDA工具包,如果您打算自己训练模型,这是必须具备的。我们建议使用runfile安装程序类型而不是deb,因为它不会在将来的更新中弄乱依赖项。(可选)如何检查它是否有效:cd/usr/local/cuda/samples/1_Utilities/deviceQuerymake./deviceQuery#Shouldprint"Result=PASS"2.Docker你不想用大量的库污染你的计算机并且是怕出现版本问题。同样,您不必自己构建和安装它-通常,软件已经为您创建并打包在映像中。安装Docker很简单:curl-sSLhttps://get.docker.com/|sh3.NvidiaDocker如果你使用Docker,你必须有来自NVIDIA的工具(https://github.com/NVIDIA/nvidia-docker),这真正简化了在Docker容器中使用GPU的步骤。安装非常简单:wget-P/tmphttps://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.debsudodpkg-i/tmp/nvidia-docker*.deb现在,不再每次都共享Nvidia设备:dockerrun--rm--device/dev/nvidia0:/dev/nvidia0--device/dev/nvidiactl:/dev/nvidiactl--device/dev/nvidia-uvm/dev/nvidia-uvmnvidia/cudanvidia-smi可以使用nvidia-docker命令:nvidia-dockerrun--rmnvidia/cudanvidia-smi同样,你不用担心驱动版本不匹配:Nvidia的docker插件会帮你解决问题。4.DockerCompose超级有用的实用程序,允许您将docker运行配置存储在文件中并更轻松地管理应用程序状态。尽管它旨在组合多个docker容器,但当您只有一个服务时,dockercompose仍然非常有用。这里有一个稳定版本(https://github.com/docker/compose/releases):curl-Lhttps://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname-s`-`uname-m`>/usr/local/bin/docker-composechmod+x/usr/local/bin/docker-compose5.NvidiaDockerCompose不幸的是,DockerCompose并不知道存在英伟达码头工人。幸运的是,有一个解决方法:有一个小的Python脚本可以使用nvidia-docker驱动程序生成配置。通过pip安装NvidiaDockerCompose:pipinstallnvidia-docker-compose现在您可以使用nvidia-docker-compose命令代替docker-compose。替代方案如果您不想使用nvidia-docker-compose,您可以手动传递卷驱动程序,只需将这些选项添加到docker-compose.yml:#Yournvidiadriverversionherevolumes:nvidia_driver_375.26:external:true...volumes:-nvidia_driver_375.26:/usr/local/nvidia:ro6。Bash别名,但nvidia-docker-compose需要输入21个字符,这太多了。幸运的是我们可以使用bash别名。在您喜欢的编辑器中打开~/.bashrc(或有时是~/.bash_profile)并输入以下行:aliasdoc='nvidia-docker-compose'aliasdocl='doclogs-f--tail=100'通过运行source~/。bashrc更新您的设置。启动TensorFlowServing现在我们已准备好利用上述所有工具。例如,我们运行一个支持TensorflowGPU的Docker容器。在项目目录下创建docker-compose.yml文件,内容如下:version:'3'services:tf:image:gcr.io/tensorflow/tensorflow:latest-gpuports:-8888:8888volumes:-.:/notebooks现在我们可以用一个命令启动TensorFlowJupiter:docupdoc是nvidia-docker-compose的别名——它将使用正确的volume-driver生成修改后的配置文件nvidia-docker-compose.yml,然后运行??docker-compose。您可以使用相同的命令来管理您的服务:doclogsdocstopdocrm#...etc结论但是值得吗?让我们看看它的优点和缺点。优点无需担心GPU设备共享不再担心Nvidia驱动程序版本没有支持干净、简单配置的命令标志不再有--name标志来管理容器状态了解docker-compose文件Kubernetes的缺点你必须安装更多工具它是否已准备好生产?在电影推荐应用程序Movix中,我们使用GPU加速的TensorFlow网络根据用户输入计算实时电影选择。我们的Rancher集群中有三台带有NvidiaTitanX的计算机用于ProxyAPI。配置存储在常规的docker-compose.yml文件中:因此在新服务器上部署应用程序或设置开发环境很容易。到目前为止,它一直在做最好的。为机器学习的未来做好准备!原文:https://hackernoon.com/docker-compose-gpu-tensorflow-%EF%B8%8F-a0e2011d36【本文为专栏《机器之心》原文翻译,微信公众号《机器之心》心(id:almosthuman2014)》】点此查看该作者更多好文
